hecks 3.4.2 → 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/deploy/bluebook/deploy.bluebook +1510 -3
- data/lib/hecks/deploy/bluebook/deploy.hecksagon +57 -0
- data/lib/hecks/deploy/oidc.json +225 -0
- 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 +91 -0
- 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 +49 -0
- 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 +122 -59
- 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 +39 -37
- 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 +19 -10
- data/lib/hecks/hecks/adapters/terminal.rb +13 -9
- data/lib/hecks/hecks/codebase.bluebook +322 -5
- data/lib/hecks/hecks/custodian.bluebook +12 -2
- data/lib/hecks/hecks/hecks.hecksagon +73 -0
- data/lib/hecks/hecks/hecks.world +15 -3
- 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 +16 -108
- 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 +62 -0
- 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 +51 -4
- data/lib/hecks/projections/deploy/box/templates/deploy-service.services-roll.part +4 -3
- data/lib/hecks/projections/deploy/box/templates/deploy-service.sh.tmpl +16 -4
- data/lib/hecks/projections/deploy/box/templates/deploy-service.taskdef-roll.part +8 -7
- data/lib/hecks/projections/deploy/box/templates/deploy-service.taskdef.part +1 -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/hosting.mk.tmpl +6 -3
- 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/restore-to-rds.sh.tmpl +8 -3
- 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/verify-copy.sh.tmpl +2 -2
- data/lib/hecks/projections/deploy/box/templates/writable-secrets.yaml.tmpl +7 -0
- data/lib/hecks/projections/deploy/box.rb +37 -503
- 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 +146 -0
- 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 +33 -0
- data/lib/hecks/projections/site/admin_cms.rb +78 -0
- 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 +137 -0
- 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 +33 -0
- data/lib/hecks/projections/site/payload/model.rb +128 -0
- data/lib/hecks/projections/site/payload/specs/wire.rb +69 -0
- data/lib/hecks/projections/site/payload/specs.rb +135 -0
- data/lib/hecks/projections/site/payload_driver.rb +95 -0
- data/lib/hecks/projections/site/root_rows.rb +67 -0
- 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 +85 -0
- 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 +109 -0
- data/lib/hecks/projections/site/site_host.rb +58 -0
- data/lib/hecks/projections/site/site_root/workflow.rb +65 -0
- data/lib/hecks/projections/site/site_root.rb +128 -0
- 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/site/bluebook/site.bluebook +7 -1
- 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 +102 -108
- 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 +607 -3
- /data/lib/hecks/bluebook/behaviour/{hexagon.rb → hecksagon.rb} +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# The storehouse — @@owner_domain_name@@'s own live stack Outputs,
|
|
2
|
+
# looked up at deploy time (the generated Makefile's own `deploy:`
|
|
3
|
+
# target) via `aws cloudformation describe-stacks`, the identical
|
|
4
|
+
# pattern `Lambda`'s own generated Makefile already uses for a
|
|
5
|
+
# Shared-mode domain.
|
|
6
|
+
OwningVpcId:
|
|
7
|
+
Type: AWS::EC2::VPC::Id
|
|
8
|
+
OwningSubnetAId:
|
|
9
|
+
Type: AWS::EC2::Subnet::Id
|
|
10
|
+
OwningSubnetBId:
|
|
11
|
+
Type: AWS::EC2::Subnet::Id
|
|
12
|
+
# PUBLIC subnets, NOT OwningSubnetAId/OwningSubnetBId above — a
|
|
13
|
+
# real, live deploy (a shared-database stack) found the ALB placed in
|
|
14
|
+
# the private pair creates successfully and reports its target
|
|
15
|
+
# health as healthy (health checks run from inside the VPC), yet
|
|
16
|
+
# is completely unreachable from outside it:
|
|
17
|
+
# OwningSubnetAId/OwningSubnetBId have MapPublicIpOnLaunch: false
|
|
18
|
+
# and no Internet Gateway route. These two — resolved from the
|
|
19
|
+
# owner stack's own PublicSubnetId/BastionSubnetId Outputs,
|
|
20
|
+
# MapPublicIpOnLaunch: true with a real 0.0.0.0/0 -> igw route —
|
|
21
|
+
# are the pair that actually works for an internet-facing ALB.
|
|
22
|
+
# Service.NetworkConfiguration below still (correctly) uses the
|
|
23
|
+
# private pair for the tasks themselves — only the ALB moves.
|
|
24
|
+
OwningPublicSubnetAId:
|
|
25
|
+
Type: AWS::EC2::Subnet::Id
|
|
26
|
+
OwningPublicSubnetBId:
|
|
27
|
+
Type: AWS::EC2::Subnet::Id
|
|
28
|
+
OwningSecurityGroupId:
|
|
29
|
+
Type: AWS::EC2::SecurityGroup::Id
|
|
30
|
+
OwningDatabaseEndpoint:
|
|
31
|
+
Type: String
|
|
32
|
+
OwningDatabaseSecretArn:
|
|
33
|
+
Type: String
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
# GENERATED by hecks deploy project @@domain@@ — re-run it to refresh
|
|
2
|
+
# this file rather than hand-editing. Source: @@world_file@@'s own
|
|
3
|
+
# deployed_to("AwsFargate") block.
|
|
4
|
+
#
|
|
5
|
+
# Plain CloudFormation, not SAM — deployed with
|
|
6
|
+
# `aws cloudformation deploy`, never `sam deploy`. Self-contained
|
|
7
|
+
# the same way `Lambda`'s own template is: this stack owns its own
|
|
8
|
+
# private VPC, subnets, and RDS Postgres instance (unless
|
|
9
|
+
# database "Shared"), not just the ECS service.
|
|
10
|
+
AWSTemplateFormatVersion: '2010-09-09'
|
|
11
|
+
Description: >
|
|
12
|
+
@@infra_name@@ — dispatched through hecks's rust/host, running as a
|
|
13
|
+
long-lived container on AWS Fargate, backed by its own private RDS
|
|
14
|
+
Postgres instance.
|
|
15
|
+
@@parameters_block@@
|
|
16
|
+
Resources:
|
|
17
|
+
@@network_resources@@
|
|
18
|
+
|
|
19
|
+
@@alb_sg_id@@:
|
|
20
|
+
Type: AWS::EC2::SecurityGroup
|
|
21
|
+
Properties:
|
|
22
|
+
VpcId: @@vpc_ref@@
|
|
23
|
+
GroupDescription: @@alb_sg_description@@
|
|
24
|
+
SecurityGroupIngress:
|
|
25
|
+
# pl-3b927c52 — com.amazonaws.global.cloudfront.origin-
|
|
26
|
+
# facing, AWS's own global, account-agnostic managed
|
|
27
|
+
# prefix list (confirmed: `aws ec2 describe-managed-
|
|
28
|
+
# prefix-lists`, OwnerId "AWS", same id in every
|
|
29
|
+
# account/region). NOT 0.0.0.0/0 — the whole reason
|
|
30
|
+
# @@distribution_id@@ above exists is Managed-
|
|
31
|
+
# CachingDisabled on every session-cookie-driven
|
|
32
|
+
# route; leaving the ALB itself open to the public
|
|
33
|
+
# internet on this same port would let anyone bypass
|
|
34
|
+
# that distribution (and its HTTPS) entirely and hit
|
|
35
|
+
# the plain-HTTP origin directly — the exact gap a
|
|
36
|
+
# code review caught the first time this resource was
|
|
37
|
+
# added.
|
|
38
|
+
- IpProtocol: tcp
|
|
39
|
+
FromPort: 80
|
|
40
|
+
ToPort: 80
|
|
41
|
+
SourcePrefixListId: pl-3b927c52
|
|
42
|
+
|
|
43
|
+
@@ingress_from_alb_id@@:
|
|
44
|
+
Type: AWS::EC2::SecurityGroupIngress
|
|
45
|
+
Properties:
|
|
46
|
+
GroupId: @@compute_security_group_ref@@
|
|
47
|
+
IpProtocol: tcp
|
|
48
|
+
FromPort: @@port_min@@
|
|
49
|
+
ToPort: @@port_max@@
|
|
50
|
+
SourceSecurityGroupId: !Ref @@alb_sg_id@@
|
|
51
|
+
|
|
52
|
+
@@ecr_repository_id@@:
|
|
53
|
+
Type: AWS::ECR::Repository
|
|
54
|
+
Properties:
|
|
55
|
+
RepositoryName: @@repository_name@@
|
|
56
|
+
ImageScanningConfiguration:
|
|
57
|
+
ScanOnPush: true
|
|
58
|
+
|
|
59
|
+
@@cluster_id@@:
|
|
60
|
+
Type: AWS::ECS::Cluster
|
|
61
|
+
Properties:
|
|
62
|
+
ClusterName: @@cluster_name@@
|
|
63
|
+
|
|
64
|
+
@@log_group_id@@:
|
|
65
|
+
Type: AWS::Logs::LogGroup
|
|
66
|
+
Properties:
|
|
67
|
+
LogGroupName: @@log_group_name@@
|
|
68
|
+
RetentionInDays: 30
|
|
69
|
+
|
|
70
|
+
# Always minted — HECKS_SERVE_MODE always runs web.rs, which
|
|
71
|
+
# panics on an empty SESSION_SECRET (seen live as a 502
|
|
72
|
+
# after a database cutover). rust/host fetches this at cold
|
|
73
|
+
# start (secrets.rs), never a plain env var.
|
|
74
|
+
@@session_secret_id@@:
|
|
75
|
+
Type: AWS::SecretsManager::Secret
|
|
76
|
+
Properties:
|
|
77
|
+
# TMPL:session_secret_properties
|
|
78
|
+
GenerateSecretString:
|
|
79
|
+
SecretStringTemplate: '{}'
|
|
80
|
+
GenerateStringKey: session_secret
|
|
81
|
+
PasswordLength: 64
|
|
82
|
+
ExcludePunctuation: true
|
|
83
|
+
|
|
84
|
+
# Pulls the image and writes CloudWatch Logs — AWS's own managed
|
|
85
|
+
# AmazonECSTaskExecutionRolePolicy already covers both (ECR auth
|
|
86
|
+
# + GetDownloadUrlForLayer, and logs:CreateLogStream/PutLogEvents);
|
|
87
|
+
# the one grant that policy does NOT cover is fetching this
|
|
88
|
+
# domain's own database secret, added below, least-privilege,
|
|
89
|
+
# scoped to the single secret ARN this stack itself depends on.
|
|
90
|
+
@@execution_role_id@@:
|
|
91
|
+
Type: AWS::IAM::Role
|
|
92
|
+
Properties:
|
|
93
|
+
AssumeRolePolicyDocument:
|
|
94
|
+
Version: '2012-10-17'
|
|
95
|
+
Statement:
|
|
96
|
+
- Effect: Allow
|
|
97
|
+
Principal: { Service: ecs-tasks.amazonaws.com }
|
|
98
|
+
Action: sts:AssumeRole
|
|
99
|
+
ManagedPolicyArns:
|
|
100
|
+
- arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
|
|
101
|
+
Policies:
|
|
102
|
+
# TMPL:execution_database_grant
|
|
103
|
+
# TMPL:extra_execution_policies
|
|
104
|
+
|
|
105
|
+
# The container's OWN runtime permissions — rust/host fetches
|
|
106
|
+
# DB_SECRET_ARN itself, over the AWS SDK, the same "never let
|
|
107
|
+
# CloudFormation/ECS configuration see it resolved" posture
|
|
108
|
+
# `Lambda`'s own generated template already holds to (a
|
|
109
|
+
# `Secrets:` ContainerDefinition property would resolve it
|
|
110
|
+
# into a plain environment variable instead).
|
|
111
|
+
@@task_role_id@@:
|
|
112
|
+
Type: AWS::IAM::Role
|
|
113
|
+
Properties:
|
|
114
|
+
AssumeRolePolicyDocument:
|
|
115
|
+
Version: '2012-10-17'
|
|
116
|
+
Statement:
|
|
117
|
+
- Effect: Allow
|
|
118
|
+
Principal: { Service: ecs-tasks.amazonaws.com }
|
|
119
|
+
Action: sts:AssumeRole
|
|
120
|
+
Policies:
|
|
121
|
+
- PolicyName: @@db_secret_policy_name@@
|
|
122
|
+
PolicyDocument:
|
|
123
|
+
Version: '2012-10-17'
|
|
124
|
+
Statement:
|
|
125
|
+
- Effect: Allow
|
|
126
|
+
Action: secretsmanager:GetSecretValue
|
|
127
|
+
Resource: !Sub "${@@db_secret_ref@@}"
|
|
128
|
+
- PolicyName: SessionSecretRead
|
|
129
|
+
PolicyDocument:
|
|
130
|
+
Version: '2012-10-17'
|
|
131
|
+
Statement:
|
|
132
|
+
- Effect: Allow
|
|
133
|
+
Action: secretsmanager:GetSecretValue
|
|
134
|
+
Resource: !Ref @@session_secret_id@@
|
|
135
|
+
@@oauth_task_policy_marker@@
|
|
136
|
+
# TMPL:cross_domain_fargate_policies
|
|
137
|
+
# TMPL:extra_task_policies
|
|
138
|
+
|
|
139
|
+
@@task_definition_id@@:
|
|
140
|
+
Type: AWS::ECS::TaskDefinition
|
|
141
|
+
Properties:
|
|
142
|
+
Family: @@family_name@@
|
|
143
|
+
RequiresCompatibilities: [FARGATE]
|
|
144
|
+
NetworkMode: awsvpc
|
|
145
|
+
# ARM64, not Fargate's own x86_64 default — matching the
|
|
146
|
+
# generated Makefile's own aarch64-unknown-linux-gnu build
|
|
147
|
+
# (below) and Lambda's own arm64 toolchain this reuses; a
|
|
148
|
+
# container built for the wrong arch fails at task start,
|
|
149
|
+
# not at build time, so this has to agree with the image
|
|
150
|
+
# docker-build actually pushes.
|
|
151
|
+
RuntimePlatform:
|
|
152
|
+
CpuArchitecture: ARM64
|
|
153
|
+
OperatingSystemFamily: LINUX
|
|
154
|
+
Cpu: "@@cpu@@"
|
|
155
|
+
Memory: "@@memory@@"
|
|
156
|
+
ExecutionRoleArn: !GetAtt @@execution_role_id@@.Arn
|
|
157
|
+
TaskRoleArn: !GetAtt @@task_role_id@@.Arn
|
|
158
|
+
ContainerDefinitions:
|
|
159
|
+
- Name: @@container_name@@
|
|
160
|
+
Image: !Sub "${@@ecr_repository_id@@.RepositoryUri}:${@@tag_parameter@@}"
|
|
161
|
+
# TMPL:domain_essential
|
|
162
|
+
PortMappings:
|
|
163
|
+
- ContainerPort: @@port@@
|
|
164
|
+
LogConfiguration:
|
|
165
|
+
LogDriver: awslogs
|
|
166
|
+
Options:
|
|
167
|
+
awslogs-group: !Ref @@log_group_id@@
|
|
168
|
+
awslogs-region: !Ref AWS::Region
|
|
169
|
+
awslogs-stream-prefix: @@container_name@@
|
|
170
|
+
Environment:
|
|
171
|
+
- Name: HECKS_DOMAIN
|
|
172
|
+
Value: @@declared_domain_name@@
|
|
173
|
+
- Name: HECKS_ERA
|
|
174
|
+
Value: "1"
|
|
175
|
+
- Name: PORT
|
|
176
|
+
Value: "@@port@@"
|
|
177
|
+
# `rust/host/src/server.rs`'s own top-of-`main`
|
|
178
|
+
# switch — without it, this container runs as the
|
|
179
|
+
# Lambda custom-runtime process `Lambda`'s own
|
|
180
|
+
# generated binary always has, which blocks
|
|
181
|
+
# forever polling a Runtime API that doesn't exist
|
|
182
|
+
# here, never answering the health check or
|
|
183
|
+
# anything else on `port`.
|
|
184
|
+
- Name: HECKS_SERVE_MODE
|
|
185
|
+
Value: "1"
|
|
186
|
+
# `web "Rust"` vs `web "None"` is otherwise inert
|
|
187
|
+
# here today — both modes generate the identical
|
|
188
|
+
# task/service/target-group shape, since a Fargate
|
|
189
|
+
# task always answers HTTP on `port` for dispatch
|
|
190
|
+
# requests either way. Passed through so
|
|
191
|
+
# `rust/host`'s own server loop (server.rs) can
|
|
192
|
+
# read it and decide whether to also serve the
|
|
193
|
+
# public web UI in-process, the same `web`-shaped
|
|
194
|
+
# choice `Lambda`'s own `rust_web` already makes
|
|
195
|
+
# for the Lambda path.
|
|
196
|
+
- Name: HECKS_WEB
|
|
197
|
+
Value: @@web@@
|
|
198
|
+
# HECKS_WASM_PATH/HECKS_IR_PATH — main.rs requires
|
|
199
|
+
# both unconditionally at boot (ir::ir().ok_or(...)?,
|
|
200
|
+
# no fallback, and HECKS_WASM_PATH for every
|
|
201
|
+
# dispatch) regardless of `web`/HECKS_SERVE_MODE. A
|
|
202
|
+
# container built with neither set crashes before
|
|
203
|
+
# ever reaching its own serve loop — found live
|
|
204
|
+
# deploying a real domain container, fixed here so every Fargate domain ships
|
|
205
|
+
# both sidecars by default. Paths match the
|
|
206
|
+
# Dockerfile's own COPY destinations, below.
|
|
207
|
+
- Name: HECKS_WASM_PATH
|
|
208
|
+
Value: @@sidecar_dir@@/@@domain_name@@.wasm
|
|
209
|
+
- Name: HECKS_IR_PATH
|
|
210
|
+
Value: @@sidecar_dir@@/@@domain_name@@.ir.json
|
|
211
|
+
- Name: SESSION_SECRET_ARN
|
|
212
|
+
Value: !Ref @@session_secret_id@@
|
|
213
|
+
- Name: HECKS_CHECKOUT_DOMAIN
|
|
214
|
+
Value: @@declared_domain_name@@
|
|
215
|
+
@@oauth_task_env_marker@@
|
|
216
|
+
# TMPL:db_env
|
|
217
|
+
# TMPL:domain_env
|
|
218
|
+
# TMPL:extra_containers
|
|
219
|
+
|
|
220
|
+
@@target_group_id@@:
|
|
221
|
+
Type: AWS::ElasticLoadBalancingV2::TargetGroup
|
|
222
|
+
Properties:
|
|
223
|
+
TargetType: ip
|
|
224
|
+
Port: @@port@@
|
|
225
|
+
Protocol: HTTP
|
|
226
|
+
VpcId: @@vpc_ref@@
|
|
227
|
+
HealthCheckPath: @@health_path@@
|
|
228
|
+
HealthCheckPort: "@@port@@"
|
|
229
|
+
# TMPL:target_group_attributes
|
|
230
|
+
|
|
231
|
+
@@alb_id@@:
|
|
232
|
+
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
|
|
233
|
+
Properties:
|
|
234
|
+
Name: @@alb_name@@
|
|
235
|
+
Scheme: internet-facing
|
|
236
|
+
Type: application
|
|
237
|
+
SecurityGroups: [!Ref @@alb_sg_id@@]
|
|
238
|
+
Subnets: @@alb_subnets@@
|
|
239
|
+
|
|
240
|
+
@@listener_id@@:
|
|
241
|
+
Type: AWS::ElasticLoadBalancingV2::Listener
|
|
242
|
+
Properties:
|
|
243
|
+
LoadBalancerArn: !Ref @@alb_id@@
|
|
244
|
+
Port: 80
|
|
245
|
+
Protocol: HTTP
|
|
246
|
+
DefaultActions:
|
|
247
|
+
- Type: forward
|
|
248
|
+
TargetGroupArn: !Ref @@default_target_group_id@@
|
|
249
|
+
|
|
250
|
+
# TMPL:extra_target_groups
|
|
251
|
+
@@service_id@@:
|
|
252
|
+
Type: AWS::ECS::Service
|
|
253
|
+
DependsOn: @@depends_on@@
|
|
254
|
+
Properties:
|
|
255
|
+
ServiceName: @@service_name@@
|
|
256
|
+
Cluster: !Ref @@cluster_id@@
|
|
257
|
+
TaskDefinition: !Ref @@task_definition_id@@
|
|
258
|
+
DesiredCount: @@desired_count_value@@
|
|
259
|
+
LaunchType: FARGATE
|
|
260
|
+
# TMPL:service_tuning
|
|
261
|
+
NetworkConfiguration:
|
|
262
|
+
AwsvpcConfiguration:
|
|
263
|
+
AssignPublicIp: DISABLED
|
|
264
|
+
Subnets: @@service_subnets@@
|
|
265
|
+
SecurityGroups: [@@compute_security_group_ref@@]
|
|
266
|
+
LoadBalancers:
|
|
267
|
+
- ContainerName: @@container_name@@
|
|
268
|
+
ContainerPort: @@port@@
|
|
269
|
+
TargetGroupArn: !Ref @@target_group_id@@
|
|
270
|
+
# TMPL:extra_load_balancers
|
|
271
|
+
|
|
272
|
+
# TMPL:distribution
|
|
273
|
+
|
|
274
|
+
# TMPL:extra_resources
|
|
275
|
+
Outputs:
|
|
276
|
+
ServiceUrl:
|
|
277
|
+
Value: !Sub "http://${@@alb_id@@.DNSName}"
|
|
278
|
+
CloudFrontDomain:
|
|
279
|
+
Value: !GetAtt @@distribution_id@@.DomainName
|
|
280
|
+
@@output_lines@@
|
|
281
|
+
# TMPL:extra_outputs
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# GENERATED by hecks deploy project @@domain@@ — re-run it to refresh
|
|
2
|
+
# this file rather than hand-editing.
|
|
3
|
+
#
|
|
4
|
+
# `sam build` invokes the build-<LogicalId> target below (SAM's own
|
|
5
|
+
# BuildMethod: makefile convention — see template.yaml's Metadata).
|
|
6
|
+
# `cargo lambda` (https://www.cargo-lambda.info) cross-compiles
|
|
7
|
+
# rust/host for arm64 Lambda without Docker or a hand-configured
|
|
8
|
+
# cross-linker — install once with `pip3 install cargo-lambda` or
|
|
9
|
+
# `brew install cargo-lambda`.
|
|
10
|
+
|
|
11
|
+
HOST_DIR := @@host_dir@@
|
|
12
|
+
# `domain_name`, matching `hecks build_wasm`'s own target_mod_name
|
|
13
|
+
# (a Rust-build-pipeline naming convention, not AWS resource
|
|
14
|
+
# identity — see HECKS_WASM_PATH's own comment above).
|
|
15
|
+
WASM := @@wasm_path@@
|
|
16
|
+
|
|
17
|
+
build-@@logical_id@@:
|
|
18
|
+
@command -v cargo-lambda >/dev/null 2>&1 || { \
|
|
19
|
+
echo "cargo-lambda isn't installed. Install it once with: pip3 install cargo-lambda"; \
|
|
20
|
+
exit 1; \
|
|
21
|
+
}
|
|
22
|
+
# ALWAYS rebuilt, never `test -f $(WASM) || ...` — that guard only
|
|
23
|
+
# checked EXISTENCE, not staleness, so a wasm built once at the
|
|
24
|
+
# start of a work session silently kept getting deployed through
|
|
25
|
+
# every later kernel change (a real, live bug: this cost a stale
|
|
26
|
+
# deploy against a wasm that predated the kernel's own "mutations"
|
|
27
|
+
# field). `hecks build_wasm` recompiles fast enough that "always
|
|
28
|
+
# rebuild" is the safe default, matching rust/host's own bootstrap
|
|
29
|
+
# build just below, which was never guarded this way to begin with.
|
|
30
|
+
cd @@root@@ && HECKS_ENVIRONMENT=memory ruby exe/hecks build.build_wasm domain=@@domain@@ --wait
|
|
31
|
+
@rustup target list --installed 2>/dev/null | grep -qx aarch64-unknown-linux-gnu || rustup target add aarch64-unknown-linux-gnu
|
|
32
|
+
# `rustup run stable`, not a bare `cargo lambda` — same reasoning
|
|
33
|
+
# `hecks build_wasm`'s own Makefile-equivalent line holds itself to: a
|
|
34
|
+
# `cargo`/`rustc` earlier on PATH than rustup's own shims (Homebrew
|
|
35
|
+
# installs one; common on this kind of machine) is a DIFFERENT
|
|
36
|
+
# toolchain that never saw `rustup target add`, and fails with
|
|
37
|
+
# "can't find crate for `core`" for the cross target even though
|
|
38
|
+
# `rustup target list --installed` reports it present.
|
|
39
|
+
# macOS -> Linux arm64 cross-compiling by default routes through
|
|
40
|
+
# zig (cargo-lambda's own bundled cargo-zigbuild) — every zig
|
|
41
|
+
# release checked so far (0.15.2, 0.16.0) rejects
|
|
42
|
+
# `-Wl,--fix-cortex-a53-843419`, a flag rustc's own
|
|
43
|
+
# aarch64-unknown-linux-gnu target emits unconditionally: "error:
|
|
44
|
+
# unsupported linker arg: --fix-cortex-a53-843419", found live on
|
|
45
|
+
# THIS domain's own very first real deploy attempt (upstream:
|
|
46
|
+
# https://github.com/ziglang/zig/issues, no fix released yet as of
|
|
47
|
+
# this comment). Not fixable by a flag here — it's zig's own `zig
|
|
48
|
+
# cc` argument-translation layer refusing before rustc's link step
|
|
49
|
+
# ever runs. If this build fails with that error, cargo-lambda has
|
|
50
|
+
# a real, documented non-zig, non-Docker fallback: `-c cargo` (or
|
|
51
|
+
# `CARGO_LAMBDA_COMPILER=cargo`) plus a real GNU cross-toolchain —
|
|
52
|
+
# `brew tap messense/macos-cross-toolchains && brew install
|
|
53
|
+
# aarch64-unknown-linux-gnu` (this flag has worked in real
|
|
54
|
+
# binutils/LLD since 2018; only zig's own translation of it is the
|
|
55
|
+
# gap), then set `CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=
|
|
56
|
+
# aarch64-linux-gnu-gcc` with that toolchain's own bin/ on PATH.
|
|
57
|
+
# Confirmed working end to end (a real `sam deploy` against a real
|
|
58
|
+
# Lambda) the same day this comment was written.
|
|
59
|
+
cd $(HOST_DIR) && rustup run stable cargo lambda build --release --arm64
|
|
60
|
+
cp $(HOST_DIR)/target/lambda/bootstrap/bootstrap $(ARTIFACTS_DIR)/bootstrap
|
|
61
|
+
# UNCONDITIONAL, not gated on rust_web -- same reason HECKS_IR_PATH
|
|
62
|
+
# itself is unconditional above: main.rs's own boot sequence reads
|
|
63
|
+
# the IR for every domain regardless of web mode, so the sidecar
|
|
64
|
+
# file this env var points to has to actually be in the package
|
|
65
|
+
# too, or the env var alone just changes the crash from "not set"
|
|
66
|
+
# to "not found".
|
|
67
|
+
cp $(WASM) $(ARTIFACTS_DIR)/@@domain_name@@.wasm
|
|
68
|
+
cp @@ir_path@@ $(ARTIFACTS_DIR)/@@domain_name@@.ir.json
|
|
69
|
+
|
|
70
|
+
# `sam build <resource>` WIPES .aws-sam/build/ entirely before
|
|
71
|
+
# building just the one resource named -- confirmed live: building
|
|
72
|
+
# @@web_logical_id@@ second left NO @@logical_id@@/ directory behind at
|
|
73
|
+
# all, and reverted its OWN built CodeUri back to the raw, unbuilt
|
|
74
|
+
# source value ("../.." -- CodeUri: . resolved two directories up
|
|
75
|
+
# from .aws-sam/build/template.yaml). `sam deploy` then zips THAT
|
|
76
|
+
# directory verbatim as @@logical_id@@'s own code -- a real, live
|
|
77
|
+
# deploy shipped @@web_logical_id@@'s own source tree (Gemfile,
|
|
78
|
+
# lambda_handler.rb, even .env.local) as @@logical_id@@'s Lambda
|
|
79
|
+
# package this way, caught by downloading the actually-deployed
|
|
80
|
+
# code and finding @@web_logical_id@@'s file tree inside it.
|
|
81
|
+
# `deploy:`'s own two separate `sam build <resource>` calls can
|
|
82
|
+
# never both survive in .aws-sam/build/ at once — this target
|
|
83
|
+
# re-populates @@logical_id@@'s build directory from the SAME
|
|
84
|
+
# already-built bootstrap+wasm build-@@logical_id@@ just produced
|
|
85
|
+
# (untouched by the second sam build call — only .aws-sam/build/
|
|
86
|
+
# itself gets wiped, never $(HOST_DIR)/target or $(WASM)) and
|
|
87
|
+
# repoints the built template's CodeUri back at it.
|
|
88
|
+
.PHONY: restore-@@logical_id@@-build
|
|
89
|
+
restore-@@logical_id@@-build:
|
|
90
|
+
@mkdir -p .aws-sam/build/@@logical_id@@
|
|
91
|
+
cp $(HOST_DIR)/target/lambda/bootstrap/bootstrap .aws-sam/build/@@logical_id@@/bootstrap
|
|
92
|
+
cp $(WASM) .aws-sam/build/@@logical_id@@/@@domain_name@@.wasm
|
|
93
|
+
cp @@ir_path@@ .aws-sam/build/@@logical_id@@/@@domain_name@@.ir.json
|
|
94
|
+
ruby -e 'lines = File.readlines(".aws-sam/build/template.yaml"); start = lines.index { |l| l.strip == "@@logical_id@@:" } or raise "restore-@@logical_id@@-build: @@logical_id@@ resource not found in built template"; idx = (start+1...lines.length).find { |i| lines[i] =~ /CodeUri:/ } or raise "restore-@@logical_id@@-build: no CodeUri line found under @@logical_id@@"; lines[idx] = lines[idx].sub(/CodeUri:.*/, "CodeUri: @@logical_id@@"); File.write(".aws-sam/build/template.yaml", lines.join)'
|
|
95
|
+
|
|
96
|
+
# `make verify-parity-@@logical_id@@` — closes the exact gap the
|
|
97
|
+
# equivalence-gap plan's own Phase 8 named: parity was checked ONLY
|
|
98
|
+
# against CI's fixed test corpus, completely decoupled from what a
|
|
99
|
+
# real `sam deploy` actually ships — `hecks check_conformance` (the
|
|
100
|
+
# differential harness, docs/decisions/0010-ruby-is-the-reference-
|
|
101
|
+
# implementation.md) had never once been run against a specific
|
|
102
|
+
# compiled deploy artifact. Runs it here, for real, against
|
|
103
|
+
# $(WASM) -- the EXACT file `build-@@logical_id@@` (above) just built
|
|
104
|
+
# and `deploy:` (below) is about to ship -- not a corpus-wide `cargo
|
|
105
|
+
# build`'s own separate binary. `hecks check_conformance --wait` exits non-zero
|
|
106
|
+
# on any mismatch, which this target lets propagate uncaught: a real
|
|
107
|
+
# divergence between THIS artifact and Ruby's own reading of the
|
|
108
|
+
# identical source blocks `make deploy` before `sam deploy` ever
|
|
109
|
+
# runs, the same way a failing build already would.
|
|
110
|
+
#
|
|
111
|
+
# `spec/corpus/@@domain_name@@.json` is this domain's OWN pinned
|
|
112
|
+
# fuzzer-replay script (the same shape `hecks fuzz`/`hecks run` already
|
|
113
|
+
# use) -- if a domain doesn't have one yet, this warns LOUDLY and
|
|
114
|
+
# continues rather than either silently skipping (this project's own
|
|
115
|
+
# standing rule against a silent gap reading as full coverage) or
|
|
116
|
+
# blocking every deploy of a domain nobody has written one for yet.
|
|
117
|
+
#
|
|
118
|
+
# SECOND HALF, BELOW — `hecks fuzz_conformance`, ADR 0037's own fuzz
|
|
119
|
+
# bridge pointed at this exact $(WASM). A pinned script only proves
|
|
120
|
+
# "matches Ruby on the cases we thought to write down" (ADR 0039's own
|
|
121
|
+
# honest framing); the fuzz bridge is what actually FOUND Findings 1-6.
|
|
122
|
+
# Deliberately WARN-ONLY (`-@`, not `@`) for now: ADR 0037 already
|
|
123
|
+
# catalogues real, confirmed, not-yet-fixed divergences (Findings 3 and
|
|
124
|
+
# 5) that fire on ordinary generated sequences for more than one real
|
|
125
|
+
# domain today, so making this a hard blocker before those are closed
|
|
126
|
+
# would turn every affected domain's `make deploy` red for a reason
|
|
127
|
+
# this target can't yet point at a fix for. Flip `-@` to `@` once ADR
|
|
128
|
+
# 0037's open findings are closed and this stops firing in practice.
|
|
129
|
+
.PHONY: verify-parity-@@logical_id@@
|
|
130
|
+
verify-parity-@@logical_id@@:
|
|
131
|
+
@if [ -f @@root@@/spec/corpus/@@domain_name@@.json ]; then \
|
|
132
|
+
cd @@root@@ && HECKS_ENVIRONMENT=memory ruby exe/hecks build.check_conformance domain=@@domain@@ script=spec/corpus/@@domain_name@@.json artifact=$(WASM) --wait; \
|
|
133
|
+
else \
|
|
134
|
+
echo "verify-parity-@@logical_id@@: no spec/corpus/@@domain_name@@.json -- SKIPPING the pre-deploy Ruby/Rust parity check, nothing to compare $(WASM) against. Write one (hecks fuzz/hecks run's own script shape) before this domain's next deploy."; \
|
|
135
|
+
fi
|
|
136
|
+
@echo "verify-parity-@@logical_id@@: fuzzing $(WASM) against generated sequences (ADR 0037's bridge, WARN-ONLY -- see this target's own comment)..."
|
|
137
|
+
-@cd @@root@@ && HECKS_ENVIRONMENT=memory ruby exe/hecks build.fuzz_conformance domain=@@domain@@ artifact=$(WASM) --wait
|
|
138
|
+
|
|
139
|
+
# `make mint-era` — takes @@stack_name@@'s RDS instance from freshly
|
|
140
|
+
# created to "era 1 minted, ready for HECKS_DOMAIN/HECKS_ERA to
|
|
141
|
+
# resolve" (template.yaml's own env vars already assume era 1 —
|
|
142
|
+
# this is what makes that true). Run ONCE per fresh database, before
|
|
143
|
+
# the first real `sam deploy` of the Lambda itself; safe to re-run
|
|
144
|
+
# (a second boot against an already-held era 1 is a no-op — see
|
|
145
|
+
# era_resolver.rb's own quiet-reboot branch). Stands up bastion.yaml
|
|
146
|
+
# as its own sibling stack, uses it for one Ruby boot over an SSM
|
|
147
|
+
# tunnel, then deletes it — nothing from this target is left running
|
|
148
|
+
# afterward.
|
|
149
|
+
ROOT := @@root@@
|
|
150
|
+
DOMAIN := @@domain@@
|
|
151
|
+
STACK := @@stack_name@@
|
|
152
|
+
BASTION_STACK := @@stack_name@@-bastion
|
|
153
|
+
|
|
154
|
+
mint-era:
|
|
155
|
+
@@mint_era_recipe@@
|
|
156
|
+
|
|
157
|
+
# `make scaffold-translation` — run this when a deploy's own
|
|
158
|
+
# pre-flight boot check (or `make mint-era` directly) refuses with
|
|
159
|
+
# "the shape changed (era N) and no translation edge covers it".
|
|
160
|
+
# Diffs the held era against the current bluebook over the same
|
|
161
|
+
# bastion tunnel mint-era uses and WRITES a translations/*.bluebook
|
|
162
|
+
# edge file into this domain's own repo — confident rules inline,
|
|
163
|
+
# genuine ambiguities as `unresolved` lines a human has to resolve by
|
|
164
|
+
# hand (a rename, a drop, a compute — never guessed). Review the
|
|
165
|
+
# written file, then `make translation-audit`.
|
|
166
|
+
scaffold-translation:
|
|
167
|
+
@@scaffold_translation_recipe@@
|
|
168
|
+
|
|
169
|
+
# `make translation-audit` — verifies a written (or still-pending)
|
|
170
|
+
# translation edge over the same tunnel: every translated state
|
|
171
|
+
# against the new era's own types/invariants/lifecycle, the compiled
|
|
172
|
+
# SQL against the port's own reference transform, and a before/after
|
|
173
|
+
# sample of real records printed for human review. Re-run
|
|
174
|
+
# `make deploy` (or `make mint-era`) once this passes — that's what
|
|
175
|
+
# actually applies the edge; this only checks it.
|
|
176
|
+
translation-audit:
|
|
177
|
+
@@translation_audit_recipe@@
|
|
178
|
+
|
|
179
|
+
# `make migrate-console-settings` — runs this domain's own
|
|
180
|
+
# bin/migrate_console_settings (if it has one) over the same bastion
|
|
181
|
+
# tunnel every other Postgres-touching target here uses, against the
|
|
182
|
+
# real deployed database instead of local dev. A one-time data
|
|
183
|
+
# migration, not a repeatable ops procedure like mint-era/scaffold-
|
|
184
|
+
# translation — generated the same way regardless, per this
|
|
185
|
+
# project's own standing rule against hand-run ops steps.
|
|
186
|
+
migrate-console-settings:
|
|
187
|
+
@@migrate_console_settings_recipe@@
|
|
188
|
+
|
|
189
|
+
# `make rename-schema OLD=<old> NEW=<new>` — a native `ALTER SCHEMA
|
|
190
|
+
# ... RENAME TO ...` over the same bastion tunnel mint-era uses,
|
|
191
|
+
# for when this domain's own declared identity changes
|
|
192
|
+
# (`formerly_known_as`) and its storage schema should follow. Purely
|
|
193
|
+
# a Postgres namespace rename: every table/row/sequence inside it is
|
|
194
|
+
# untouched, so this is safe to run against a live, in-use database
|
|
195
|
+
# — the only requirement is that nothing else names the schema by
|
|
196
|
+
# its OLD name at the moment this runs (this domain's own deployed
|
|
197
|
+
# Lambda's HECKS_SCHEMA env var, most directly — run `make deploy`
|
|
198
|
+
# right before or right after this, not with a long gap either way).
|
|
199
|
+
rename-schema:
|
|
200
|
+
@@rename_schema_recipe@@
|
|
201
|
+
|
|
202
|
+
@@pg_native_section@@
|
|
203
|
+
@@sync_oauth_section@@
|
|
204
|
+
# `make deploy` — THE one command. Chains `sam build`, `sam deploy`
|
|
205
|
+
# (creates/updates the VPC+RDS+Lambda stack), then `mint-era` (safe
|
|
206
|
+
# to run every time — a second boot against an already-held era 1
|
|
207
|
+
# is a no-op, era_resolver.rb's own quiet-reboot branch) so a fresh
|
|
208
|
+
# database always ends this command with era 1 actually held, not a
|
|
209
|
+
# separate step someone has to remember. No hand-run AWS CLI
|
|
210
|
+
# sequence anywhere in this path.
|
|
211
|
+
@@oauth_note@@
|
|
212
|
+
@@shared_note@@
|
|
213
|
+
.PHONY: deploy mint-era
|
|
214
|
+
deploy:
|
|
215
|
+
@@build_recipe@@
|
|
216
|
+
@@predeploy_bridge@@
|
|
217
|
+
@@deploy_recipe_lines@@
|
|
218
|
+
$(MAKE) mint-era
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
# `{{resolve:secretsmanager:...}}` dynamic references do NOT
|
|
3
|
+
# create an implicit CloudFormation dependency on the referenced
|
|
4
|
+
# resource (documented AWS behavior) -- @@logical_id@@'s own
|
|
5
|
+
# Environment resolves one against @@db_id@@Secret below. A plain
|
|
6
|
+
# `DependsOn: @@db_id@@Secret` alone (CREATE_COMPLETE before this
|
|
7
|
+
# resource's own update starts) still hit a real, live, repeatable
|
|
8
|
+
# "Secrets Manager can't find the specified secret
|
|
9
|
+
# (ResourceNotFoundException)" -- CREATE_COMPLETE from
|
|
10
|
+
# CloudFormation's own perspective doesn't guarantee the secret is
|
|
11
|
+
# yet READABLE via a dynamic reference from a DIFFERENT resource's
|
|
12
|
+
# own concurrent update (AWS-side eventual consistency, not a
|
|
13
|
+
# CloudFormation ordering bug `DependsOn` alone can close).
|
|
14
|
+
# Chaining through @@db_id@@Cluster too -- which ALSO reads this
|
|
15
|
+
# secret, and whose own RDS-side update takes real, substantial
|
|
16
|
+
# wall-clock time to apply -- gives that propagation window time
|
|
17
|
+
# to close before @@logical_id@@'s own resolution is attempted.
|
|
18
|
+
DependsOn: [@@db_id@@Secret, @@db_id@@Cluster]
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# ONE build only -- dispatch "None" means there is no
|
|
2
|
+
# @@logical_id@@ of any kind (no cargo-lambda, no rust artifact, no
|
|
3
|
+
# verify-parity: nothing rust/host-shaped for this domain at all),
|
|
4
|
+
# so unlike every other WebFunction-carrying domain there is no
|
|
5
|
+
# second build to protect from `sam build <resource>`'s own
|
|
6
|
+
# WIPES-.aws-sam/build/-first behavior (build-@@logical_id@@'s own
|
|
7
|
+
# sibling comment on why that matters for domains that DO have one)
|
|
8
|
+
# and nothing to restore afterward.
|
|
9
|
+
sam build --use-container @@web_logical_id@@
|
|
10
|
+
$(MAKE) patch-pg-native
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# TWO SEPARATE builds, not one `--use-container` run -- that flag is
|
|
2
|
+
# global to `sam build`, but @@logical_id@@ deliberately builds on
|
|
3
|
+
# THIS machine's own toolchain (cargo-lambda already cross-compiles
|
|
4
|
+
# to arm64 without a container -- build-@@logical_id@@'s own comment
|
|
5
|
+
# on why), which a generic provided.al2023 container doesn't have
|
|
6
|
+
# at all (a real, live "Make Failed" caught this). Only @@web_logical_id@@
|
|
7
|
+
# needs the container, to cross-compile pg's native extension for
|
|
8
|
+
# Amazon Linux -- `sam build <resource>` WIPES .aws-sam/build/ before
|
|
9
|
+
# building just the one named, so @@logical_id@@'s own build gets
|
|
10
|
+
# restored below (restore-@@logical_id@@-build's own comment on why).
|
|
11
|
+
sam build @@logical_id@@
|
|
12
|
+
sam build --use-container @@web_logical_id@@
|
|
13
|
+
$(MAKE) restore-@@logical_id@@-build
|
|
14
|
+
$(MAKE) patch-pg-native
|
|
15
|
+
$(MAKE) verify-parity-@@logical_id@@
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# TWO SEPARATE builds -- @@web_logical_id@@ has no native extension to
|
|
2
|
+
# cross-compile (no `pg` in @@domain@@/Gemfile.lock), so a plain `sam
|
|
3
|
+
# build` targets it fine; @@logical_id@@ still gets its own `sam build
|
|
4
|
+
# <resource>` first, then restored below -- `sam build <resource>`
|
|
5
|
+
# WIPES .aws-sam/build/ before building just the one named, so the
|
|
6
|
+
# second call here would otherwise erase @@logical_id@@'s own build
|
|
7
|
+
# (restore-@@logical_id@@-build's own comment on why).
|
|
8
|
+
sam build @@logical_id@@
|
|
9
|
+
sam build @@web_logical_id@@
|
|
10
|
+
$(MAKE) restore-@@logical_id@@-build
|
|
11
|
+
$(MAKE) verify-parity-@@logical_id@@
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
@if [ -z "$$ALLOW_LOCAL_DB" ]; then \
|
|
2
|
+
echo "REFUSING: @@script@@ resolves its OWN database connection from @@domain@@'s .world file, NOT from DATABASE_URL/HECKS_SCHEMA -- opening a real tunnel to @@stack_name@@'s production RDS instance below would silently scaffold/audit the LOCAL dev database instead and report success (see this recipe's own comment, above, for the confirmed root cause). Set ALLOW_LOCAL_DB=1 to run @@verb@@ against @@domain@@'s local .world-declared database on purpose (e.g. to exercise the scaffold/audit logic itself); otherwise run this for real against production via the manual tunnel path mint-era's own comment describes."; \
|
|
3
|
+
exit 1; \
|
|
4
|
+
fi
|