hecks 4.0.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/examples/pizzas/bluebook/pizzas.bluebook +1 -0
- data/exe/hecks +15 -3
- data/lib/hecks/adapters/driven/claude_code.rb +1 -1
- data/lib/hecks/adapters/driven/d1.rb +2 -1
- data/lib/hecks/adapters/driven/folder.rb +35 -28
- data/lib/hecks/adapters/driven/folder_overlay.rb +51 -0
- data/lib/hecks/adapters/driven/google_authentication.adapter +3 -0
- data/lib/hecks/adapters/driven/google_authentication.rb +99 -0
- data/lib/hecks/adapters/driven/governance_authorization.rb +32 -36
- data/lib/hecks/adapters/driven/heki/journal.rb +45 -0
- data/lib/hecks/adapters/driven/identity_registry.rb +1 -1
- data/lib/hecks/adapters/driven/in_memory_ordering.rb +3 -2
- data/lib/hecks/adapters/driven/key_keeper.rb +42 -0
- data/lib/hecks/adapters/driven/lambda/client.rb +8 -2
- data/lib/hecks/adapters/driven/lambda/remote_dispatcher.rb +185 -0
- data/lib/hecks/adapters/driven/lambda.rb +14 -2
- data/lib/hecks/adapters/driven/memory/dispatch_claims.rb +25 -0
- data/lib/hecks/adapters/driven/memory.rb +15 -4
- data/lib/hecks/adapters/driven/postgres/codec.rb +1 -1
- data/lib/hecks/adapters/driven/postgres/journal.rb +46 -0
- data/lib/hecks/adapters/driven/postgres/outbox.rb +31 -5
- data/lib/hecks/adapters/driven/postgres/projection.rb +43 -0
- data/lib/hecks/adapters/driven/postgres/repository.rb +1 -1
- data/lib/hecks/adapters/driven/postgres/schema_builder.rb +2 -1
- data/lib/hecks/adapters/driven/postgres/set_dialect.rb +44 -0
- data/lib/hecks/adapters/driven/postgres.adapter +8 -0
- data/lib/hecks/adapters/driven/postgres.rb +8 -3
- data/lib/hecks/adapters/driven/postgres_dump/connection.rb +57 -0
- data/lib/hecks/adapters/driven/postgres_dump.rb +117 -0
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/boot.rb +6 -3
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/class_methods.rb +1 -1
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/dialect.rb +1 -1
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage/chain_sql.rb +8 -4
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage/domain_rename.rb +2 -2
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage/era_integrity.rb +2 -2
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage/era_store.rb +3 -3
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage/mint_transaction.rb +2 -2
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage/sql_templates.rb +6 -2
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage/tail_merge.rb +1 -1
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage.rb +1 -1
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage_manager/context.rb +15 -5
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage_manager/coverage_check.rb +13 -11
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage_manager/era_resolver.rb +23 -6
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage_manager/merge_coordinator.rb +2 -2
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage_manager/minter.rb +12 -9
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage_manager/refusals.rb +13 -1
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage_manager.rb +6 -6
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/query_phases.rb +8 -2
- data/lib/hecks/adapters/driven/postgres_era.adapter +7 -1
- data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era.rb +14 -13
- data/lib/hecks/adapters/driven/prism.rb +4 -3
- data/lib/hecks/adapters/driven/projection/read_model_walk.rb +126 -0
- data/lib/hecks/adapters/driven/projection/row_decoding.rb +57 -0
- data/lib/hecks/adapters/driven/set_transform/assignments.rb +101 -0
- data/lib/hecks/adapters/driven/set_transform/expressions.rb +138 -0
- data/lib/hecks/adapters/driven/set_transform.rb +81 -0
- data/lib/hecks/adapters/driven/sql_keyset.rb +61 -0
- data/lib/hecks/adapters/driven/sql_query_builder.rb +28 -9
- data/lib/hecks/adapters/driven/sqlite/codec.rb +1 -1
- data/lib/hecks/adapters/driven/sqlite/ddl.rb +7 -0
- data/lib/hecks/adapters/driven/sqlite/dialect.rb +2 -1
- data/lib/hecks/adapters/driven/sqlite/dispatch_claims.rb +28 -0
- data/lib/hecks/adapters/driven/sqlite/journal.rb +46 -0
- data/lib/hecks/adapters/driven/sqlite/outbox.rb +3 -2
- data/lib/hecks/adapters/driven/sqlite/projection.rb +9 -135
- data/lib/hecks/adapters/driven/sqlite/repository.rb +1 -1
- data/lib/hecks/adapters/driven/sqlite/schema_builder.rb +16 -4
- data/lib/hecks/adapters/driven/sqlite/set_dialect.rb +39 -0
- data/lib/hecks/adapters/driven/sqlite.adapter +2 -0
- data/lib/hecks/adapters/driven/sqlite.rb +11 -2
- data/lib/hecks/adapters/driven.rb +8 -3
- data/lib/hecks/adapters/driving/cli.rb +1 -1
- data/lib/hecks/adapters/driving/cli_runner/answers.rb +23 -16
- data/lib/hecks/adapters/driving/cli_runner/resolution.rb +25 -24
- data/lib/hecks/adapters/driving/cli_runner/settling.rb +9 -5
- data/lib/hecks/adapters/driving/cli_runner/streaming.rb +1 -1
- data/lib/hecks/adapters/driving/cli_runner/suggestions.rb +15 -7
- data/lib/hecks/adapters/driving/cli_runner/verb_names.rb +49 -0
- data/lib/hecks/adapters/driving/cli_runner.rb +4 -2
- data/lib/hecks/adapters/driving/github_webhook.rb +2 -1
- data/lib/hecks/adapters/driving/handle/verb_methods.rb +46 -0
- data/lib/hecks/adapters/driving/handle.rb +9 -17
- data/lib/hecks/adapters/driving/json.rb +19 -17
- data/lib/hecks/adapters/driving/launcher_options.rb +37 -32
- data/lib/hecks/adapters/driving/mcp_scope/env_problems.rb +3 -1
- data/lib/hecks/adapters/driving/mcp_scope.rb +8 -7
- data/lib/hecks/adapters/driving/newcomer.rb +6 -5
- data/lib/hecks/adapters/driving/ruby/aggregate_module.rb +13 -12
- data/lib/hecks/adapters/driving/ruby/bulk_verbs.rb +127 -0
- data/lib/hecks/adapters/driving/ruby/{chapter.rb → declaration.rb} +27 -27
- data/lib/hecks/adapters/driving/ruby/query_rows.rb +27 -0
- data/lib/hecks/adapters/driving/ruby.rb +25 -24
- data/lib/hecks/adapters/driving/usage_cache.rb +14 -3
- data/lib/hecks/assembly.rb +101 -0
- data/lib/hecks/behaviors/dsl.rb +13 -3
- data/lib/hecks/behaviors/expectations/boot.rb +7 -6
- data/lib/hecks/behaviors/expectations/checks.rb +1 -1
- data/lib/hecks/behaviors/expectations/dispatching.rb +10 -9
- data/lib/hecks/behaviors/expectations/qualify.rb +9 -9
- data/lib/hecks/behaviors/expectations.rb +24 -10
- data/lib/hecks/behaviors/ir.rb +4 -2
- data/lib/hecks/behaviors/rspec.rb +1 -1
- data/lib/hecks/behaviors/runner.rb +31 -4
- data/lib/hecks/bench/environment.rb +6 -2
- data/lib/hecks/bench/postgres_probe.rb +3 -1
- data/lib/hecks/bench/report.rb +4 -1
- data/lib/hecks/bench/suite.rb +9 -3
- data/lib/hecks/bluebook/acknowledgements.rb +81 -0
- data/lib/hecks/bluebook/aggregate.rb +13 -4
- data/lib/hecks/bluebook/ask_resolution.rb +17 -17
- data/lib/hecks/bluebook/assembly/aggregate_assembly.rb +8 -5
- data/lib/hecks/bluebook/assembly/contracts/structure.rb +11 -7
- data/lib/hecks/bluebook/assembly/marks.rb +10 -1
- data/lib/hecks/bluebook/assembly/scalars.rb +8 -2
- data/lib/hecks/bluebook/assembly/specializer.rb +2 -2
- data/lib/hecks/bluebook/assembly.rb +10 -10
- data/lib/hecks/bluebook/behaviour/aggregate.rb +2 -1
- data/lib/hecks/bluebook/behaviour/attribute.rb +12 -0
- data/lib/hecks/bluebook/behaviour/command.rb +1 -1
- data/lib/hecks/bluebook/behaviour/{chapter.rb → declaration.rb} +17 -17
- data/lib/hecks/bluebook/behaviour/domain_port.rb +1 -1
- data/lib/hecks/bluebook/behaviour/entity.rb +1 -0
- data/lib/hecks/bluebook/behaviour/hecksagon.rb +8 -1
- data/lib/hecks/bluebook/behaviour/process_manager.rb +4 -1
- data/lib/hecks/bluebook/behaviour/query.rb +5 -0
- data/lib/hecks/bluebook/behaviour/read_model.rb +4 -1
- data/lib/hecks/bluebook/behaviour/traits.rb +13 -0
- data/lib/hecks/bluebook/capabilities/attribute_values.rb +17 -16
- data/lib/hecks/bluebook/capabilities/package_declared.rb +65 -0
- data/lib/hecks/bluebook/capabilities.rb +32 -132
- data/lib/hecks/bluebook/command.rb +22 -7
- data/lib/hecks/bluebook/context_map.rb +104 -0
- data/lib/hecks/bluebook/{chapter.rb → declaration.rb} +13 -13
- data/lib/hecks/bluebook/dsl/adapter_builder.rb +28 -4
- data/lib/hecks/bluebook/dsl/aggregate_builder/draining.rb +2 -2
- data/lib/hecks/bluebook/dsl/aggregate_builder/one_of_reference.rb +54 -0
- data/lib/hecks/bluebook/dsl/aggregate_builder/query_field_sealing.rb +11 -2
- data/lib/hecks/bluebook/dsl/aggregate_builder/query_sealing.rb +15 -5
- data/lib/hecks/bluebook/dsl/aggregate_builder/relationships.rb +21 -3
- data/lib/hecks/bluebook/dsl/aggregate_builder/rules.rb +22 -22
- data/lib/hecks/bluebook/dsl/aggregate_builder/sealing.rb +2 -2
- data/lib/hecks/bluebook/dsl/aggregate_builder.rb +27 -22
- data/lib/hecks/bluebook/dsl/bluebook_builder/pending_givens.rb +22 -22
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/computed_sources.rb +27 -21
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/correlation_keys.rb +3 -5
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/event_shapes.rb +5 -4
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/fan_out_rows.rb +3 -3
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/hop_tails.rb +13 -5
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/projected_fields.rb +4 -4
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/provisions.rb +38 -84
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/query_hops.rb +5 -5
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/references.rb +6 -6
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/with_projections.rb +6 -6
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation.rb +3 -3
- data/lib/hecks/bluebook/dsl/bluebook_builder.rb +67 -67
- data/lib/hecks/bluebook/dsl/bootstrap_table.rb +2 -0
- data/lib/hecks/bluebook/dsl/command_builder/folded_sets.rb +48 -0
- data/lib/hecks/bluebook/dsl/command_builder.rb +28 -15
- data/lib/hecks/bluebook/dsl/context_map_builder.rb +73 -0
- data/lib/hecks/bluebook/dsl/entity_builder/rules.rb +17 -17
- data/lib/hecks/bluebook/dsl/entity_builder/scope.rb +3 -3
- data/lib/hecks/bluebook/dsl/entity_builder/sealing.rb +2 -2
- data/lib/hecks/bluebook/dsl/entity_builder.rb +3 -3
- data/lib/hecks/bluebook/dsl/hecksagon_builder/{chapter_scope.rb → bluebook_scope.rb} +14 -14
- data/lib/hecks/bluebook/dsl/hecksagon_builder.rb +33 -27
- data/lib/hecks/bluebook/dsl/identity_declaration.rb +6 -2
- data/lib/hecks/bluebook/dsl/lifecycle_builder.rb +4 -1
- data/lib/hecks/bluebook/dsl/query_builder.rb +14 -8
- data/lib/hecks/bluebook/dsl/read_model_builder/sealing.rb +6 -11
- data/lib/hecks/bluebook/dsl/read_model_builder.rb +1 -2
- data/lib/hecks/bluebook/dsl/word_gate.rb +2 -1
- data/lib/hecks/bluebook/dsl/world_builder.rb +2 -2
- data/lib/hecks/bluebook/dsl.rb +3 -2
- data/lib/hecks/bluebook/expression/ast_json/emitters.rb +4 -0
- data/lib/hecks/bluebook/expression/ast_json.rb +5 -3
- data/lib/hecks/bluebook/expression/ast_reader/blocks.rb +41 -0
- data/lib/hecks/bluebook/expression/ast_reader.rb +2 -10
- data/lib/hecks/bluebook/expression/canonical_form.rb +9 -4
- data/lib/hecks/bluebook/expression/evaluator/parser.rb +4 -1
- data/lib/hecks/bluebook/expression/evaluator.rb +13 -9
- data/lib/hecks/bluebook/expression/projection.json +6 -0
- data/lib/hecks/bluebook/expression/resolver/block_predicates.rb +50 -2
- data/lib/hecks/bluebook/expression/resolver/lookups.rb +2 -1
- data/lib/hecks/bluebook/expression/resolver/operations.rb +1 -0
- data/lib/hecks/bluebook/expression/resolver/parsing.rb +21 -15
- data/lib/hecks/bluebook/expression/resolver/scanning.rb +4 -1
- data/lib/hecks/bluebook/expression.rb +1 -1
- data/lib/hecks/bluebook/hecksagon.rb +48 -23
- data/lib/hecks/bluebook/meta_validator/adapter_judge.rb +4 -1
- data/lib/hecks/bluebook/meta_validator/judge/cells.rb +1 -1
- data/lib/hecks/bluebook/meta_validator/judge/identity.rb +2 -1
- data/lib/hecks/bluebook/meta_validator/modes.rb +27 -27
- data/lib/hecks/bluebook/meta_validator/plan.rb +5 -5
- data/lib/hecks/bluebook/meta_validator/readings/fields.rb +3 -3
- data/lib/hecks/bluebook/meta_validator/reconstruction/heads.rb +11 -3
- data/lib/hecks/bluebook/meta_validator/reconstruction/reading.rb +1 -1
- data/lib/hecks/bluebook/meta_validator/reconstruction.rb +19 -19
- data/lib/hecks/bluebook/meta_validator/shapes.rb +6 -1
- data/lib/hecks/bluebook/meta_validator/syntax_boot/disk_cache.rb +18 -15
- data/lib/hecks/bluebook/meta_validator/syntax_boot.rb +21 -15
- data/lib/hecks/bluebook/meta_validator/verdict_cache/prebuilt.rb +4 -1
- data/lib/hecks/bluebook/meta_validator/verdict_cache.rb +11 -10
- data/lib/hecks/bluebook/meta_validator.rb +25 -22
- data/lib/hecks/bluebook/model_check/aggregate_checks.rb +68 -0
- data/lib/hecks/bluebook/model_check/ask_checks.rb +6 -5
- data/lib/hecks/bluebook/model_check/client_profile.rb +8 -42
- data/lib/hecks/bluebook/model_check/context_checks.rb +97 -0
- data/lib/hecks/bluebook/model_check/context_map_checks.rb +158 -0
- data/lib/hecks/bluebook/model_check/lifecycle_checks.rb +27 -5
- data/lib/hecks/bluebook/model_check/one_of_checks.rb +106 -0
- data/lib/hecks/bluebook/model_check/orphan_checks.rb +129 -0
- data/lib/hecks/bluebook/model_check/redundant_relationships.rb +38 -0
- data/lib/hecks/bluebook/model_check/reference_checks.rb +11 -1
- data/lib/hecks/bluebook/model_check/saga_checks.rb +8 -3
- data/lib/hecks/bluebook/model_check/verbs.rb +4 -4
- data/lib/hecks/bluebook/model_check.rb +32 -12
- data/lib/hecks/bluebook/named_pattern.rb +12 -1
- data/lib/hecks/bluebook/one_of_union.rb +35 -0
- data/lib/hecks/bluebook/pattern_subset.rb +12 -3
- data/lib/hecks/bluebook/project_loader.rb +3 -2
- data/lib/hecks/bluebook/project_register.rb +21 -5
- data/lib/hecks/bluebook/query.rb +4 -1
- data/lib/hecks/bluebook/read_model.rb +5 -5
- data/lib/hecks/bluebook/reference.rb +3 -3
- data/lib/hecks/bluebook/smoke_test.rb +15 -13
- data/lib/hecks/bluebook/synthesizer.rb +48 -13
- data/lib/hecks/bluebook/translation_expression/parser.rb +14 -5
- data/lib/hecks/bluebook.rb +6 -3
- data/lib/hecks/bulk/bluebook/adapters/row_sweeper.adapter +7 -0
- data/lib/hecks/bulk/bluebook/bulk.behaviors +18 -0
- data/lib/hecks/bulk/bluebook/bulk.bluebook +126 -0
- data/lib/hecks/bulk/bluebook/bulk.hecksagon +11 -0
- data/lib/hecks/bulk/bluebook/bulk.ports.hecksagon +13 -0
- data/lib/hecks/bulk/plan.rb +60 -0
- data/lib/hecks/bulk/row_sweeper.rb +34 -0
- data/lib/hecks/bulk/set_arguments.rb +68 -0
- data/lib/hecks/bulk/set_eligibility.rb +50 -0
- data/lib/hecks/bulk/set_planner.rb +100 -0
- data/lib/hecks/bulk/set_sweep.rb +78 -0
- data/lib/hecks/bulk/sweep.rb +67 -0
- data/lib/hecks/cli/check_era.rb +6 -6
- data/lib/hecks/cli/command_table.rb +2 -2
- data/lib/hecks/cli/console.rb +11 -6
- data/lib/hecks/cli/document.rb +14 -9
- data/lib/hecks/cli/domain_writer.rb +4 -1
- data/lib/hecks/cli/expected_era.rb +139 -0
- data/lib/hecks/cli/expression_projection.rb +2 -2
- data/lib/hecks/cli/follow.rb +3 -3
- data/lib/hecks/cli/history.rb +4 -1
- data/lib/hecks/cli/interview_draft.rb +8 -1
- data/lib/hecks/cli/interview_record.rb +7 -3
- data/lib/hecks/cli/interview_run.rb +7 -5
- data/lib/hecks/cli/interview_session/proposals.rb +5 -2
- data/lib/hecks/cli/interview_session.rb +3 -2
- data/lib/hecks/cli/interview_shape/lifecycle.rb +92 -0
- data/lib/hecks/cli/interview_shape.rb +19 -73
- data/lib/hecks/cli/model_check/examination.rb +63 -14
- data/lib/hecks/cli/model_check/sources.rb +4 -2
- data/lib/hecks/cli/model_check.rb +1 -1
- data/lib/hecks/cli/persistence_notice.rb +45 -0
- data/lib/hecks/cli/present.rb +1 -1
- data/lib/hecks/cli/project_cli/launcher_source.rb +12 -10
- data/lib/hecks/cli/project_cli/templates.rb +24 -3
- data/lib/hecks/cli/project_cli.rb +11 -13
- data/lib/hecks/cli/project_diagrams.rb +20 -20
- data/lib/hecks/cli/project_glossary.rb +14 -14
- data/lib/hecks/cli/reference.rb +1 -1
- data/lib/hecks/cli/refresh_projections.rb +16 -11
- data/lib/hecks/cli/run.rb +27 -5
- data/lib/hecks/cli/seed_semantics_corpus.rb +14 -4
- data/lib/hecks/cli/shape.rb +3 -4
- data/lib/hecks/cli/smoke_http/transport.rb +3 -2
- data/lib/hecks/cli/statements.rb +7 -7
- data/lib/hecks/cli/stores.rb +70 -2
- data/lib/hecks/cli/stress_concurrency_specs/reporting.rb +4 -1
- data/lib/hecks/codemod.rb +3 -3
- data/lib/hecks/composer/adapters/claude_composer.rb +3 -2
- data/lib/hecks/composer/agent.rb +1 -1
- data/lib/hecks/composer/assistant.rb +2 -2
- data/lib/hecks/composer/behavior_run.rb +7 -1
- data/lib/hecks/composer/bluebook/composer.bluebook +18 -25
- data/lib/hecks/composer/bluebook/composer.hecksagon +1 -1
- data/lib/hecks/composer/board.rb +6 -6
- data/lib/hecks/composer/board_edit/command_text.rb +4 -1
- data/lib/hecks/composer/board_edit/source.rb +18 -9
- data/lib/hecks/composer/board_edit.rb +2 -2
- data/lib/hecks/composer/check.rb +22 -22
- data/lib/hecks/composer/domains.rb +1 -1
- data/lib/hecks/composer/live.rb +19 -13
- data/lib/hecks/composer/outline.rb +4 -1
- data/lib/hecks/composer/page.html +1 -1
- data/lib/hecks/composer/panels.rb +6 -3
- data/lib/hecks/composer/parse.rb +53 -36
- data/lib/hecks/composer/session.rb +22 -16
- data/lib/hecks/composer/toolbox.rb +9 -6
- data/lib/hecks/composer/web.rb +3 -2
- data/lib/hecks/composer/workbench.rb +12 -9
- data/lib/hecks/composer.rb +1 -1
- data/lib/hecks/construct.rb +7 -7
- data/lib/hecks/corpus/adapters.rb +2 -1
- data/lib/hecks/corpus/routes.rb +25 -5
- data/lib/hecks/corpus/rust.rb +59 -24
- data/lib/hecks/corpus/sources.rb +12 -11
- data/lib/hecks/corpus/worlds.rb +2 -1
- data/lib/hecks/corpus.rb +30 -22
- data/lib/hecks/deploy/bluebook/deploy.bluebook +304 -518
- data/lib/hecks/doc/reference/harvester.rb +4 -1
- data/lib/hecks/doc/reference/readme.rb +11 -6
- data/lib/hecks/doc/reference/rendering.rb +11 -5
- data/lib/hecks/doc/reference.rb +7 -5
- data/lib/hecks/embryonaut_bluebook/lock.rb +5 -1
- data/lib/hecks/embryonaut_bluebook/manifest.rb +7 -1
- data/lib/hecks/embryonaut_bluebook/registry/changelog.rb +4 -1
- data/lib/hecks/embryonaut_bluebook/registry/versions.rb +13 -2
- data/lib/hecks/embryonaut_bluebook/registry.rb +5 -2
- data/lib/hecks/embryonaut_bluebook/shape.rb +1 -1
- data/lib/hecks/embryonaut_bluebook/vendor.rb +5 -2
- data/lib/hecks/embryonaut_bluebook/vendor_cli.rb +15 -1
- data/lib/hecks/embryonaut_bluebook.rb +26 -12
- data/lib/hecks/engine_agreement.rb +4 -1
- data/lib/hecks/forms/app/commands.rb +35 -2
- data/lib/hecks/forms/app/records.rb +12 -12
- data/lib/hecks/forms/app/responses.rb +4 -2
- data/lib/hecks/forms/app.rb +22 -19
- data/lib/hecks/forms/command_form_renderer.rb +2 -2
- data/lib/hecks/forms/field_controls.rb +6 -1
- data/lib/hecks/forms/field_shape.rb +14 -6
- data/lib/hecks/forms/html.rb +8 -7
- data/lib/hecks/forms/html_pattern.rb +80 -0
- data/lib/hecks/forms/index_renderer.rb +11 -11
- data/lib/hecks/forms/params.rb +2 -1
- data/lib/hecks/forms/port_argument.rb +4 -1
- data/lib/hecks/forms/query_form_renderer.rb +1 -1
- data/lib/hecks/forms/record_renderer.rb +2 -2
- data/lib/hecks/forms/record_table.rb +1 -1
- data/lib/hecks/forms/reference_options.rb +2 -1
- data/lib/hecks/forms/text_shape.rb +4 -1
- data/lib/hecks/forms/value_object_shape.rb +1 -1
- data/lib/hecks/forms.rb +7 -7
- data/lib/hecks/fqn.rb +8 -2
- data/lib/hecks/framework/bluebook/change.bluebook +10 -15
- data/lib/hecks/framework/bluebook/change.hecksagon +1 -1
- data/lib/hecks/framework/bluebook/compliance.bluebook +27 -126
- data/lib/hecks/framework/bluebook/console_settings.bluebook +199 -114
- data/lib/hecks/framework/bluebook/framework.hecksagon +7 -0
- data/lib/hecks/framework/bluebook/governance.bluebook +36 -14
- data/lib/hecks/framework/bluebook/identity.bluebook +1 -1
- data/lib/hecks/framework/bluebook/privacy.bluebook +123 -19
- data/lib/hecks/framework/bluebook/privacy.key_keeper.adapter +7 -0
- data/lib/hecks/framework/bluebook/privacy.ports.hecksagon +19 -0
- data/lib/hecks/framework/compliance.oidc.json +6 -36
- data/lib/hecks/framework/console_settings.oidc.json +39 -24
- data/lib/hecks/framework/privacy.oidc.json +25 -0
- data/lib/hecks/framework.rb +24 -8
- data/lib/hecks/framework_bluebooks.rb +156 -0
- data/lib/hecks/freezer.rb +7 -1
- data/lib/hecks/fuzzing/combination_miner.rb +9 -6
- data/lib/hecks/fuzzing/concurrent_dispatch/world_copy.rb +3 -1
- data/lib/hecks/fuzzing/concurrent_dispatch.rb +2 -2
- data/lib/hecks/fuzzing/domain_generator.rb +8 -3
- data/lib/hecks/fuzzing/era_boundary.rb +1 -1
- data/lib/hecks/fuzzing/failure_triage.rb +13 -6
- data/lib/hecks/fuzzing/form_census/{chapter_forms.rb → bluebook_forms.rb} +12 -12
- data/lib/hecks/fuzzing/form_census.rb +14 -12
- data/lib/hecks/fuzzing/generated_domain_check.rb +2 -1
- data/lib/hecks/fuzzing/isolated_boot/postgres_scratch.rb +5 -5
- data/lib/hecks/fuzzing/isolated_boot/scratch_schema.rb +19 -9
- data/lib/hecks/fuzzing/isolated_boot/worlds.rb +13 -8
- data/lib/hecks/fuzzing/isolated_boot.rb +4 -5
- data/lib/hecks/fuzzing/mutation/checks.rb +2 -1
- data/lib/hecks/fuzzing/mutation/finders.rb +25 -8
- data/lib/hecks/fuzzing/mutation/observation.rb +3 -1
- data/lib/hecks/fuzzing/mutation/source_map.rb +3 -1
- data/lib/hecks/fuzzing/nondeterministic.rb +10 -4
- data/lib/hecks/fuzzing/outside_world.rb +1 -1
- data/lib/hecks/fuzzing/projection_agreement/binding.rb +63 -0
- data/lib/hecks/fuzzing/projection_agreement/comparison.rb +104 -0
- data/lib/hecks/fuzzing/projection_agreement.rb +68 -0
- data/lib/hecks/fuzzing/properties/aggregation_recompute.rb +1 -1
- data/lib/hecks/fuzzing/properties/bulk_parity.rb +118 -0
- data/lib/hecks/fuzzing/properties/catalog.rb +7 -0
- data/lib/hecks/fuzzing/properties/cursor_walks.rb +56 -0
- data/lib/hecks/fuzzing/properties/dispatch_and_mutations.rb +39 -1
- data/lib/hecks/fuzzing/properties/group_by_recompute.rb +6 -2
- data/lib/hecks/fuzzing/properties/grouped_reduction_recompute.rb +88 -0
- data/lib/hecks/fuzzing/properties/guards.rb +4 -1
- data/lib/hecks/fuzzing/properties/invariants_and_aggregation.rb +12 -2
- data/lib/hecks/fuzzing/properties/lifecycle_and_replay.rb +2 -1
- data/lib/hecks/fuzzing/properties/mutation_recompute.rb +3 -2
- data/lib/hecks/fuzzing/properties/piece_invariants.rb +3 -2
- data/lib/hecks/fuzzing/properties/query_rows.rb +5 -3
- data/lib/hecks/fuzzing/properties/querying.rb +6 -3
- data/lib/hecks/fuzzing/properties/read_model_names.rb +8 -2
- data/lib/hecks/fuzzing/properties/read_models.rb +2 -1
- data/lib/hecks/fuzzing/properties/refusals.rb +35 -0
- data/lib/hecks/fuzzing/properties/role_checks.rb +3 -2
- data/lib/hecks/fuzzing/properties/set_transform_parity.rb +73 -0
- data/lib/hecks/fuzzing/properties/tenant_scope.rb +3 -2
- data/lib/hecks/fuzzing/properties.rb +6 -0
- data/lib/hecks/fuzzing/qa_settings.rb +4 -4
- data/lib/hecks/fuzzing/replay/fan_out.rb +4 -3
- data/lib/hecks/fuzzing/replay/filters.rb +2 -2
- data/lib/hecks/fuzzing/replay/guard_check.rb +2 -2
- data/lib/hecks/fuzzing/replay/mutation_trace.rb +23 -10
- data/lib/hecks/fuzzing/replay/observation.rb +11 -7
- data/lib/hecks/fuzzing/replay/read_only_steps.rb +40 -3
- data/lib/hecks/fuzzing/replay/refusal_trace.rb +44 -0
- data/lib/hecks/fuzzing/replay/role_check.rb +2 -2
- data/lib/hecks/fuzzing/replay/session.rb +38 -18
- data/lib/hecks/fuzzing/replay/validation_reports.rb +61 -0
- data/lib/hecks/fuzzing/replay.rb +2 -2
- data/lib/hecks/fuzzing/rust_gap_manifest.rb +3 -3
- data/lib/hecks/fuzzing/self_consistency/saga_redelivery.rb +18 -8
- data/lib/hecks/fuzzing/self_consistency/sagas.rb +2 -2
- data/lib/hecks/fuzzing/self_consistency/value_objects.rb +9 -2
- data/lib/hecks/fuzzing/self_consistency.rb +4 -8
- data/lib/hecks/fuzzing/sequence_generator/adversary/argument_mutations.rb +15 -5
- data/lib/hecks/fuzzing/sequence_generator/adversary/caller_draw.rb +14 -10
- data/lib/hecks/fuzzing/sequence_generator/adversary/precedence_mutations.rb +1 -1
- data/lib/hecks/fuzzing/sequence_generator/argument_drawing.rb +2 -1
- data/lib/hecks/fuzzing/sequence_generator/catalog.rb +21 -13
- data/lib/hecks/fuzzing/sequence_generator/picker.rb +1 -1
- data/lib/hecks/fuzzing/sequence_generator/query_binding.rb +3 -3
- data/lib/hecks/fuzzing/sequence_generator/step_builder.rb +2 -2
- data/lib/hecks/fuzzing/sequence_generator.rb +1 -2
- data/lib/hecks/fuzzing/shrinker.rb +4 -1
- data/lib/hecks/fuzzing/value_generator.rb +14 -8
- data/lib/hecks/fuzzing.rb +1 -0
- data/lib/hecks/grammar/dialects.rb +56 -0
- data/lib/hecks/grammar/evolve/arguments.rb +1 -1
- data/lib/hecks/grammar/evolve/keywords.rb +1 -1
- data/lib/hecks/grammar/evolve/seeds.rb +34 -8
- data/lib/hecks/grammar/expression.bluebook +3 -0
- data/lib/hecks/grammar/expression_operators.json +1071 -1
- data/lib/hecks/grammar/operators.rb +45 -22
- data/lib/hecks/grammar/translation.bluebook +2 -0
- data/lib/hecks/grammar/translation_ledger.rb +45 -0
- data/lib/hecks/grammar/translation_rules.json +646 -0
- data/lib/hecks/grammar.rb +27 -23
- data/lib/hecks/hecks/adapters/claude_agents.adapter +7 -0
- data/lib/hecks/hecks/adapters/claude_agents.rb +119 -0
- data/lib/hecks/hecks/adapters/claude_transcript.rb +71 -0
- data/lib/hecks/hecks/adapters/codebase/cache_clearing.rb +32 -0
- data/lib/hecks/hecks/adapters/codebase/cargo_tests.rb +50 -0
- data/lib/hecks/hecks/adapters/codebase/composing.rb +3 -2
- data/lib/hecks/hecks/adapters/codebase/conformance.rb +17 -1
- data/lib/hecks/hecks/adapters/codebase/corpus_tasks.rb +1 -1
- data/lib/hecks/hecks/adapters/codebase/declarations.rb +144 -0
- data/lib/hecks/hecks/adapters/codebase/inspection.rb +5 -4
- data/lib/hecks/hecks/adapters/codebase/language.rb +1 -0
- data/lib/hecks/hecks/adapters/codebase/npm_registry.rb +7 -1
- data/lib/hecks/hecks/adapters/codebase/previewing.rb +62 -0
- data/lib/hecks/hecks/adapters/codebase/promotion/gate.rb +1 -1
- data/lib/hecks/hecks/adapters/codebase/reading.rb +94 -0
- data/lib/hecks/hecks/adapters/codebase/regeneration.rb +6 -2
- data/lib/hecks/hecks/adapters/codebase/release_facts.rb +1 -1
- data/lib/hecks/hecks/adapters/codebase/ruby_child.rb +5 -2
- data/lib/hecks/hecks/adapters/codebase/search.rb +91 -0
- data/lib/hecks/hecks/adapters/codebase/source_tree.rb +37 -2
- data/lib/hecks/hecks/adapters/codebase/static_directory.rb +59 -0
- data/lib/hecks/hecks/adapters/codebase/style.rb +2 -2
- data/lib/hecks/hecks/adapters/codebase/test_runner.rb +30 -11
- data/lib/hecks/hecks/adapters/codebase/test_suite.rb +41 -3
- data/lib/hecks/hecks/adapters/console_capture.rb +27 -0
- data/lib/hecks/hecks/adapters/deploy_plans.rb +12 -3
- data/lib/hecks/hecks/adapters/deploy_toolchain/answers.rb +14 -5
- data/lib/hecks/hecks/adapters/deploy_toolchain/scripts.rb +6 -3
- data/lib/hecks/hecks/adapters/deploy_toolchain.rb +3 -3
- data/lib/hecks/hecks/adapters/desktop_alert/alert.rb +50 -0
- data/lib/hecks/hecks/adapters/desktop_alert.adapter +7 -0
- data/lib/hecks/hecks/adapters/desktop_alert.rb +99 -0
- data/lib/hecks/hecks/adapters/finding_github.rb +4 -1
- data/lib/hecks/hecks/adapters/first_admin.rb +19 -12
- data/lib/hecks/hecks/adapters/git.rb +5 -5
- data/lib/hecks/hecks/adapters/git_checkout.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_checkout.rb +99 -0
- data/lib/hecks/hecks/adapters/git_landing/merger.rb +85 -0
- data/lib/hecks/hecks/adapters/git_landing.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_landing.rb +103 -0
- data/lib/hecks/hecks/adapters/git_launcher.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_launcher.rb +82 -0
- data/lib/hecks/hecks/adapters/git_refs.rb +8 -4
- data/lib/hecks/hecks/adapters/git_train/bench.rb +76 -0
- data/lib/hecks/hecks/adapters/git_train/carriage.rb +116 -0
- data/lib/hecks/hecks/adapters/git_train/local_branch.rb +69 -0
- data/lib/hecks/hecks/adapters/git_train/reading.rb +26 -0
- data/lib/hecks/hecks/adapters/git_train/survey.rb +60 -0
- data/lib/hecks/hecks/adapters/git_train.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_train.rb +88 -0
- data/lib/hecks/hecks/adapters/git_worktrees.rb +81 -0
- data/lib/hecks/hecks/adapters/host_http.rb +5 -4
- data/lib/hecks/hecks/adapters/in_process_access.rb +3 -2
- data/lib/hecks/hecks/adapters/in_process_boot.rb +62 -35
- data/lib/hecks/hecks/adapters/in_process_operations.rb +30 -4
- data/lib/hecks/hecks/adapters/journal_store/changes.rb +7 -7
- data/lib/hecks/hecks/adapters/journal_store/compaction.rb +14 -7
- data/lib/hecks/hecks/adapters/journal_store/edge_audit.rb +9 -7
- data/lib/hecks/hecks/adapters/journal_store/examination.rb +3 -3
- data/lib/hecks/hecks/adapters/journal_store/held_domain.rb +17 -5
- data/lib/hecks/hecks/adapters/journal_store/readings/attestation.rb +3 -3
- data/lib/hecks/hecks/adapters/journal_store/readings/scaffolding.rb +7 -4
- data/lib/hecks/hecks/adapters/journal_store/readings.rb +2 -2
- data/lib/hecks/hecks/adapters/journal_store.rb +2 -2
- data/lib/hecks/hecks/adapters/ledger/chain.rb +63 -0
- data/lib/hecks/hecks/adapters/ledger/journal.rb +105 -0
- data/lib/hecks/hecks/adapters/ledger.adapter +7 -0
- data/lib/hecks/hecks/adapters/ledger.rb +89 -0
- data/lib/hecks/hecks/adapters/local_files.rb +15 -1
- data/lib/hecks/hecks/adapters/pg_admin.rb +7 -1
- data/lib/hecks/hecks/adapters/rails_app_files.rb +64 -0
- data/lib/hecks/hecks/adapters/rehearsal/audit_report.rb +4 -1
- data/lib/hecks/hecks/adapters/rehearsal/inquiry.rb +9 -9
- data/lib/hecks/hecks/adapters/rehearsal/memory_store.rb +2 -2
- data/lib/hecks/hecks/adapters/rehearsal/postgres_census.rb +4 -4
- data/lib/hecks/hecks/adapters/rehearsal/postgres_reading.rb +3 -3
- data/lib/hecks/hecks/adapters/rehearsal/postgres_store.rb +4 -1
- data/lib/hecks/hecks/adapters/rehearsal/rust_audit.rb +1 -1
- data/lib/hecks/hecks/adapters/rehearsal/subject.rb +34 -5
- data/lib/hecks/hecks/adapters/rust_toolchain.rb +5 -3
- data/lib/hecks/hecks/adapters/settings_reading.adapter +7 -0
- data/lib/hecks/hecks/adapters/settings_reading.rb +142 -0
- data/lib/hecks/hecks/adapters/shell.rb +3 -0
- data/lib/hecks/hecks/adapters/site_toolchain.rb +8 -8
- data/lib/hecks/hecks/adapters/world_clearing.rb +2 -1
- data/lib/hecks/hecks/agents.bluebook +246 -0
- data/lib/hecks/hecks/codebase.behaviors +13 -1
- data/lib/hecks/hecks/codebase.bluebook +554 -586
- data/lib/hecks/hecks/composer.behaviors +10 -10
- data/lib/hecks/hecks/context_map.hecksagon +7 -6
- data/lib/hecks/hecks/custodian.behaviors +96 -1
- data/lib/hecks/hecks/custodian.bluebook +553 -157
- data/lib/hecks/hecks/deploy.behaviors +1 -1
- data/lib/hecks/hecks/deploy.world +3 -4
- data/lib/hecks/hecks/hecks.behaviors +2 -2
- data/lib/hecks/hecks/hecks.bluebook +9 -14
- data/lib/hecks/hecks/hecks.contextmap +25 -0
- data/lib/hecks/hecks/hecks.hecksagon +139 -6
- data/lib/hecks/hecks/hecks.world +22 -21
- data/lib/hecks/hecks/ledger.bluebook +190 -0
- data/lib/hecks/hecks/rehearsal.bluebook +43 -77
- data/lib/hecks/hecks/shapes.json +17 -0
- data/lib/hecks/hecks/site.behaviors +1 -1
- data/lib/hecks/hecks/site.world +3 -3
- data/lib/hecks/hecks/tooling.bluebook +170 -174
- data/lib/hecks/hecks/translations/2-148748.bluebook +2 -0
- data/lib/hecks/hecks/translations/2-15a2e4.bluebook +2 -0
- data/lib/hecks/hecks/translations/2-1b447c.bluebook +5 -0
- data/lib/hecks/hecks/translations/2-240474.bluebook +2 -0
- data/lib/hecks/hecks/translations/2-44446d.bluebook +2 -0
- data/lib/hecks/hecks/translations/2-46ca26.bluebook +2 -0
- data/lib/hecks/hecks/translations/2-473eab.bluebook +2 -0
- data/lib/hecks/hecks/translations/2-75cc28.bluebook +2 -0
- data/lib/hecks/hecks/translations/2-781c07.bluebook +2 -0
- data/lib/hecks/hecks/translations/2-84c18b.bluebook +2 -0
- data/lib/hecks/hecks/translations/2-aa5fff.bluebook +2 -0
- data/lib/hecks/hecks/translations/2-bfdb48.bluebook +2 -0
- data/lib/hecks/hecks/translations/2-cd96d8.bluebook +10 -0
- data/lib/hecks/hecks/translations/2-d43f71.bluebook +2 -0
- data/lib/hecks/hecks/translations/2-eea577.bluebook +2 -0
- data/lib/hecks/hecks/translations/2-f53248.bluebook +2 -0
- data/lib/hecks/hecks/translations/2-fbb677.bluebook +2 -0
- data/lib/hecks/hecks/translations/2-ffdf12.bluebook +6 -0
- data/lib/hecks/ir.rb +8 -1
- data/lib/hecks/kernel_capabilities/templates.rb +4 -3
- data/lib/hecks/kernel_capabilities.rb +6 -6
- data/lib/hecks/language/adapter.bluebook +61 -0
- data/lib/hecks/language/bluebook/aggregate.bluebook +36 -6
- data/lib/hecks/language/bluebook/attaches/paging.bluebook +1 -1
- data/lib/hecks/language/bluebook/bluebook.behaviors +6 -6
- data/lib/hecks/language/bluebook/bluebook.bluebook +28 -51
- data/lib/hecks/language/bluebook/bluebook.hecksagon +1 -1
- data/lib/hecks/language/bluebook/command.bluebook +34 -2
- data/lib/hecks/language/bluebook/entity.bluebook +2 -2
- data/lib/hecks/language/bluebook/policy.behaviors +2 -2
- data/lib/hecks/language/bluebook/policy.bluebook +3 -3
- data/lib/hecks/language/bluebook/process_manager.bluebook +3 -3
- data/lib/hecks/language/bluebook/projection.bluebook +11 -10
- data/lib/hecks/language/bluebook/query.bluebook +1 -0
- data/lib/hecks/language/bluebook/shape.bluebook +1 -1
- data/lib/hecks/language/bluebook/syntax.bluebook +3 -1
- data/lib/hecks/language/bluebook/vocabulary.bluebook +287 -6
- data/lib/hecks/language/context_map/context_map.bluebook +90 -0
- data/lib/hecks/language/hecksagon/domain_port.bluebook +2 -2
- data/lib/hecks/language/hecksagon/hecksagon.bluebook +8 -8
- data/lib/hecks/language/oidc.json +10 -0
- data/lib/hecks/language/port.bluebook +1 -1
- data/lib/hecks/language/sentence/sentence.bluebook +210 -0
- data/lib/hecks/language/world/world.bluebook +6 -6
- data/lib/hecks/literal.rb +8 -2
- data/lib/hecks/naming.rb +44 -14
- data/lib/hecks/persistence_legacy_fixture/postgres_stores.rb +7 -6
- data/lib/hecks/persistence_legacy_fixture/regenerate.rb +6 -2
- data/lib/hecks/ports/access_control.rb +2 -2
- data/lib/hecks/ports/agent/answers.rb +2 -2
- data/lib/hecks/ports/agent.rb +2 -2
- data/lib/hecks/ports/authentication.port +6 -0
- data/lib/hecks/ports/authentication.rb +67 -0
- data/lib/hecks/ports/authorization.rb +3 -3
- data/lib/hecks/ports/dispatch.port +5 -0
- data/lib/hecks/ports/dispatch.rb +28 -0
- data/lib/hecks/ports/key_vault.rb +9 -6
- data/lib/hecks/ports/loading.rb +23 -7
- data/lib/hecks/ports/persistence/append_only.rb +18 -1
- data/lib/hecks/ports/persistence/binding_policy.rb +70 -11
- data/lib/hecks/ports/persistence/codec_boundary.rb +3 -2
- data/lib/hecks/ports/persistence/plugins/era/era_check.rb +10 -10
- data/lib/hecks/ports/persistence/plugins/era/era_guard/shape_diff.rb +4 -5
- data/lib/hecks/ports/persistence/plugins/era/era_guard.rb +11 -11
- data/lib/hecks/ports/persistence/plugins/era/era_tamper.rb +1 -1
- data/lib/hecks/ports/persistence/plugins/era/storage_shape.rb +6 -6
- data/lib/hecks/ports/persistence/plugins/era/translation/audit.rb +9 -3
- data/lib/hecks/ports/persistence/plugins/era/translation/reattest.rb +1 -1
- data/lib/hecks/ports/persistence/plugins/era/translation/rule_compiler.rb +32 -19
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/differ.rb +2 -2
- data/lib/hecks/ports/persistence/plugins/era.rb +0 -1
- data/lib/hecks/ports/persistence/remote_runtime.rb +3 -2
- data/lib/hecks/ports/persistence/set_statement.rb +29 -0
- data/lib/hecks/ports/persistence/set_transforming.rb +30 -0
- data/lib/hecks/ports/persistence/state_codec.rb +3 -3
- data/lib/hecks/ports/persistence.rb +0 -4
- data/lib/hecks/ports/projection.rb +4 -1
- data/lib/hecks/ports/query/cursor.rb +131 -0
- data/lib/hecks/ports/query/in_memory.rb +17 -10
- data/lib/hecks/ports/query.rb +4 -2
- data/lib/hecks/ports.rb +1 -0
- data/lib/hecks/projection_files/expression_tables.rb +3 -3
- data/lib/hecks/projection_files/sentence_table.rb +17 -0
- data/lib/hecks/projection_files.rb +16 -13
- data/lib/hecks/projections/bootstrap_table.rb +3 -3
- data/lib/hecks/projections/command_schema/shape.rb +95 -0
- data/lib/hecks/projections/command_schema.rb +74 -0
- data/lib/hecks/projections/context_map_diagram.rb +135 -0
- data/lib/hecks/projections/context_relationships.rb +125 -0
- data/lib/hecks/projections/deploy/box/access.rb +7 -4
- data/lib/hecks/projections/deploy/box/caddy.rb +2 -1
- data/lib/hecks/projections/deploy/box/compose.rb +4 -8
- data/lib/hecks/projections/deploy/box/edge.rb +2 -1
- data/lib/hecks/projections/deploy/box/hosting.rb +4 -2
- data/lib/hecks/projections/deploy/box/hosting_parts.rb +27 -12
- data/lib/hecks/projections/deploy/box/logging.rb +2 -3
- data/lib/hecks/projections/deploy/box/roll_recipe.rb +1 -3
- data/lib/hecks/projections/deploy/box/roll_scripts.rb +1 -16
- data/lib/hecks/projections/deploy/box/settings/containers.rb +29 -15
- data/lib/hecks/projections/deploy/box/settings/patterns.rb +5 -6
- data/lib/hecks/projections/deploy/box/settings/types.rb +5 -10
- data/lib/hecks/projections/deploy/box/settings.rb +9 -8
- data/lib/hecks/projections/deploy/box/stack_yaml.rb +10 -14
- data/lib/hecks/projections/deploy/box/templates/box.yaml.tmpl +0 -1
- data/lib/hecks/projections/deploy/box/templates/deploy-service.sh.tmpl +16 -3
- data/lib/hecks/projections/deploy/box/templates/hosting.mk.tmpl +7 -6
- data/lib/hecks/projections/deploy/box/templates/render-compose-taskdef.sh.tmpl +2 -6
- data/lib/hecks/projections/deploy/box/templates/render-compose.sh.tmpl +2 -6
- data/lib/hecks/projections/deploy/box.rb +16 -9
- data/lib/hecks/projections/deploy/fargate/assembly.rb +7 -2
- data/lib/hecks/projections/deploy/fargate/cdn/options.rb +4 -1
- data/lib/hecks/projections/deploy/fargate/check.rb +3 -1
- data/lib/hecks/projections/deploy/fargate/containers/rendering.rb +8 -5
- data/lib/hecks/projections/deploy/fargate/containers/routing.rb +2 -1
- data/lib/hecks/projections/deploy/fargate/monitoring/reading.rb +4 -1
- data/lib/hecks/projections/deploy/fargate/sections.rb +7 -4
- data/lib/hecks/projections/deploy/fargate/settings/ids.rb +4 -1
- data/lib/hecks/projections/deploy/fargate/settings/tuning.rb +13 -4
- data/lib/hecks/projections/deploy/fargate/stack/blocks.rb +6 -1
- data/lib/hecks/projections/deploy/fargate/stack/readers.rb +2 -1
- data/lib/hecks/projections/deploy/fargate/stack.rb +11 -6
- data/lib/hecks/projections/deploy/fargate/yaml.rb +10 -3
- data/lib/hecks/projections/deploy/fargate.rb +8 -3
- data/lib/hecks/projections/deploy/lambda/stack/blocks.rb +4 -2
- data/lib/hecks/projections/deploy/lambda/stack/deploy_chain.rb +2 -1
- data/lib/hecks/projections/deploy/lambda/stack/reading.rb +12 -9
- data/lib/hecks/projections/deploy/lambda/stack/reading_web.rb +7 -2
- data/lib/hecks/projections/deploy/lambda/stack/web.rb +2 -1
- data/lib/hecks/projections/deploy/lambda.rb +8 -3
- data/lib/hecks/projections/deploy/preview/containers.rb +14 -1
- data/lib/hecks/projections/deploy/preview/preview.sh.erb +2 -2
- data/lib/hecks/projections/deploy/preview/routing_yaml.rb +8 -6
- data/lib/hecks/projections/deploy/preview/settings.rb +23 -5
- data/lib/hecks/projections/deploy/preview/task_yaml.rb +1 -1
- data/lib/hecks/projections/deploy/preview/yaml_text.rb +2 -1
- data/lib/hecks/projections/deploy/scripts/settings.rb +5 -2
- data/lib/hecks/projections/deploy/shared.rb +12 -1
- data/lib/hecks/projections/deploy/shared_database_instance.rb +1 -1
- data/lib/hecks/projections/deploy/smoke.rb +3 -1
- data/lib/hecks/projections/deploy/template_diff/normalizer.rb +4 -1
- data/lib/hecks/projections/deploy/templates/lambda/mint_era_shared.tmpl +2 -2
- data/lib/hecks/projections/deploy/templates/lambda/nat_comment_oauth.tmpl +1 -1
- data/lib/hecks/projections/deploy/vercel.rb +1 -1
- data/lib/hecks/projections/diagrams/dispatch.rb +5 -3
- data/lib/hecks/projections/diagrams/statecharts.rb +8 -3
- data/lib/hecks/projections/diagrams/structure.rb +9 -6
- data/lib/hecks/projections/diagrams.rb +9 -7
- data/lib/hecks/projections/glossary/entries.rb +4 -4
- data/lib/hecks/projections/glossary/html/page.rb +4 -1
- data/lib/hecks/projections/glossary/html/parser.rb +13 -4
- data/lib/hecks/projections/glossary/html/sections.rb +4 -1
- data/lib/hecks/projections/glossary/html.rb +10 -3
- data/lib/hecks/projections/glossary/markdown.rb +4 -3
- data/lib/hecks/projections/glossary/mermaid.rb +8 -5
- data/lib/hecks/projections/glossary/sections.rb +1 -1
- data/lib/hecks/projections/glossary/sensitivity.rb +11 -4
- data/lib/hecks/projections/glossary/sentences/actions.rb +5 -2
- data/lib/hecks/projections/glossary/sentences/queries.rb +2 -1
- data/lib/hecks/projections/glossary/sentences/value_objects.rb +15 -6
- data/lib/hecks/projections/glossary/sentences.rb +6 -3
- data/lib/hecks/projections/glossary/slugs.rb +8 -1
- data/lib/hecks/projections/glossary.rb +3 -3
- data/lib/hecks/projections/model.rb +10 -6
- data/lib/hecks/projections/oidc.rb +19 -7
- data/lib/hecks/projections/parser_table.rb +10 -10
- data/lib/hecks/projections/phrase_table.rb +105 -0
- data/lib/hecks/projections/plain_english.rb +14 -4
- data/lib/hecks/projections/rails_app.rb +77 -0
- data/lib/hecks/projections/reference.rb +2 -2
- data/lib/hecks/projections/rust_vocabulary/arguments.rb +1 -1
- data/lib/hecks/projections/rust_vocabulary/tables.rb +20 -0
- data/lib/hecks/projections/rust_vocabulary.rb +14 -17
- data/lib/hecks/projections/site/admin.rb +7 -7
- data/lib/hecks/projections/site/admin_cms.rb +1 -1
- data/lib/hecks/projections/site/cms_editor/blocks.rb +5 -2
- data/lib/hecks/projections/site/cms_editor/checks.rb +9 -6
- data/lib/hecks/projections/site/cms_editor/color.rb +4 -1
- data/lib/hecks/projections/site/cms_editor/composition.rb +20 -18
- data/lib/hecks/projections/site/cms_editor/destructive.rb +4 -1
- data/lib/hecks/projections/site/cms_editor/drafts.rb +6 -2
- data/lib/hecks/projections/site/cms_editor/key_kinds.rb +4 -1
- data/lib/hecks/projections/site/cms_editor/limits.rb +1 -1
- data/lib/hecks/projections/site/cms_editor/media.rb +1 -1
- data/lib/hecks/projections/site/cms_editor/moment.rb +3 -1
- data/lib/hecks/projections/site/cms_editor/pickers.rb +1 -1
- data/lib/hecks/projections/site/cms_editor/preview.rb +10 -4
- data/lib/hecks/projections/site/cms_editor/relations.rb +3 -2
- data/lib/hecks/projections/site/cms_editor/scale_checks.rb +32 -25
- data/lib/hecks/projections/site/cms_editor/scheduling.rb +1 -1
- data/lib/hecks/projections/site/cms_editor/schema.rb +31 -29
- data/lib/hecks/projections/site/cms_editor/setting.rb +34 -27
- data/lib/hecks/projections/site/cms_editor/targets.rb +9 -6
- data/lib/hecks/projections/site/cms_editor/templates/src/app.ts.tmpl +3 -3
- data/lib/hecks/projections/site/cms_editor/templates/src/commands.ts.tmpl +2 -2
- data/lib/hecks/projections/site/cms_editor/templates/src/host.ts.tmpl +8 -3
- data/lib/hecks/projections/site/cms_editor/templates/src/media/handler.ts.tmpl +4 -4
- data/lib/hecks/projections/site/cms_editor/templates/src/names.ts.tmpl +14 -14
- data/lib/hecks/projections/site/cms_editor/templates/src/schema.ts.tmpl +12 -12
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/pages.ts.tmpl +12 -12
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/pickers.ts.tmpl +1 -1
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/schedule.ts.tmpl +2 -2
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/shell.ts.tmpl +11 -11
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/world.ts.tmpl +3 -3
- data/lib/hecks/projections/site/cms_editor/theme_checks.rb +8 -2
- data/lib/hecks/projections/site/cms_editor.rb +19 -16
- data/lib/hecks/projections/site/edge/checks.rb +1 -1
- data/lib/hecks/projections/site/edge/function_checks.rb +1 -1
- data/lib/hecks/projections/site/edge/function_code.rb +4 -1
- data/lib/hecks/projections/site/edge/pattern.rb +4 -1
- data/lib/hecks/projections/site/edge/route_checks.rb +2 -2
- data/lib/hecks/projections/site/edge/rules.rb +1 -1
- data/lib/hecks/projections/site/edge.rb +14 -8
- data/lib/hecks/projections/site/live_edge.rb +2 -2
- data/lib/hecks/projections/site/payload/fields/definitions.rb +1 -1
- data/lib/hecks/projections/site/payload/lifecycle/text.rb +1 -1
- data/lib/hecks/projections/site/payload/model.rb +16 -12
- data/lib/hecks/projections/site/payload/specs.rb +4 -2
- data/lib/hecks/projections/site/payload_driver.rb +9 -8
- data/lib/hecks/projections/site/probe.rb +12 -3
- data/lib/hecks/projections/site/regions.rb +9 -1
- data/lib/hecks/projections/site/role_probe.rb +7 -7
- data/lib/hecks/projections/site/root_rows.rb +4 -4
- data/lib/hecks/projections/site/routes_ts/listings.rb +13 -6
- data/lib/hecks/projections/site/routes_ts.rb +6 -3
- data/lib/hecks/projections/site/site_admin.rb +1 -1
- data/lib/hecks/projections/site/site_cdn.rb +3 -2
- data/lib/hecks/projections/site/site_host.rb +1 -1
- data/lib/hecks/projections/site/site_root.rb +4 -4
- data/lib/hecks/projections/site/table/checks.rb +4 -1
- data/lib/hecks/projections/site/table/navigation_checks.rb +2 -2
- data/lib/hecks/projections/site/table/row_builder.rb +7 -7
- data/lib/hecks/projections/site/table/row_defaults.rb +1 -1
- data/lib/hecks/projections/site/table.rb +32 -26
- data/lib/hecks/projections/statements/actions.rb +4 -1
- data/lib/hecks/projections/statements/relationships.rb +15 -2
- data/lib/hecks/projections/statements.rb +2 -2
- data/lib/hecks/projections/vocabulary.rb +6 -6
- data/lib/hecks/projections/world_skeleton.rb +68 -0
- data/lib/hecks/projections.rb +5 -0
- data/lib/hecks/projector/cli_audience.rb +12 -9
- data/lib/hecks/projector/cli_projector/claims.rb +8 -8
- data/lib/hecks/projector/cli_projector/command_specs.rb +9 -5
- data/lib/hecks/projector/cli_projector/listing.rb +20 -8
- data/lib/hecks/projector/cli_projector/option_specs.rb +1 -1
- data/lib/hecks/projector/cli_projector/query_specs.rb +1 -1
- data/lib/hecks/projector/cli_projector/usage.rb +12 -8
- data/lib/hecks/projector/cli_projector.rb +2 -2
- data/lib/hecks/projector/docs_projector/behaviour.rb +5 -4
- data/lib/hecks/projector/docs_projector/closing.rb +3 -3
- data/lib/hecks/projector/docs_projector.rb +12 -7
- data/lib/hecks/projector/exporter/adapters.rb +15 -2
- data/lib/hecks/projector/exporter/bindings.rb +39 -134
- data/lib/hecks/projector/exporter/plugins.rb +55 -0
- data/lib/hecks/projector/exporter.rb +2 -0
- data/lib/hecks/projector/narrate_projector/commands.rb +4 -3
- data/lib/hecks/projector/narrate_projector/reactions.rb +2 -2
- data/lib/hecks/projector/narrate_projector.rb +9 -8
- data/lib/hecks/projector/target.rb +8 -8
- data/lib/hecks/projector.rb +9 -9
- data/lib/hecks/quality_control/adapters/agent.rb +2 -1
- data/lib/hecks/quality_control/adapters/github_checks.adapter +1 -1
- data/lib/hecks/quality_control/adapters/github_issues.adapter +1 -1
- data/lib/hecks/quality_control/adapters/github_issues.rb +6 -2
- data/lib/hecks/quality_control/adapters/target_tools.rb +9 -3
- data/lib/hecks/quality_control/cli/child.rb +1 -0
- data/lib/hecks/quality_control/cli/qa_domain_novelty/verdict.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_generated_domains/evaluation.rb +12 -2
- data/lib/hecks/quality_control/cli/qa_generated_domains/promotion.rb +4 -1
- data/lib/hecks/quality_control/cli/qa_generated_domains.rb +4 -1
- data/lib/hecks/quality_control/cli/qa_log_bug/proof.rb +16 -3
- data/lib/hecks/quality_control/cli/qa_mine_combinations/booting.rb +4 -2
- data/lib/hecks/quality_control/cli/qa_mutate.rb +161 -0
- data/lib/hecks/quality_control/cli/qa_sweep/all_mode/report.rb +4 -1
- data/lib/hecks/quality_control/cli/qa_sweep/parsing.rb +2 -1
- data/lib/hecks/quality_control/cli/qa_sweep.rb +4 -1
- data/lib/hecks/quality_control/cli/qa_tick/output.rb +28 -26
- data/lib/hecks/quality_control/cli/qa_tick/preflight.rb +12 -3
- data/lib/hecks/quality_control/cli/qa_tick.rb +24 -8
- data/lib/hecks/quality_control/quality_control.bluebook +93 -92
- data/lib/hecks/quality_control/quality_control.hecksagon +3 -3
- data/lib/hecks/quality_control/quality_control.ports.hecksagon +3 -2
- data/lib/hecks/query_ir/rules.rb +9 -9
- data/lib/hecks/query_ir/touchpoints.rb +5 -2
- data/lib/hecks/query_ir.rb +3 -3
- data/lib/hecks/query_specification/common/comparison.rb +1 -1
- data/lib/hecks/query_specification/common/dsl.rb +3 -4
- data/lib/hecks/query_specification/hop_path.rb +7 -4
- data/lib/hecks/rails_app/bluebook/rails_app.bluebook +60 -0
- data/lib/hecks/rails_app/bluebook/rails_app.hecksagon +4 -0
- data/lib/hecks/refused.rb +104 -0
- data/lib/hecks/release/approval.rb +9 -2
- data/lib/hecks/release/gem_pin.rb +7 -3
- data/lib/hecks/release/lane.rb +1 -1
- data/lib/hecks/release/runner/clean_tree.rb +4 -1
- data/lib/hecks/release/runner/console.rb +2 -1
- data/lib/hecks/router/aggregate_reader.rb +3 -4
- data/lib/hecks/router/namespace_installer.rb +31 -17
- data/lib/hecks/router.rb +2 -10
- data/lib/hecks/runtime/adapter_lookup.rb +30 -7
- data/lib/hecks/runtime/adapter_namespace.rb +21 -0
- data/lib/hecks/runtime/asking.rb +30 -0
- data/lib/hecks/runtime/caller.rb +22 -0
- data/lib/hecks/runtime/capability_graph.rb +2 -1
- data/lib/hecks/runtime/collecting.rb +86 -0
- data/lib/hecks/runtime/command_interpreter/argument_gate.rb +13 -8
- data/lib/hecks/runtime/command_interpreter/delegation.rb +46 -17
- data/lib/hecks/runtime/command_interpreter/hydration.rb +17 -21
- data/lib/hecks/runtime/command_interpreter/list_mutations.rb +2 -1
- data/lib/hecks/runtime/command_interpreter/persisting.rb +13 -12
- data/lib/hecks/runtime/command_interpreter.rb +17 -10
- data/lib/hecks/runtime/command_rules/admissibility.rb +17 -10
- data/lib/hecks/runtime/command_rules/authorization.rb +8 -6
- data/lib/hecks/runtime/command_rules/guard_state.rb +10 -10
- data/lib/hecks/runtime/command_rules/invariants.rb +3 -1
- data/lib/hecks/runtime/command_rules/missing_reference.rb +25 -0
- data/lib/hecks/runtime/command_rules/one_of_references.rb +44 -0
- data/lib/hecks/runtime/command_rules/references.rb +14 -14
- data/lib/hecks/runtime/command_rules.rb +2 -0
- data/lib/hecks/runtime/declarations.rb +66 -0
- data/lib/hecks/runtime/dependency_planning/analyzer.rb +2 -1
- data/lib/hecks/runtime/dependency_planning/expression_reads.rb +3 -2
- data/lib/hecks/runtime/dependency_planning/mutation_analysis.rb +2 -1
- data/lib/hecks/runtime/dispatch_claim.rb +72 -0
- data/lib/hecks/runtime/dispatch_context.rb +41 -0
- data/lib/hecks/runtime/dispatcher/queries.rb +17 -0
- data/lib/hecks/runtime/dispatcher/routing.rb +34 -12
- data/lib/hecks/runtime/dispatcher/validating.rb +73 -0
- data/lib/hecks/runtime/dispatcher.rb +39 -23
- data/lib/hecks/runtime/entity_element/location.rb +15 -7
- data/lib/hecks/runtime/entity_element/mutations.rb +4 -1
- data/lib/hecks/runtime/entity_interpreter/enforcement.rb +1 -1
- data/lib/hecks/runtime/entity_interpreter/locating.rb +1 -1
- data/lib/hecks/runtime/entity_interpreter/saving.rb +5 -5
- data/lib/hecks/runtime/entity_interpreter.rb +11 -4
- data/lib/hecks/runtime/errors.rb +30 -17
- data/lib/hecks/runtime/identity.rb +9 -0
- data/lib/hecks/runtime/instance.rb +3 -2
- data/lib/hecks/runtime/interpreting.rb +63 -6
- data/lib/hecks/runtime/invocation_builder.rb +7 -4
- data/lib/hecks/runtime/invocation_facts.rb +13 -8
- data/lib/hecks/runtime/loader/boot_steps.rb +3 -2
- data/lib/hecks/runtime/loader/described.rb +4 -0
- data/lib/hecks/runtime/loader.rb +52 -62
- data/lib/hecks/runtime/outbox/redrive.rb +105 -0
- data/lib/hecks/runtime/outbox/relay.rb +11 -39
- data/lib/hecks/runtime/outbox/runnable.rb +60 -0
- data/lib/hecks/runtime/outbox.rb +15 -1
- data/lib/hecks/runtime/policy_interpreter/arguments.rb +7 -1
- data/lib/hecks/runtime/policy_interpreter/fan_out.rb +8 -35
- data/lib/hecks/runtime/policy_interpreter.rb +8 -0
- data/lib/hecks/runtime/port_operation_interpreter.rb +27 -13
- data/lib/hecks/runtime/query_interpreter/outside_answer.rb +1 -1
- data/lib/hecks/runtime/query_interpreter/paging.rb +42 -0
- data/lib/hecks/runtime/query_interpreter/plugin_answer.rb +54 -0
- data/lib/hecks/runtime/query_interpreter/store_specification.rb +32 -0
- data/lib/hecks/runtime/query_interpreter.rb +16 -9
- data/lib/hecks/runtime/reaction_invocation/target_resolution.rb +10 -4
- data/lib/hecks/runtime/reaction_invocation.rb +5 -2
- data/lib/hecks/runtime/read_model_interpreter/head_ordering.rb +1 -1
- data/lib/hecks/runtime/read_model_interpreter/reductions.rb +23 -15
- data/lib/hecks/runtime/read_model_interpreter/shaping.rb +18 -7
- data/lib/hecks/runtime/read_model_interpreter.rb +5 -2
- data/lib/hecks/runtime/reference_hop.rb +3 -2
- data/lib/hecks/runtime/refusal_wording.rb +15 -6
- data/lib/hecks/runtime/registry/adapter_capabilities.rb +43 -0
- data/lib/hecks/runtime/registry/ask_verification.rb +15 -4
- data/lib/hecks/runtime/registry/{chapter_verification.rb → bluebook_verification.rb} +23 -23
- data/lib/hecks/runtime/registry/context_maps.rb +30 -0
- data/lib/hecks/runtime/registry/declarations.rb +8 -6
- data/lib/hecks/runtime/registry/durability_warnings.rb +18 -2
- data/lib/hecks/runtime/registry/hecksagon_rules.rb +27 -24
- data/lib/hecks/runtime/registry/plugin_query_verification.rb +45 -0
- data/lib/hecks/runtime/registry/providers.rb +34 -99
- data/lib/hecks/runtime/registry/query_verification.rb +30 -21
- data/lib/hecks/runtime/registry/runtime_state.rb +4 -3
- data/lib/hecks/runtime/registry/saga_persistence.rb +7 -16
- data/lib/hecks/runtime/registry/verification.rb +9 -5
- data/lib/hecks/runtime/registry/world_defaults.rb +8 -5
- data/lib/hecks/runtime/registry.rb +52 -27
- data/lib/hecks/runtime/row_sweep.rb +104 -0
- data/lib/hecks/runtime/saga_interpreter/compensation.rb +5 -4
- data/lib/hecks/runtime/saga_interpreter/delivery.rb +13 -10
- data/lib/hecks/runtime/saga_interpreter/redrive.rb +141 -0
- data/lib/hecks/runtime/saga_interpreter/transitions.rb +35 -6
- data/lib/hecks/runtime/saga_interpreter.rb +36 -4
- data/lib/hecks/runtime/saga_pending_dispatch.rb +4 -2
- data/lib/hecks/runtime/scalar_field.rb +73 -0
- data/lib/hecks/runtime/tenant_scope.rb +2 -1
- data/lib/hecks/runtime/validation.rb +24 -0
- data/lib/hecks/runtime/value/admission.rb +11 -11
- data/lib/hecks/runtime/value/coercion.rb +7 -7
- data/lib/hecks/runtime/value/field_checks.rb +13 -13
- data/lib/hecks/runtime/value/invariant_violation.rb +4 -1
- data/lib/hecks/runtime/value/references.rb +7 -4
- data/lib/hecks/runtime/value/unwrapping.rb +60 -0
- data/lib/hecks/runtime/value/validation.rb +7 -4
- data/lib/hecks/runtime/value.rb +3 -27
- data/lib/hecks/runtime/wasm_plugin.rb +98 -0
- data/lib/hecks/runtime.rb +14 -14
- data/lib/hecks/rust_build/command_schemas.rb +27 -0
- data/lib/hecks/rust_build/conformance/surface.rb +50 -7
- data/lib/hecks/rust_build/conformance.rb +25 -3
- data/lib/hecks/rust_build/conformance_fuzz.rb +2 -2
- data/lib/hecks/rust_build/domain_name.rb +4 -1
- data/lib/hecks/rust_build/host.rb +15 -9
- data/lib/hecks/rust_build/native_build.rb +2 -1
- data/lib/hecks/rust_build/prebuilt_binary.rb +25 -5
- data/lib/hecks/rust_build/project_rust/codegen_run.rb +11 -10
- data/lib/hecks/rust_build/project_rust/domain_loader.rb +15 -2
- data/lib/hecks/rust_build/project_rust/root_mod/notes.rb +1 -1
- data/lib/hecks/rust_build/project_rust/target_ir.rb +12 -3
- data/lib/hecks/rust_build/project_rust.rb +39 -19
- data/lib/hecks/rust_build/target_dir.rb +40 -0
- data/lib/hecks/rust_build/wasm.rb +46 -17
- data/lib/hecks/rust_build/wasm_browser.rb +8 -2
- data/lib/hecks/rust_build.rb +29 -2
- data/lib/hecks/sentence_form.rb +212 -0
- data/lib/hecks/served_options.rb +2 -1
- data/lib/hecks/shape_ledger.rb +149 -0
- data/lib/hecks/site/bluebook/site.bluebook +39 -62
- data/lib/hecks/site/bluebook/site.ports.hecksagon +1 -1
- data/lib/hecks/sme/bluebook/sme.bluebook +7 -1
- data/lib/hecks/storehouse/audit.rb +4 -1
- data/lib/hecks/storehouse/bluebook_words.rb +35 -0
- data/lib/hecks/storehouse/dispatching.rb +6 -3
- data/lib/hecks/storehouse/introspection.rb +4 -4
- data/lib/hecks/storehouse/querying.rb +2 -2
- data/lib/hecks/storehouse.rb +14 -4
- data/lib/hecks/switches.rb +21 -0
- data/lib/hecks/tenancy/bluebook/tenancy.bluebook +5 -9
- data/lib/hecks/text.rb +57 -0
- data/lib/hecks/tickets/bluebook/tickets.bluebook +30 -51
- data/lib/hecks/tickets/bluebook/tickets.hecksagon +1 -1
- data/lib/hecks/tickets/bluebook/tickets.ports.hecksagon +1 -1
- data/lib/hecks/tools/argument_gate_matrix/dispatching.rb +1 -1
- data/lib/hecks/tools/argument_gate_matrix/rows.rb +7 -7
- data/lib/hecks/tools/argument_gate_matrix/violations.rb +1 -1
- data/lib/hecks/tools/argument_gate_matrix.rb +3 -3
- data/lib/hecks/tools/ci_gate_decision.rb +5 -2
- data/lib/hecks/tools/ci_gates.rb +1 -1
- data/lib/hecks/tools/comment_style/caps_words.rb +11 -8
- data/lib/hecks/tools/comment_style/dictionary.rb +7 -2
- data/lib/hecks/tools/comment_style/fixing.rb +10 -5
- data/lib/hecks/tools/comment_style/long_blocks.rb +1 -1
- data/lib/hecks/tools/comment_style/masking.rb +5 -5
- data/lib/hecks/tools/comment_style/run.rb +4 -1
- data/lib/hecks/tools/comment_style/source_file.rb +10 -3
- data/lib/hecks/tools/comment_style/structure_checks.rb +13 -4
- data/lib/hecks/tools/comment_style/text_checks.rb +1 -1
- data/lib/hecks/tools/comment_style.rb +25 -2
- data/lib/hecks/tools/deploy_recipe/generation.rb +1 -1
- data/lib/hecks/tools/deploy_recipe/targets.rb +1 -1
- data/lib/hecks/tools/deploy_recipe/worlds.rb +15 -9
- data/lib/hecks/tools/deploy_recipe.rb +17 -10
- data/lib/hecks/tools/deploy_recipe_lint/fixtures.rb +1 -1
- data/lib/hecks/tools/deploy_recipe_lint/makefile.rb +7 -1
- data/lib/hecks/tools/drop_implicit_append_fields.rb +4 -1
- data/lib/hecks/tools/era_projection_backfill.rb +11 -6
- data/lib/hecks/tools/era_reattest.rb +11 -6
- data/lib/hecks/tools/fuzz_sweep/findings.rb +18 -2
- data/lib/hecks/tools/fuzz_sweep/options.rb +5 -1
- data/lib/hecks/tools/fuzz_sweep.rb +17 -5
- data/lib/hecks/tools/gate.rb +27 -5
- data/lib/hecks/tools/hoist_local_givens/rewriting.rb +3 -2
- data/lib/hecks/tools/hoist_local_givens.rb +2 -4
- data/lib/hecks/tools/lanes/prebuilt_workflow.rb +1 -1
- data/lib/hecks/tools/lanes/rows.rb +9 -3
- data/lib/hecks/tools/lanes/ruleset.rb +1 -1
- data/lib/hecks/tools/lanes/watch_workflow.rb +1 -1
- data/lib/hecks/tools/lanes/workflow.rb +1 -1
- data/lib/hecks/tools/lanes.rb +1 -1
- data/lib/hecks/tools/oidc_manifests.rb +16 -19
- data/lib/hecks/tools/regeneration_run.rb +22 -17
- data/lib/hecks/tools/release_only.rb +5 -2
- data/lib/hecks/tools/rust_comment_style/caps_words.rb +5 -5
- data/lib/hecks/tools/rust_comment_style/fixing.rb +1 -1
- data/lib/hecks/tools/rust_comment_style/masking.rb +7 -4
- data/lib/hecks/tools/rust_comment_style/source_file.rb +7 -2
- data/lib/hecks/tools/rust_comment_style/text_checks.rb +1 -1
- data/lib/hecks/tools/rust_comment_style/tokenizer.rb +4 -1
- data/lib/hecks/tools/site_routes/editor_files.rb +16 -13
- data/lib/hecks/tools/site_routes/root_files.rb +14 -13
- data/lib/hecks/tools/site_routes/templates.rb +5 -4
- data/lib/hecks/tools/site_routes.rb +18 -15
- data/lib/hecks/tools/tail_merge.rb +3 -3
- data/lib/hecks/tools/tenant_provisioning.rb +6 -6
- data/lib/hecks/tools/tools_doc.rb +16 -16
- data/lib/hecks/tools/translation_audit/domain_loading.rb +3 -3
- data/lib/hecks/tools/translation_audit.rb +15 -4
- data/lib/hecks/tools/translation_scaffold/reporting.rb +4 -1
- data/lib/hecks/tools/translation_scaffold.rb +4 -14
- data/lib/hecks/vendoring/git_source.rb +7 -4
- data/lib/hecks/version.rb +1 -1
- data/lib/hecks/vocabulary.rb +110 -3
- data/lib/hecks.rb +37 -18
- data/lib/rubocop/cop/hecks/inline_regexp.rb +29 -0
- data/lib/rubocop/cop/hecks/no_transport_in_runtime.rb +78 -0
- data/lib/rubocop/cop/hecks/rails_model_rules.rb +46 -0
- data/lib/rubocop/cop/hecks/thread_shared_ivar_mutation.rb +1 -1
- data/lib/rubocop/cop/hecks/train_wreck.rb +69 -0
- data/lib/rubocop/cop/hecks/unnamed_pipeline.rb +51 -0
- data/prebuilt/31cf81e12f16236ad26249be590cfea3799c9db67432e6a4ef54b801c355b6ae.marshal +0 -0
- data/prebuilt/68ecb2bd3abb1a221007db4f2b0375834c13aaccac8f2b99778e8517f11aa113.marshal +0 -0
- data/prebuilt/verdicts-0328c2403383837d780ad5ed81d1da351c56436b894cf9015b5d56b8f1f1bf10.json +1 -0
- data/qa/settings.yml +9 -0
- data/rust/Cargo.lock +8 -1
- data/rust/Cargo.toml +6 -7
- data/rust/build/src/binding_pass.rs +13 -17
- data/rust/build/src/cargo_sync.rs +1 -1
- data/rust/build/src/lineage_pass.rs +4 -71
- data/rust/build/src/pipeline.rs +99 -70
- data/rust/build/src/resolve.rs +85 -29
- data/rust/build/src/seams_pass.rs +117 -99
- data/rust/build/src/world_pass.rs +21 -12
- data/rust/codegen/src/domain_generator.rs +30 -2
- data/rust/codegen/src/expr_emitter.rs +6 -0
- data/rust/codegen/src/json_codec.rs +48 -10
- data/rust/codegen/src/main.rs +41 -34
- data/rust/codegen/src/manifest.rs +1 -1
- data/rust/codegen/src/naming.rs +5 -5
- data/rust/codegen/src/one_of_references.rs +124 -0
- data/rust/codegen/src/presenters.rs +335 -0
- data/rust/codegen/src/queries.rs +56 -7
- data/rust/codegen/src/reactions.rs +19 -14
- data/rust/codegen/src/read_models.rs +20 -71
- data/rust/codegen/src/registry.rs +89 -15
- data/rust/codegen/src/sidecars.rs +1 -1
- data/rust/expr/Cargo.lock +54 -0
- data/rust/expr/Cargo.toml +52 -0
- data/rust/{src/kernel → expr/src}/attribute_shapes/composite.rs +45 -14
- data/rust/{src/kernel → expr/src}/attribute_shapes/list.rs +1 -1
- data/rust/{src/kernel → expr/src}/attribute_shapes/mod.rs +2 -2
- data/rust/{src/kernel → expr/src}/attribute_shapes/optional.rs +1 -1
- data/rust/{src/kernel → expr/src}/attribute_shapes/scalar.rs +3 -3
- data/rust/{src/kernel → expr/src}/expr.rs +30 -8
- data/rust/{src/kernel → expr/src}/expression_operators/arithmetic.rs +41 -18
- data/rust/{src/kernel → expr/src}/expression_operators/comparison.rs +54 -8
- data/rust/{src/kernel → expr/src}/expression_operators/enumeration.rs +73 -6
- data/rust/{src/kernel → expr/src}/expression_operators/logical.rs +2 -2
- data/rust/expr/src/expression_operators/membership.rs +33 -0
- data/rust/{src/kernel → expr/src}/expression_operators/mod.rs +2 -2
- data/rust/expr/src/expression_operators/pattern_match.rs +179 -0
- data/rust/{src/kernel → expr/src}/expression_operators/positional.rs +8 -6
- data/rust/{src/kernel → expr/src}/expression_operators/presence.rs +7 -6
- data/rust/{src/kernel → expr/src}/expression_operators/sign_test.rs +14 -4
- data/rust/{src/kernel → expr/src}/expression_operators/sized.rs +16 -9
- data/rust/{src/kernel → expr/src}/expression_operators/text.rs +30 -17
- data/rust/{src/kernel → expr/src}/expression_operators/to_string.rs +8 -6
- data/rust/expr/src/lib.rs +17 -0
- data/rust/expr/src/refusal.rs +62 -0
- data/rust/expr/src/rendering.rs +135 -0
- data/rust/{src/kernel → expr/src}/ruby_float.rs +7 -6
- data/rust/host/Cargo.lock +137 -123
- data/rust/host/Cargo.toml +7 -3
- data/rust/host/HECKS_RELEASE +1 -1
- data/rust/host/core/Cargo.toml +64 -0
- data/rust/host/core/clippy.toml +4 -0
- data/rust/host/core/src/arg_limits.rs +48 -0
- data/rust/host/core/src/clock.rs +146 -0
- data/rust/host/core/src/dispatch.rs +920 -0
- data/rust/host/core/src/expr_json.rs +1137 -0
- data/rust/host/{src → core/src}/host.rs +13 -14
- data/rust/host/{src → core/src}/ir.rs +227 -18
- data/rust/host/core/src/journal.rs +126 -0
- data/rust/host/{src → core/src}/lambda_client.rs +27 -96
- data/rust/host/core/src/lib.rs +37 -0
- data/rust/host/{src → core/src}/needs.rs +66 -20
- data/rust/host/core/src/plugins.rs +269 -0
- data/rust/host/core/src/presentation.rs +471 -0
- data/rust/host/{src → core/src}/presentation_write.rs +75 -43
- data/rust/host/{src → core/src}/query_step.rs +54 -16
- data/rust/host/{src → core/src}/reference_validate.rs +6 -6
- data/rust/host/{src → core/src}/storage_shape.rs +2 -2
- data/rust/host/core/src/store/memory.rs +635 -0
- data/rust/host/core/src/store.rs +418 -0
- data/rust/host/{src → core/src}/ui_schema.rs +8 -8
- data/rust/host/core/src/validation.rs +129 -0
- data/rust/host/core/src/wasm_runner.rs +410 -0
- data/rust/host/fuzz/.gitignore +4 -0
- data/rust/host/fuzz/Cargo.lock +4479 -0
- data/rust/host/fuzz/Cargo.toml +42 -0
- data/rust/host/fuzz/README.md +55 -0
- data/rust/host/fuzz/fuzz_targets/postgres_equivalence.rs +24 -0
- data/rust/host/fuzz/src/backend.rs +273 -0
- data/rust/host/fuzz/src/equivalence.rs +195 -0
- data/rust/host/fuzz/src/footprint.rs +182 -0
- data/rust/host/fuzz/src/lib.rs +17 -0
- data/rust/host/fuzz/src/ops.rs +345 -0
- data/rust/host/fuzz/tests/smoke.rs +50 -0
- data/rust/host/src/api.rs +316 -105
- data/rust/host/src/auth/google_signin.rs +183 -0
- data/rust/host/src/auth.rs +527 -370
- data/rust/host/src/aws_lambda_invoker.rs +61 -0
- data/rust/host/src/bin/expr_harness.rs +9 -4
- data/rust/host/src/bin/ledger.rs +84 -0
- data/rust/host/src/bin/lineage_harness.rs +17 -21
- data/rust/host/src/bin/mint_harness.rs +11 -36
- data/rust/host/src/bin/validate_harness.rs +1 -6
- data/rust/host/src/boot.rs +465 -174
- data/rust/host/src/boundary_fuzz/ir.rs +10 -5
- data/rust/host/src/boundary_fuzz/server.rs +6 -5
- data/rust/host/src/checkout.rs +4 -1
- data/rust/host/src/commerce_ir.rs +126 -105
- data/rust/host/src/{dispatch.rs → dispatch_tests.rs} +391 -824
- data/rust/host/src/extension.rs +3 -4
- data/rust/host/src/hecksagon_boundary_tests.rs +149 -0
- data/rust/host/src/ledger.rs +683 -0
- data/rust/host/src/lib.rs +21 -28
- data/rust/host/src/payments/tests.rs +136 -38
- data/rust/host/src/payments.rs +36 -32
- data/rust/host/src/platform_signin/extension.rs +1 -1
- data/rust/host/src/platform_signin/mapping_tests.rs +12 -9
- data/rust/host/src/platform_signin/session.rs +7 -14
- data/rust/host/src/platform_signin/verify.rs +0 -2
- data/rust/host/src/presentation_tests.rs +382 -0
- data/rust/host/src/rate_limit.rs +18 -2
- data/rust/host/src/server.rs +287 -36
- data/rust/host/src/{journal.rs → store/journal_sql.rs} +21 -127
- data/rust/host/src/{mint.rs → store/mint.rs} +12 -12
- data/rust/host/src/store/postgres.rs +493 -0
- data/rust/host/src/store.rs +97 -0
- data/rust/host/src/store_conformance.rs +1265 -0
- data/rust/host/src/web/commerce.rs +10 -18
- data/rust/host/src/web/newsletter/cooldown.rs +107 -22
- data/rust/host/src/web/newsletter/naming.rs +104 -0
- data/rust/host/src/web/newsletter/tests.rs +53 -0
- data/rust/host/src/web/newsletter.rs +73 -50
- data/rust/host/src/web/newsletter_send.rs +12 -13
- data/rust/host/src/web/registration_receipt.rs +2 -2
- data/rust/host/src/web/registrations.rs +754 -375
- data/rust/host/src/web/resend_webhook.rs +3 -3
- data/rust/host/src/web/signin_tests.rs +131 -0
- data/rust/host/src/web.rs +1479 -149
- data/rust/lsp/README.md +27 -27
- data/rust/lsp/src/diagnostics.rs +75 -15
- data/rust/lsp/src/main.rs +101 -5
- data/rust/parser/fuzz/Cargo.toml +2 -2
- data/rust/parser/fuzz/README.md +3 -3
- data/rust/parser/fuzz/fuzz_targets/{chapter.rs → bluebook.rs} +4 -4
- data/rust/parser/fuzz/fuzz_targets/resolve.rs +2 -2
- data/rust/parser/src/build/named_pattern.rs +22 -0
- data/rust/parser/src/build/references.rs +52 -0
- data/rust/parser/src/diag.rs +22 -1
- data/rust/parser/src/emit.rs +68 -4
- data/rust/parser/src/expr/ast_json.rs +10 -0
- data/rust/parser/src/expr/resolver.rs +49 -9
- data/rust/parser/src/ir.rs +34 -7
- data/rust/parser/src/keywords.rs +454 -457
- data/rust/parser/src/lex.rs +115 -87
- data/rust/parser/src/main.rs +180 -32
- data/rust/parser/src/parse/adapter.rs +28 -0
- data/rust/parser/src/parse/aggregate.rs +55 -35
- data/rust/parser/src/parse/command.rs +100 -15
- data/rust/parser/src/parse/{chapter.rs → declaration.rs} +85 -54
- data/rust/parser/src/parse/domain_port.rs +60 -9
- data/rust/parser/src/parse/entity.rs +35 -32
- data/rust/parser/src/parse/file.rs +1 -1
- data/rust/parser/src/parse/hecksagon.rs +15 -5
- data/rust/parser/src/parse/mod.rs +84 -2
- data/rust/parser/src/parse/process_manager.rs +1 -1
- data/rust/parser/src/parse/query.rs +13 -3
- data/rust/parser/src/parse/read_model.rs +2 -1
- data/rust/parser/src/phrases.rs +1258 -0
- data/rust/parser/src/render_ruby.rs +540 -0
- data/rust/parser/src/sentence/changes.rs +437 -0
- data/rust/parser/src/sentence/command_step.rs +206 -0
- data/rust/parser/src/sentence/complete.rs +276 -0
- data/rust/parser/src/sentence/entity.rs +41 -0
- data/rust/parser/src/sentence/examples.rs +1012 -0
- data/rust/parser/src/sentence/format.rs +882 -0
- data/rust/parser/src/sentence/lower.rs +1366 -0
- data/rust/parser/src/sentence/mod.rs +444 -0
- data/rust/parser/src/sentence/names.rs +69 -0
- data/rust/parser/src/sentence/options.rs +154 -0
- data/rust/parser/src/sentence/pattern.rs +433 -0
- data/rust/parser/src/sentence/process.rs +196 -0
- data/rust/parser/src/sentence/queries.rs +431 -0
- data/rust/parser/src/sentence/report.rs +283 -0
- data/rust/parser/src/sentence/token.rs +106 -0
- data/rust/parser/src/sentence/values.rs +498 -0
- data/rust/src/exemplar/queries.rs +1 -0
- data/rust/src/exemplar/reactions.rs +1 -1
- data/rust/src/exemplar/registry.rs +30 -0
- data/rust/src/kernel/cli.rs +233 -20
- data/rust/src/kernel/collecting.rs +174 -0
- data/rust/src/kernel/dispatch.rs +55 -27
- data/rust/src/kernel/json.rs +15 -1
- data/rust/src/kernel/mod.rs +8 -67
- data/rust/src/kernel/named_query.rs +225 -11
- data/rust/src/kernel/orchestrate.rs +213 -25
- data/rust/src/kernel/orchestrate_guard_tests.rs +3 -0
- data/rust/src/kernel/present.rs +261 -0
- data/rust/src/kernel/query_cursor.rs +251 -0
- data/rust/src/kernel/query_ordering.rs +6 -6
- data/rust/src/kernel/read_model.rs +162 -17
- data/rust/src/kernel/repository.rs +107 -17
- data/rust/src/kernel/vocab/mod.rs +4 -0
- data/rust/src/kernel/vocab/reducer.rs +109 -0
- data/rust/src/kernel/vocab/refusal_class.rs +124 -0
- data/rust/src/kernel/vocab/refusal_template.rs +2 -2
- data/rust/src/lib.rs +1 -1
- data/rust/web/Cargo.lock +47 -0
- metadata +331 -93
- data/lib/hecks/chapters.rb +0 -147
- data/lib/hecks/gate/stages.yml +0 -234
- data/lib/hecks/hecks/governance.world +0 -7
- data/lib/hecks/ports/persistence/plugins/era/expected_era.rb +0 -137
- data/lib/hecks/ports/persistence/postgres_dump/connection.rb +0 -59
- data/lib/hecks/ports/persistence/postgres_dump.rb +0 -100
- data/lib/hecks/projections/deploy/box/templates/tunnel-egress.yaml.tmpl +0 -11
- data/lib/hecks/projector/exporter/capability_values.rb +0 -55
- data/lib/hecks/runtime/remote_dispatcher.rb +0 -176
- data/prebuilt/02c09c73b272c1fb5a9ae6d87bb5e5e529208e00f6b4b597dc2c0fd70a9c0964.marshal +0 -0
- data/prebuilt/bb84a835cf6a15136bad5ca03aa5bf93a5b92f5f72444618d3ef2412b987fb32.marshal +0 -0
- data/prebuilt/verdicts-f1f10da14c8e8f01b4c9b7e3e2d74be8cd2bf4676364ed17fa16975d2a076d75.json +0 -1
- data/rust/host/src/clock.rs +0 -8
- data/rust/host/src/expr_json.rs +0 -1983
- data/rust/host/src/presentation.rs +0 -842
- data/rust/host/src/wasm_runner.rs +0 -206
- data/rust/src/kernel/expression_operators/membership.rs +0 -20
- data/rust/src/kernel/expression_operators/pattern_match.rs +0 -108
- /data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/events.rb +0 -0
- /data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/head_writes.rb +0 -0
- /data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/journal.rb +0 -0
- /data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage/base_sql.rb +0 -0
- /data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage/field_cache.rb +0 -0
- /data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage/head_compiler.rb +0 -0
- /data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage/merge_writes.rb +0 -0
- /data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage/provisioning.rb +0 -0
- /data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage/resumable_backfill.rb +0 -0
- /data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage/transform_installer.rb +0 -0
- /data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/lineage/transform_sql.rb +0 -0
- /data/lib/hecks/{ports/persistence/plugins/era → adapters/driven}/postgres_era/sagas.rb +0 -0
- /data/rust/host/{src → core/src}/field_hints.rs +0 -0
- /data/rust/host/{src → core/src}/log.rs +0 -0
- /data/rust/host/{src → core/src}/reference_transform.rs +0 -0
|
@@ -6,6 +6,9 @@ Hecks.bluebook "Hecks" do
|
|
|
6
6
|
aggregate "Operation" do
|
|
7
7
|
description "One thing an operator ran against a domain, and how it ended."
|
|
8
8
|
|
|
9
|
+
acknowledges :key_by_value, "any address an operator checks, not only the address of a recorded Host",
|
|
10
|
+
of: :url
|
|
11
|
+
|
|
9
12
|
attribute :run, OperationKey
|
|
10
13
|
attribute :subject, Subject, optional: true
|
|
11
14
|
attribute :script, Script, optional: true
|
|
@@ -22,10 +25,21 @@ Hecks.bluebook "Hecks" do
|
|
|
22
25
|
attribute :email, Email, optional: true
|
|
23
26
|
attribute :name, PersonName, optional: true
|
|
24
27
|
attribute :role, RoleName, optional: true
|
|
28
|
+
attribute :claimed, Switch, optional: true
|
|
29
|
+
attribute :row, RowId, optional: true
|
|
25
30
|
attribute :output, Output, optional: true
|
|
26
31
|
attribute :refusal, Output, optional: true
|
|
27
32
|
identified_by :run
|
|
28
33
|
|
|
34
|
+
value_object "Switch" do
|
|
35
|
+
attribute :value, Boolean
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# The delivery id an outbox row carries, as the stalled-row warning at boot names it.
|
|
39
|
+
value_object "RowId" do
|
|
40
|
+
attribute :value, String, matches: :present
|
|
41
|
+
end
|
|
42
|
+
|
|
29
43
|
value_object "OperationKey" do
|
|
30
44
|
attribute :value, String, matches: :present
|
|
31
45
|
|
|
@@ -51,7 +65,7 @@ Hecks.bluebook "Hecks" do
|
|
|
51
65
|
end
|
|
52
66
|
|
|
53
67
|
value_object "Address" do
|
|
54
|
-
attribute :value, String,
|
|
68
|
+
attribute :value, String, matches: :http_scheme
|
|
55
69
|
end
|
|
56
70
|
|
|
57
71
|
value_object "RoutePath" do
|
|
@@ -78,7 +92,7 @@ Hecks.bluebook "Hecks" do
|
|
|
78
92
|
attribute :value, String
|
|
79
93
|
end
|
|
80
94
|
|
|
81
|
-
# Who the first administrator is: a person of the domain's membership
|
|
95
|
+
# Who the first administrator is: a person of the domain's membership bluebook.
|
|
82
96
|
value_object "Email" do
|
|
83
97
|
attribute :value, String, pattern: '^[^ \t\n\r@]+@[^ \t\n\r@]+$'
|
|
84
98
|
end
|
|
@@ -95,6 +109,7 @@ Hecks.bluebook "Hecks" do
|
|
|
95
109
|
mark :failure, "failed"
|
|
96
110
|
transition "Succeed" => "succeeded", from: "requested"
|
|
97
111
|
transition "Fail" => "failed", from: "requested"
|
|
112
|
+
mark :terminal, "failed", "succeeded"
|
|
98
113
|
end
|
|
99
114
|
|
|
100
115
|
# Runs one verb, or a JSON step list, against the domain: `hecks run [domain] script=steps.json`
|
|
@@ -104,21 +119,16 @@ Hecks.bluebook "Hecks" do
|
|
|
104
119
|
role "Operator"
|
|
105
120
|
goal "Dispatch a verb or a step list against a domain and keep what it reported"
|
|
106
121
|
|
|
107
|
-
attribute :run, OperationKey
|
|
108
|
-
attribute :subject, Subject, optional: true
|
|
109
|
-
attribute :script, Script, optional: true
|
|
110
|
-
attribute :verb, Verb, optional: true
|
|
111
|
-
attribute :arguments, list_of(Word), optional: true
|
|
122
|
+
attribute :run, OperationKey, sets: true
|
|
123
|
+
attribute :subject, Subject, optional: true, sets: true
|
|
124
|
+
attribute :script, Script, optional: true, sets: true
|
|
125
|
+
attribute :verb, Verb, optional: true, sets: true
|
|
126
|
+
attribute :arguments, list_of(Word), optional: true, sets: true
|
|
112
127
|
|
|
113
128
|
given("exactly one of a script and a verb is named: pass script= or verb=, not both") do
|
|
114
129
|
(script.set? && verb.unset?) || (script.unset? && verb.set?)
|
|
115
130
|
end
|
|
116
131
|
|
|
117
|
-
sets :run
|
|
118
|
-
sets :subject
|
|
119
|
-
sets :script
|
|
120
|
-
sets :verb
|
|
121
|
-
sets :arguments
|
|
122
132
|
|
|
123
133
|
emits RunRequested
|
|
124
134
|
end
|
|
@@ -127,24 +137,58 @@ Hecks.bluebook "Hecks" do
|
|
|
127
137
|
role "Operator"
|
|
128
138
|
goal "Bring every read-model projection of a domain up to date now"
|
|
129
139
|
|
|
140
|
+
attribute :run, OperationKey, sets: true
|
|
141
|
+
attribute :subject, Subject, sets: true
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
emits ProjectionsRefreshRequested
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Redelivers what a domain's outbox left behind. A row never claimed is always safe to redeliver. A
|
|
148
|
+
# row claimed before a crash and never settled may or may not have run its effect, so it is only
|
|
149
|
+
# named (on stderr, as at boot) unless `claimed.value=true` says the effect is known not to have run,
|
|
150
|
+
# for every claimed row, or `row.value=<delivery id>` says it for that one row alone.
|
|
151
|
+
command "RedriveOutbox" do
|
|
152
|
+
role "Operator"
|
|
153
|
+
goal "Redeliver the reactions a domain's outbox left undelivered, and name the claimed ones that stalled"
|
|
154
|
+
|
|
155
|
+
attribute :run, OperationKey, sets: true
|
|
156
|
+
attribute :subject, Subject, sets: true
|
|
157
|
+
attribute :claimed, Switch, optional: true, sets: true
|
|
158
|
+
attribute :row, RowId, optional: true, sets: true
|
|
159
|
+
|
|
160
|
+
given("one claimed row is named, or all of them are: pass row= or claimed=, not both") do
|
|
161
|
+
row.unset? || claimed.unset?
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
emits OutboxRedriveRequested
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Settles one stalled claimed row as failed without running its effect, for a row whose effect is
|
|
169
|
+
# known to have landed or that nobody wants run. It never redelivers; `RedriveOutbox` does that.
|
|
170
|
+
command "AbandonOutboxRow" do
|
|
171
|
+
role "Operator"
|
|
172
|
+
goal "Settle one stalled outbox row as failed, naming it by its delivery id, without running it"
|
|
173
|
+
|
|
130
174
|
attribute :run, OperationKey
|
|
131
175
|
attribute :subject, Subject
|
|
176
|
+
attribute :row, RowId
|
|
132
177
|
|
|
133
178
|
sets :run
|
|
134
179
|
sets :subject
|
|
180
|
+
sets :row
|
|
135
181
|
|
|
136
|
-
emits
|
|
182
|
+
emits OutboxRowAbandonRequested
|
|
137
183
|
end
|
|
138
184
|
|
|
139
185
|
command "RunBehaviors" do
|
|
140
186
|
role "Operator"
|
|
141
187
|
goal "Run a domain's behavior tests and keep the verdict"
|
|
142
188
|
|
|
143
|
-
attribute :run, OperationKey
|
|
144
|
-
attribute :subject, Subject
|
|
189
|
+
attribute :run, OperationKey, sets: true
|
|
190
|
+
attribute :subject, Subject, sets: true
|
|
145
191
|
|
|
146
|
-
sets :run
|
|
147
|
-
sets :subject
|
|
148
192
|
|
|
149
193
|
emits BehaviorsRequested
|
|
150
194
|
end
|
|
@@ -153,11 +197,9 @@ Hecks.bluebook "Hecks" do
|
|
|
153
197
|
role "Operator"
|
|
154
198
|
goal "Open an interactive console on a domain"
|
|
155
199
|
|
|
156
|
-
attribute :run, OperationKey
|
|
157
|
-
attribute :subject, Subject, optional: true
|
|
200
|
+
attribute :run, OperationKey, sets: true
|
|
201
|
+
attribute :subject, Subject, optional: true, sets: true
|
|
158
202
|
|
|
159
|
-
sets :run
|
|
160
|
-
sets :subject
|
|
161
203
|
|
|
162
204
|
emits ConsoleRequested
|
|
163
205
|
end
|
|
@@ -166,11 +208,9 @@ Hecks.bluebook "Hecks" do
|
|
|
166
208
|
role "Operator"
|
|
167
209
|
goal "Dispatch one synthesized call per command and report of a wired domain"
|
|
168
210
|
|
|
169
|
-
attribute :run, OperationKey
|
|
170
|
-
attribute :subject, Subject, optional: true
|
|
211
|
+
attribute :run, OperationKey, sets: true
|
|
212
|
+
attribute :subject, Subject, optional: true, sets: true
|
|
171
213
|
|
|
172
|
-
sets :run
|
|
173
|
-
sets :subject
|
|
174
214
|
|
|
175
215
|
emits SmokeTestRequested
|
|
176
216
|
end
|
|
@@ -179,31 +219,22 @@ Hecks.bluebook "Hecks" do
|
|
|
179
219
|
role "Operator"
|
|
180
220
|
goal "Check that a running service refuses bad signatures and accepts a good one"
|
|
181
221
|
|
|
182
|
-
attribute :run, OperationKey
|
|
183
|
-
attribute :url, Address, optional: true
|
|
184
|
-
attribute :path, RoutePath
|
|
185
|
-
attribute :header, HeaderName, optional: true
|
|
186
|
-
attribute :scheme, Scheme, optional: true
|
|
187
|
-
attribute :payload, Payload, optional: true
|
|
188
|
-
attribute :payload_file, PayloadFile, optional: true
|
|
189
|
-
attribute :health_path, RoutePath, optional: true
|
|
190
|
-
attribute :state_path, RoutePath, optional: true
|
|
222
|
+
attribute :run, OperationKey, sets: true
|
|
223
|
+
attribute :url, Address, optional: true, sets: true
|
|
224
|
+
attribute :path, RoutePath, sets: true
|
|
225
|
+
attribute :header, HeaderName, optional: true, sets: true
|
|
226
|
+
attribute :scheme, Scheme, optional: true, sets: true
|
|
227
|
+
attribute :payload, Payload, optional: true, sets: true
|
|
228
|
+
attribute :payload_file, PayloadFile, optional: true, sets: true
|
|
229
|
+
attribute :health_path, RoutePath, optional: true, sets: true
|
|
230
|
+
attribute :state_path, RoutePath, optional: true, sets: true
|
|
191
231
|
|
|
192
|
-
sets :run
|
|
193
|
-
sets :url
|
|
194
|
-
sets :path
|
|
195
|
-
sets :header
|
|
196
|
-
sets :scheme
|
|
197
|
-
sets :payload
|
|
198
|
-
sets :payload_file
|
|
199
|
-
sets :health_path
|
|
200
|
-
sets :state_path
|
|
201
232
|
|
|
202
233
|
emits SmokeHttpRequested
|
|
203
234
|
end
|
|
204
235
|
|
|
205
236
|
# `hecks operation.bootstrap_admin <domain> email=<email> [name=<name>] [role=<role>]`. A
|
|
206
|
-
# domain whose
|
|
237
|
+
# domain whose bluebook `provides "membership"` has nobody who may grant access until someone is
|
|
207
238
|
# granted it. This admits the person and grants them the role the grant command is gated to
|
|
208
239
|
# (or `role`), as a caller that names that role and binds no `actor_id`: Governance checks that
|
|
209
240
|
# caller by the role it states, which is how the first grant gets made (ADR 0025). It is
|
|
@@ -211,19 +242,14 @@ Hecks.bluebook "Hecks" do
|
|
|
211
242
|
# persistence must be the one the service runs on (`DATABASE_URL`), not Memory.
|
|
212
243
|
command "BootstrapAdmin" do
|
|
213
244
|
role "Operator"
|
|
214
|
-
goal "Admit the first administrator of a domain's membership
|
|
245
|
+
goal "Admit the first administrator of a domain's membership bluebook and grant them access"
|
|
215
246
|
|
|
216
|
-
attribute :run, OperationKey
|
|
217
|
-
attribute :subject, Subject
|
|
218
|
-
attribute :email, Email
|
|
219
|
-
attribute :name, PersonName, optional: true
|
|
220
|
-
attribute :role, RoleName, optional: true
|
|
247
|
+
attribute :run, OperationKey, sets: true
|
|
248
|
+
attribute :subject, Subject, sets: true
|
|
249
|
+
attribute :email, Email, sets: true
|
|
250
|
+
attribute :name, PersonName, optional: true, sets: true
|
|
251
|
+
attribute :role, RoleName, optional: true, sets: true
|
|
221
252
|
|
|
222
|
-
sets :run
|
|
223
|
-
sets :subject
|
|
224
|
-
sets :email
|
|
225
|
-
sets :name
|
|
226
|
-
sets :role
|
|
227
253
|
|
|
228
254
|
emits AdminBootstrapRequested
|
|
229
255
|
end
|
|
@@ -233,9 +259,8 @@ Hecks.bluebook "Hecks" do
|
|
|
233
259
|
goal "Record that the operation ended well, and what it reported"
|
|
234
260
|
|
|
235
261
|
reference_to Operation
|
|
236
|
-
attribute :output, Output
|
|
262
|
+
attribute :output, Output, sets: true
|
|
237
263
|
|
|
238
|
-
sets :output
|
|
239
264
|
|
|
240
265
|
emits OperationSucceeded
|
|
241
266
|
end
|
|
@@ -245,9 +270,8 @@ Hecks.bluebook "Hecks" do
|
|
|
245
270
|
goal "Record that the operation was refused or found a problem, and what it said"
|
|
246
271
|
|
|
247
272
|
reference_to Operation
|
|
248
|
-
attribute :refusal, Output
|
|
273
|
+
attribute :refusal, Output, sets: true
|
|
249
274
|
|
|
250
|
-
sets :refusal
|
|
251
275
|
|
|
252
276
|
emits OperationFailed
|
|
253
277
|
end
|
|
@@ -300,37 +324,47 @@ Hecks.bluebook "Hecks" do
|
|
|
300
324
|
|
|
301
325
|
policy "RunWhenRequested" do
|
|
302
326
|
on "Operation.RunRequested"
|
|
303
|
-
|
|
327
|
+
ask :execute, with: { run: :run }
|
|
304
328
|
end
|
|
305
329
|
|
|
306
330
|
policy "RefreshWhenRequested" do
|
|
307
331
|
on "Operation.ProjectionsRefreshRequested"
|
|
308
|
-
|
|
332
|
+
ask :refresh, with: { run: :run }
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
policy "RedriveWhenRequested" do
|
|
336
|
+
on "Operation.OutboxRedriveRequested"
|
|
337
|
+
ask :redrive, with: { run: :run }
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
policy "AbandonWhenRequested" do
|
|
341
|
+
on "Operation.OutboxRowAbandonRequested"
|
|
342
|
+
ask :abandon, with: { run: :run }
|
|
309
343
|
end
|
|
310
344
|
|
|
311
345
|
policy "VerifyWhenRequested" do
|
|
312
346
|
on "Operation.BehaviorsRequested"
|
|
313
|
-
|
|
347
|
+
ask :verify, with: { run: :run }
|
|
314
348
|
end
|
|
315
349
|
|
|
316
350
|
policy "SmokeWhenRequested" do
|
|
317
351
|
on "Operation.SmokeTestRequested"
|
|
318
|
-
|
|
352
|
+
ask :smoke, with: { run: :run }
|
|
319
353
|
end
|
|
320
354
|
|
|
321
355
|
policy "BootstrapWhenRequested" do
|
|
322
356
|
on "Operation.AdminBootstrapRequested"
|
|
323
|
-
|
|
357
|
+
ask :bootstrap, with: { run: :run }
|
|
324
358
|
end
|
|
325
359
|
|
|
326
360
|
policy "OpenWhenRequested" do
|
|
327
361
|
on "Operation.ConsoleRequested"
|
|
328
|
-
|
|
362
|
+
ask :open, with: { run: :run }
|
|
329
363
|
end
|
|
330
364
|
|
|
331
365
|
policy "ProbeWhenRequested" do
|
|
332
366
|
on "Operation.SmokeHttpRequested"
|
|
333
|
-
|
|
367
|
+
ask :probe, with: { run: :run }
|
|
334
368
|
end
|
|
335
369
|
|
|
336
370
|
policy "RecordTheOutput" do
|
|
@@ -356,7 +390,7 @@ Hecks.bluebook "Hecks" do
|
|
|
356
390
|
identified_by :host
|
|
357
391
|
|
|
358
392
|
value_object "Address" do
|
|
359
|
-
attribute :value, String,
|
|
393
|
+
attribute :value, String, matches: :http_scheme
|
|
360
394
|
end
|
|
361
395
|
|
|
362
396
|
# The file listing the eras that should be running, one per line.
|
|
@@ -402,11 +436,10 @@ command "CheckEra" do
|
|
|
402
436
|
role "Operator"
|
|
403
437
|
goal "Ask a running host which era it reports, and keep whether it is one that should be running"
|
|
404
438
|
|
|
405
|
-
attribute :host, Address
|
|
439
|
+
attribute :host, Address, sets: true
|
|
406
440
|
attribute :expected, ExpectedFile
|
|
407
441
|
attribute :timeout, Seconds, default: 10
|
|
408
442
|
|
|
409
|
-
sets :host
|
|
410
443
|
sets :expected
|
|
411
444
|
sets :timeout
|
|
412
445
|
|
|
@@ -433,13 +466,10 @@ end
|
|
|
433
466
|
goal "Record the version and era a running host reported"
|
|
434
467
|
|
|
435
468
|
reference_to Host
|
|
436
|
-
attribute :era, EraId
|
|
437
|
-
attribute :version, VersionText
|
|
438
|
-
attribute :report, Report
|
|
469
|
+
attribute :era, EraId, sets: true
|
|
470
|
+
attribute :version, VersionText, sets: true
|
|
471
|
+
attribute :report, Report, sets: true
|
|
439
472
|
|
|
440
|
-
sets :era
|
|
441
|
-
sets :version
|
|
442
|
-
sets :report
|
|
443
473
|
|
|
444
474
|
emits EraObserved
|
|
445
475
|
end
|
|
@@ -450,13 +480,10 @@ end
|
|
|
450
480
|
goal "Record that a running host reports an era that should not be running"
|
|
451
481
|
|
|
452
482
|
reference_to Host
|
|
453
|
-
attribute :era, EraId
|
|
454
|
-
attribute :version, VersionText
|
|
455
|
-
attribute :report, Report
|
|
483
|
+
attribute :era, EraId, sets: true
|
|
484
|
+
attribute :version, VersionText, sets: true
|
|
485
|
+
attribute :report, Report, sets: true
|
|
456
486
|
|
|
457
|
-
sets :era
|
|
458
|
-
sets :version
|
|
459
|
-
sets :report
|
|
460
487
|
|
|
461
488
|
emits EraDrifted
|
|
462
489
|
end
|
|
@@ -466,9 +493,8 @@ end
|
|
|
466
493
|
goal "Record that the host could not be reached, or answered no era, and what was said"
|
|
467
494
|
|
|
468
495
|
reference_to Host
|
|
469
|
-
attribute :refusal, Report
|
|
496
|
+
attribute :refusal, Report, sets: true
|
|
470
497
|
|
|
471
|
-
sets :refusal
|
|
472
498
|
|
|
473
499
|
emits HostLost
|
|
474
500
|
end
|
|
@@ -489,12 +515,12 @@ end
|
|
|
489
515
|
|
|
490
516
|
policy "FetchWhenChecked" do
|
|
491
517
|
on "Host.EraCheckRequested"
|
|
492
|
-
|
|
518
|
+
ask :fetch, with: { host: :host }
|
|
493
519
|
end
|
|
494
520
|
|
|
495
521
|
policy "FetchWhenRechecked" do
|
|
496
522
|
on "Host.EraRecheckRequested"
|
|
497
|
-
|
|
523
|
+
ask :fetch, with: { host: :host }
|
|
498
524
|
end
|
|
499
525
|
|
|
500
526
|
policy "RecordTheEra" do
|
|
@@ -514,9 +540,405 @@ policy "RecordTheEra" do
|
|
|
514
540
|
trigger Host::Lose, with: { refusal: :refusal }
|
|
515
541
|
end
|
|
516
542
|
|
|
543
|
+
# Many agents finish together and each would push, running every pre-push check at once. A
|
|
544
|
+
# boarding waits its turn behind the push in flight from the same repository, then pushes the
|
|
545
|
+
# local branch with whatever else has landed on it, or finds an earlier push already carried it.
|
|
546
|
+
aggregate "PushTrain" do
|
|
547
|
+
description "One push of a checkout's branch, taken in turn: carried by an earlier push, pushed, or refused."
|
|
548
|
+
|
|
549
|
+
attribute :run, RunKey
|
|
550
|
+
attribute :branch, Word, optional: true
|
|
551
|
+
attribute :remote, Word, optional: true
|
|
552
|
+
attribute :checkout, Word, optional: true
|
|
553
|
+
attribute :full_gate, Switch, optional: true
|
|
554
|
+
attribute :boarded, Word, optional: true
|
|
555
|
+
attribute :pushed, Word, optional: true
|
|
556
|
+
attribute :report, Report, optional: true
|
|
557
|
+
attribute :refusal, Report, optional: true
|
|
558
|
+
identified_by :run
|
|
559
|
+
|
|
560
|
+
value_object "RunKey" do
|
|
561
|
+
attribute :value, String, matches: :present
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
# A branch, a remote, a directory or a commit.
|
|
565
|
+
value_object "Word" do
|
|
566
|
+
attribute :value, String, matches: :present
|
|
567
|
+
end
|
|
568
|
+
|
|
569
|
+
value_object "Report" do
|
|
570
|
+
attribute :value, String
|
|
571
|
+
end
|
|
572
|
+
|
|
573
|
+
value_object "Switch" do
|
|
574
|
+
attribute :value, Boolean
|
|
575
|
+
end
|
|
576
|
+
|
|
577
|
+
lifecycle :status, default: "requested" do
|
|
578
|
+
mark :failure, "faulted"
|
|
579
|
+
transition "Push" => "pushed", from: "requested"
|
|
580
|
+
transition "Ride" => "carried", from: "requested"
|
|
581
|
+
transition "Fault" => "faulted", from: "requested"
|
|
582
|
+
transition "Summarize" => "surveyed", from: "requested"
|
|
583
|
+
mark :terminal, "carried", "faulted", "pushed", "surveyed"
|
|
584
|
+
end
|
|
585
|
+
|
|
586
|
+
command "Board" do
|
|
587
|
+
role "Operator"
|
|
588
|
+
goal "Push this checkout's branch once the push ahead of it lands, unless that push already carried it"
|
|
589
|
+
|
|
590
|
+
attribute :run, RunKey, sets: true
|
|
591
|
+
attribute :branch, Word, default: "main", sets: true
|
|
592
|
+
attribute :remote, Word, default: "origin", sets: true
|
|
593
|
+
attribute :checkout, Word, optional: true, sets: true
|
|
594
|
+
# Run the whole `pre_push` stage, the suite included, which also writes the CI attestation
|
|
595
|
+
# note; without it the push runs only the `unguarded_push` stage.
|
|
596
|
+
attribute :full_gate, Switch, optional: true, sets: true
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
emits BoardingRequested
|
|
600
|
+
end
|
|
601
|
+
|
|
602
|
+
# A survey pushes nothing: it lists every checkout under a directory (`checkout`) whose branch
|
|
603
|
+
# has commits its remote does not, so what waits to board is known before anything boards.
|
|
604
|
+
command "Survey" do
|
|
605
|
+
role "Operator"
|
|
606
|
+
goal "List every checkout under a directory whose branch has commits its remote does not"
|
|
607
|
+
|
|
608
|
+
attribute :run, RunKey, sets: true
|
|
609
|
+
attribute :remote, Word, default: "origin", sets: true
|
|
610
|
+
attribute :checkout, Word, optional: true, sets: true
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
emits SurveyRequested
|
|
614
|
+
end
|
|
615
|
+
|
|
616
|
+
command "Summarize" do
|
|
617
|
+
role "System"
|
|
618
|
+
goal "Record what a survey found waiting to push"
|
|
619
|
+
|
|
620
|
+
reference_to PushTrain
|
|
621
|
+
attribute :report, Report, sets: true
|
|
622
|
+
|
|
623
|
+
|
|
624
|
+
emits CheckoutsSurveyed
|
|
625
|
+
end
|
|
626
|
+
|
|
627
|
+
# The branch was pushed: every commit on it reached the remote, what this boarding carried and
|
|
628
|
+
# whatever landed on it while it waited.
|
|
629
|
+
command "Push" do
|
|
630
|
+
role "System"
|
|
631
|
+
goal "Record the commit a boarding pushed"
|
|
632
|
+
|
|
633
|
+
reference_to PushTrain
|
|
634
|
+
attribute :checkout, Word, sets: true
|
|
635
|
+
attribute :boarded, Word, sets: true
|
|
636
|
+
attribute :pushed, Word, sets: true
|
|
637
|
+
attribute :report, Report, sets: true
|
|
638
|
+
|
|
639
|
+
|
|
640
|
+
emits BranchPushed
|
|
641
|
+
end
|
|
642
|
+
|
|
643
|
+
# An earlier push already took the boarded commit to the remote, so this one pushed nothing.
|
|
644
|
+
command "Ride" do
|
|
645
|
+
role "System"
|
|
646
|
+
goal "Record that an earlier push already carried the boarded commit"
|
|
647
|
+
|
|
648
|
+
reference_to PushTrain
|
|
649
|
+
attribute :checkout, Word, sets: true
|
|
650
|
+
attribute :boarded, Word, sets: true
|
|
651
|
+
attribute :report, Report, sets: true
|
|
652
|
+
|
|
653
|
+
|
|
654
|
+
emits CarriedByEarlierPush
|
|
655
|
+
end
|
|
656
|
+
|
|
657
|
+
command "Fault" do
|
|
658
|
+
role "System"
|
|
659
|
+
goal "Record why a boarding could not push"
|
|
660
|
+
|
|
661
|
+
reference_to PushTrain
|
|
662
|
+
attribute :refusal, Report, sets: true
|
|
663
|
+
|
|
664
|
+
|
|
665
|
+
emits PushFaulted
|
|
666
|
+
end
|
|
667
|
+
|
|
668
|
+
query "Outcome" do
|
|
669
|
+
description "How one boarding ended: pushed, carried by an earlier push, or why it failed."
|
|
670
|
+
attribute :run, RunKey
|
|
671
|
+
where(run: :run)
|
|
672
|
+
order_by :run
|
|
673
|
+
end
|
|
674
|
+
end
|
|
675
|
+
|
|
676
|
+
policy "CarryWhenBoarded" do
|
|
677
|
+
on "PushTrain.BoardingRequested"
|
|
678
|
+
ask :carry, with: { run: :run }
|
|
679
|
+
end
|
|
680
|
+
|
|
681
|
+
policy "RecordThePush" do
|
|
682
|
+
on "PushTrain.TrainAnswered"
|
|
683
|
+
where { outcome.value == "pushed" }
|
|
684
|
+
trigger PushTrain::Push, with: { checkout: :checkout, boarded: :boarded, pushed: :pushed, report: :report }
|
|
685
|
+
end
|
|
686
|
+
|
|
687
|
+
policy "RecordTheRide" do
|
|
688
|
+
on "PushTrain.TrainAnswered"
|
|
689
|
+
where { outcome.value == "carried" }
|
|
690
|
+
trigger PushTrain::Ride, with: { checkout: :checkout, boarded: :boarded, report: :report }
|
|
691
|
+
end
|
|
692
|
+
|
|
693
|
+
policy "RecordTheRefusedPush" do
|
|
694
|
+
on "PushTrain.TrainRefused"
|
|
695
|
+
trigger PushTrain::Fault, with: { refusal: :refusal }
|
|
696
|
+
end
|
|
697
|
+
|
|
698
|
+
policy "SurveyWhenAsked" do
|
|
699
|
+
on "PushTrain.SurveyRequested"
|
|
700
|
+
ask :tally, with: { run: :run }
|
|
701
|
+
end
|
|
702
|
+
|
|
703
|
+
policy "RecordTheSurvey" do
|
|
704
|
+
on "PushTrain.SurveyAnswered"
|
|
705
|
+
trigger PushTrain::Summarize, with: { report: :report }
|
|
706
|
+
end
|
|
707
|
+
|
|
708
|
+
policy "RecordTheRefusedSurvey" do
|
|
709
|
+
on "PushTrain.SurveyRefused"
|
|
710
|
+
trigger PushTrain::Fault, with: { refusal: :refusal }
|
|
711
|
+
end
|
|
712
|
+
|
|
713
|
+
# Deploys stay by hand: a push that reached the remote says a deploy is ready, and nothing more.
|
|
714
|
+
policy "AnnounceWhenPushed" do
|
|
715
|
+
on "PushTrain.BranchPushed"
|
|
716
|
+
ask :announce, with: { run: :run }
|
|
717
|
+
end
|
|
718
|
+
|
|
719
|
+
# A checkout's state, read and never written: nothing needs a raw `git status`, `git diff` or
|
|
720
|
+
# `git log`. The `Reading` port's adapter answers each query; the aggregate keeps no record.
|
|
721
|
+
aggregate "Checkout" do
|
|
722
|
+
description "A look at a checkout: its branch, what it changed and what it committed."
|
|
723
|
+
|
|
724
|
+
attribute :checkout, Place
|
|
725
|
+
identified_by :checkout
|
|
726
|
+
|
|
727
|
+
# A directory inside the repository; the current directory when a query names none.
|
|
728
|
+
value_object "Place" do
|
|
729
|
+
attribute :value, String, matches: :present
|
|
730
|
+
end
|
|
731
|
+
|
|
732
|
+
value_object "Word" do
|
|
733
|
+
attribute :value, String, matches: :present
|
|
734
|
+
end
|
|
735
|
+
|
|
736
|
+
value_object "Document" do
|
|
737
|
+
attribute :text, String
|
|
738
|
+
end
|
|
739
|
+
|
|
740
|
+
query "Status" do
|
|
741
|
+
description "The checkout's branch, whether it is a linked worktree, where it stands against main and origin/main, and what is changed or untracked."
|
|
742
|
+
attribute :checkout, Place, optional: true
|
|
743
|
+
returns Document
|
|
744
|
+
end
|
|
745
|
+
|
|
746
|
+
query "Changes" do
|
|
747
|
+
description "What the checkout changed since a ref (main by default): the diffstat, or the paths alone."
|
|
748
|
+
attribute :checkout, Place, optional: true
|
|
749
|
+
attribute :since, Word, optional: true
|
|
750
|
+
attribute :names_only, Boolean, optional: true
|
|
751
|
+
returns Document
|
|
752
|
+
end
|
|
753
|
+
|
|
754
|
+
query "Log" do
|
|
755
|
+
description "The commits in a range, newest first (the last 20 when none is named)."
|
|
756
|
+
attribute :checkout, Place, optional: true
|
|
757
|
+
attribute :range, Word, optional: true
|
|
758
|
+
returns Document
|
|
759
|
+
end
|
|
760
|
+
|
|
761
|
+
query "Settings" do
|
|
762
|
+
description "What this copy resolves for each setting that can come from a variable, its own world or a default, and which one supplied it."
|
|
763
|
+
attribute :domain, Place, optional: true
|
|
764
|
+
returns Document
|
|
765
|
+
end
|
|
766
|
+
end
|
|
767
|
+
|
|
768
|
+
# Agents merge straight to local main and clean up what they merged. A landing merges a worktree's
|
|
769
|
+
# branch onto main, fast-forward first and as a merge commit when main moved; a conflict is
|
|
770
|
+
# reported and never settled, and nothing is forced or pushed. A retirement removes the worktree
|
|
771
|
+
# and its branch once the branch is on main, and refuses while it holds uncommitted work or
|
|
772
|
+
# commits main lacks, so no unpushed work is deleted.
|
|
773
|
+
aggregate "Landing" do
|
|
774
|
+
description "One branch landed on local main, or one worktree retired: done, or refused with the reason."
|
|
775
|
+
|
|
776
|
+
attribute :run, RunKey
|
|
777
|
+
attribute :checkout, Word, optional: true
|
|
778
|
+
attribute :branch, Word, optional: true
|
|
779
|
+
attribute :onto, Word, optional: true
|
|
780
|
+
attribute :landed, Word, optional: true
|
|
781
|
+
attribute :report, Report, optional: true
|
|
782
|
+
attribute :refusal, Report, optional: true
|
|
783
|
+
identified_by :run
|
|
784
|
+
|
|
785
|
+
value_object "RunKey" do
|
|
786
|
+
attribute :value, String, matches: :present
|
|
787
|
+
end
|
|
788
|
+
|
|
789
|
+
# A branch, a directory or a commit.
|
|
790
|
+
value_object "Word" do
|
|
791
|
+
attribute :value, String, matches: :present
|
|
792
|
+
end
|
|
793
|
+
|
|
794
|
+
value_object "Report" do
|
|
795
|
+
attribute :value, String
|
|
796
|
+
end
|
|
797
|
+
|
|
798
|
+
value_object "Document" do
|
|
799
|
+
attribute :text, String
|
|
800
|
+
end
|
|
801
|
+
|
|
802
|
+
lifecycle :status, default: "requested" do
|
|
803
|
+
mark :failure, "refused"
|
|
804
|
+
transition "Record" => "landed", from: "requested"
|
|
805
|
+
transition "Clear" => "retired", from: "requested"
|
|
806
|
+
transition "Refuse" => "refused", from: "requested"
|
|
807
|
+
transition "Decline" => "refused", from: "requested"
|
|
808
|
+
mark :terminal, "landed", "refused", "retired"
|
|
809
|
+
end
|
|
810
|
+
|
|
811
|
+
command "Land" do
|
|
812
|
+
role "Operator"
|
|
813
|
+
goal "Merge a worktree's branch onto local main: fast-forward when it can be, a merge commit when main moved, never forced, never pushed"
|
|
814
|
+
|
|
815
|
+
attribute :run, RunKey, sets: true
|
|
816
|
+
attribute :checkout, Word, optional: true, sets: true
|
|
817
|
+
attribute :branch, Word, optional: true, sets: true
|
|
818
|
+
attribute :onto, Word, default: "main", sets: true
|
|
819
|
+
|
|
820
|
+
|
|
821
|
+
emits LandingRequested
|
|
822
|
+
end
|
|
823
|
+
|
|
824
|
+
command "Record" do
|
|
825
|
+
role "System"
|
|
826
|
+
goal "Record the commit main names once the branch is on it"
|
|
827
|
+
|
|
828
|
+
reference_to Landing
|
|
829
|
+
attribute :branch, Word, sets: true
|
|
830
|
+
attribute :landed, Word, sets: true
|
|
831
|
+
attribute :report, Report, sets: true
|
|
832
|
+
|
|
833
|
+
|
|
834
|
+
emits BranchLanded
|
|
835
|
+
end
|
|
836
|
+
|
|
837
|
+
command "Refuse" do
|
|
838
|
+
role "System"
|
|
839
|
+
goal "Record why a branch could not be landed"
|
|
840
|
+
|
|
841
|
+
reference_to Landing
|
|
842
|
+
attribute :refusal, Report, sets: true
|
|
843
|
+
|
|
844
|
+
|
|
845
|
+
emits LandingRefused
|
|
846
|
+
end
|
|
847
|
+
|
|
848
|
+
command "Retire" do
|
|
849
|
+
role "Operator"
|
|
850
|
+
goal "Remove a merged worktree and delete its branch, unless it holds uncommitted work or commits main lacks"
|
|
851
|
+
|
|
852
|
+
attribute :run, RunKey, sets: true
|
|
853
|
+
attribute :checkout, Word, optional: true, sets: true
|
|
854
|
+
attribute :branch, Word, optional: true, sets: true
|
|
855
|
+
attribute :onto, Word, default: "main", sets: true
|
|
856
|
+
|
|
857
|
+
|
|
858
|
+
emits RetirementRequested
|
|
859
|
+
end
|
|
860
|
+
|
|
861
|
+
command "Clear" do
|
|
862
|
+
role "System"
|
|
863
|
+
goal "Record that the worktree and its branch are gone"
|
|
864
|
+
|
|
865
|
+
reference_to Landing
|
|
866
|
+
attribute :branch, Word, sets: true
|
|
867
|
+
attribute :report, Report, sets: true
|
|
868
|
+
|
|
869
|
+
|
|
870
|
+
emits WorktreeRetired
|
|
871
|
+
end
|
|
872
|
+
|
|
873
|
+
command "Decline" do
|
|
874
|
+
role "System"
|
|
875
|
+
goal "Record why a worktree was kept"
|
|
876
|
+
|
|
877
|
+
reference_to Landing
|
|
878
|
+
attribute :refusal, Report, sets: true
|
|
879
|
+
|
|
880
|
+
|
|
881
|
+
emits RetirementDeclined
|
|
882
|
+
end
|
|
883
|
+
|
|
884
|
+
query "Outcome" do
|
|
885
|
+
description "How one landing or retirement ended: the commit main names, or why it was refused."
|
|
886
|
+
attribute :run, RunKey
|
|
887
|
+
where(run: :run)
|
|
888
|
+
order_by :run
|
|
889
|
+
end
|
|
890
|
+
|
|
891
|
+
query "Unlanded" do
|
|
892
|
+
description "Every branch with commits that are not on main, or with uncommitted work, and where its worktree is."
|
|
893
|
+
attribute :checkout, Word, optional: true
|
|
894
|
+
attribute :onto, Word, optional: true
|
|
895
|
+
returns Document
|
|
896
|
+
end
|
|
897
|
+
end
|
|
898
|
+
|
|
899
|
+
policy "MergeWhenLanding" do
|
|
900
|
+
on "Landing.LandingRequested"
|
|
901
|
+
ask :merge, with: { run: :run }
|
|
902
|
+
end
|
|
903
|
+
|
|
904
|
+
policy "RecordTheLanding" do
|
|
905
|
+
on "Landing.MergeAnswered"
|
|
906
|
+
trigger Landing::Record, with: { branch: :branch, landed: :landed, report: :report }
|
|
907
|
+
end
|
|
908
|
+
|
|
909
|
+
policy "RecordTheRefusedLanding" do
|
|
910
|
+
on "Landing.MergeRefused"
|
|
911
|
+
trigger Landing::Refuse, with: { refusal: :refusal }
|
|
912
|
+
end
|
|
913
|
+
|
|
914
|
+
policy "RemoveWhenRetiring" do
|
|
915
|
+
on "Landing.RetirementRequested"
|
|
916
|
+
ask :remove, with: { run: :run }
|
|
917
|
+
end
|
|
918
|
+
|
|
919
|
+
policy "RecordTheRetirement" do
|
|
920
|
+
on "Landing.RemovalAnswered"
|
|
921
|
+
trigger Landing::Clear, with: { branch: :branch, report: :report }
|
|
922
|
+
end
|
|
923
|
+
|
|
924
|
+
policy "RecordTheKeptWorktree" do
|
|
925
|
+
on "Landing.RemovalRefused"
|
|
926
|
+
trigger Landing::Decline, with: { refusal: :refusal }
|
|
927
|
+
end
|
|
928
|
+
|
|
929
|
+
# The copy of Hecks that runs the train follows what it pushed, so the next boarding and the
|
|
930
|
+
# records it keeps run the code that landed, not the code that was there when it was set up.
|
|
931
|
+
policy "KeepTheLauncherCurrent" do
|
|
932
|
+
on "PushTrain.BranchPushed"
|
|
933
|
+
ask :refresh, with: { run: :run }
|
|
934
|
+
end
|
|
935
|
+
|
|
517
936
|
aggregate "Era" do
|
|
518
937
|
description "One change to a domain's journal of eras, and how it ended: a store's upkeep."
|
|
519
938
|
|
|
939
|
+
acknowledges :key_by_value, "the domain's path, and Introspection declares queries only, so it holds no records and a reference would be refused on every write",
|
|
940
|
+
of: :domain
|
|
941
|
+
|
|
520
942
|
attribute :run, RunKey
|
|
521
943
|
attribute :domain, DomainPath
|
|
522
944
|
attribute :operation, OperationName, optional: true
|
|
@@ -586,6 +1008,7 @@ policy "RecordTheEra" do
|
|
|
586
1008
|
transition "Permit" => "admitted", from: "requested"
|
|
587
1009
|
transition "Settle" => "settled", from: "admitted"
|
|
588
1010
|
transition "Abandon" => "refused", from: %w[requested admitted]
|
|
1011
|
+
mark :terminal, "refused", "settled"
|
|
589
1012
|
end
|
|
590
1013
|
|
|
591
1014
|
# The seven requests. Each records what was asked and names its operation; the journal store
|
|
@@ -596,15 +1019,12 @@ policy "RecordTheEra" do
|
|
|
596
1019
|
role "Operator"
|
|
597
1020
|
goal "Hold the first era of a domain that holds none, as its first boot would"
|
|
598
1021
|
|
|
599
|
-
attribute :domain, DomainPath
|
|
600
|
-
attribute :run, RunKey
|
|
601
|
-
attribute :confirm, Switch, optional: true
|
|
1022
|
+
attribute :domain, DomainPath, sets: true
|
|
1023
|
+
attribute :run, RunKey, sets: true
|
|
1024
|
+
attribute :confirm, Switch, optional: true, sets: true
|
|
602
1025
|
|
|
603
1026
|
given("holding the first era is confirmed") { confirm.value == true }
|
|
604
1027
|
|
|
605
|
-
sets :domain
|
|
606
|
-
sets :run
|
|
607
|
-
sets :confirm
|
|
608
1028
|
sets :operation, to: "hold_first"
|
|
609
1029
|
|
|
610
1030
|
emits FirstEraRequested
|
|
@@ -614,17 +1034,13 @@ policy "RecordTheEra" do
|
|
|
614
1034
|
role "Operator"
|
|
615
1035
|
goal "Interleave the old world's writes since the cut into the live head, by their ordinals"
|
|
616
1036
|
|
|
617
|
-
attribute :domain, DomainPath
|
|
618
|
-
attribute :run, RunKey
|
|
619
|
-
attribute :winners, WinnerList, optional: true
|
|
620
|
-
attribute :confirm, Switch, optional: true
|
|
1037
|
+
attribute :domain, DomainPath, sets: true
|
|
1038
|
+
attribute :run, RunKey, sets: true
|
|
1039
|
+
attribute :winners, WinnerList, optional: true, sets: true
|
|
1040
|
+
attribute :confirm, Switch, optional: true, sets: true
|
|
621
1041
|
|
|
622
1042
|
given("the merge is confirmed") { confirm.value == true }
|
|
623
1043
|
|
|
624
|
-
sets :domain
|
|
625
|
-
sets :run
|
|
626
|
-
sets :winners
|
|
627
|
-
sets :confirm
|
|
628
1044
|
sets :operation, to: "merge_tail"
|
|
629
1045
|
|
|
630
1046
|
emits TailMergeRequested
|
|
@@ -634,17 +1050,13 @@ policy "RecordTheEra" do
|
|
|
634
1050
|
role "Operator"
|
|
635
1051
|
goal "Freeze an era's held text as it now stands, after a person has read it"
|
|
636
1052
|
|
|
637
|
-
attribute :domain, DomainPath
|
|
638
|
-
attribute :era, Ordinal
|
|
639
|
-
attribute :run, RunKey
|
|
640
|
-
attribute :confirm, Switch, optional: true
|
|
1053
|
+
attribute :domain, DomainPath, sets: true
|
|
1054
|
+
attribute :era, Ordinal, sets: true
|
|
1055
|
+
attribute :run, RunKey, sets: true
|
|
1056
|
+
attribute :confirm, Switch, optional: true, sets: true
|
|
641
1057
|
|
|
642
1058
|
given("the text is accepted as the era's own") { confirm.value == true }
|
|
643
1059
|
|
|
644
|
-
sets :domain
|
|
645
|
-
sets :era
|
|
646
|
-
sets :run
|
|
647
|
-
sets :confirm
|
|
648
1060
|
sets :operation, to: "reattest"
|
|
649
1061
|
|
|
650
1062
|
emits ReattestRequested
|
|
@@ -654,11 +1066,9 @@ policy "RecordTheEra" do
|
|
|
654
1066
|
role "Operator"
|
|
655
1067
|
goal "Store the shape every held era froze with, for the eras that predate it"
|
|
656
1068
|
|
|
657
|
-
attribute :domain, DomainPath
|
|
658
|
-
attribute :run, RunKey
|
|
1069
|
+
attribute :domain, DomainPath, sets: true
|
|
1070
|
+
attribute :run, RunKey, sets: true
|
|
659
1071
|
|
|
660
|
-
sets :domain
|
|
661
|
-
sets :run
|
|
662
1072
|
sets :operation, to: "backfill_projections"
|
|
663
1073
|
|
|
664
1074
|
emits BackfillRequested
|
|
@@ -668,17 +1078,13 @@ policy "RecordTheEra" do
|
|
|
668
1078
|
role "Operator"
|
|
669
1079
|
goal "Delete the journal entries a Postgres or Sqlite aggregate has already projected"
|
|
670
1080
|
|
|
671
|
-
attribute :domain, DomainPath
|
|
672
|
-
attribute :aggregates, AggregateList, optional: true
|
|
673
|
-
attribute :run, RunKey
|
|
674
|
-
attribute :confirm, Switch, optional: true
|
|
1081
|
+
attribute :domain, DomainPath, sets: true
|
|
1082
|
+
attribute :aggregates, AggregateList, optional: true, sets: true
|
|
1083
|
+
attribute :run, RunKey, sets: true
|
|
1084
|
+
attribute :confirm, Switch, optional: true, sets: true
|
|
675
1085
|
|
|
676
1086
|
given("the compaction is confirmed") { confirm.value == true }
|
|
677
1087
|
|
|
678
|
-
sets :domain
|
|
679
|
-
sets :aggregates
|
|
680
|
-
sets :run
|
|
681
|
-
sets :confirm
|
|
682
1088
|
sets :operation, to: "compact"
|
|
683
1089
|
|
|
684
1090
|
emits CompactionRequested
|
|
@@ -688,17 +1094,13 @@ policy "RecordTheEra" do
|
|
|
688
1094
|
role "Operator"
|
|
689
1095
|
goal "Empty a Heki aggregate's journal, keeping the snapshot"
|
|
690
1096
|
|
|
691
|
-
attribute :domain, DomainPath
|
|
692
|
-
attribute :aggregates, AggregateList, optional: true
|
|
693
|
-
attribute :run, RunKey
|
|
694
|
-
attribute :confirm, Switch, optional: true
|
|
1097
|
+
attribute :domain, DomainPath, sets: true
|
|
1098
|
+
attribute :aggregates, AggregateList, optional: true, sets: true
|
|
1099
|
+
attribute :run, RunKey, sets: true
|
|
1100
|
+
attribute :confirm, Switch, optional: true, sets: true
|
|
695
1101
|
|
|
696
1102
|
given("the compaction is confirmed") { confirm.value == true }
|
|
697
1103
|
|
|
698
|
-
sets :domain
|
|
699
|
-
sets :aggregates
|
|
700
|
-
sets :run
|
|
701
|
-
sets :confirm
|
|
702
1104
|
sets :operation, to: "compact_heki"
|
|
703
1105
|
|
|
704
1106
|
emits HekiCompactionRequested
|
|
@@ -710,15 +1112,16 @@ policy "RecordTheEra" do
|
|
|
710
1112
|
goal "Let a change through only when what was found in the journal allows it"
|
|
711
1113
|
|
|
712
1114
|
reference_to Era
|
|
713
|
-
attribute :capable, Switch
|
|
714
|
-
attribute :held, Count
|
|
715
|
-
attribute :forks, Count
|
|
716
|
-
attribute :contested, Count
|
|
717
|
-
attribute :bound, Count
|
|
718
|
-
attribute :candidates, Count
|
|
719
|
-
attribute :drifted, Switch
|
|
720
|
-
attribute :loadable, Switch
|
|
721
|
-
attribute :shape_kept, Switch
|
|
1115
|
+
attribute :capable, Switch, sets: true
|
|
1116
|
+
attribute :held, Count, sets: true
|
|
1117
|
+
attribute :forks, Count, sets: true
|
|
1118
|
+
attribute :contested, Count, sets: true
|
|
1119
|
+
attribute :bound, Count, sets: true
|
|
1120
|
+
attribute :candidates, Count, sets: true
|
|
1121
|
+
attribute :drifted, Switch, sets: true
|
|
1122
|
+
attribute :loadable, Switch, sets: true
|
|
1123
|
+
attribute :shape_kept, Switch, sets: true
|
|
1124
|
+
attribute :operation, OperationName, sets: true
|
|
722
1125
|
|
|
723
1126
|
given("the store keeps eras") do
|
|
724
1127
|
capable.value || operation.value == "compact" || operation.value == "compact_heki"
|
|
@@ -747,15 +1150,6 @@ policy "RecordTheEra" do
|
|
|
747
1150
|
operation.value != "reattest" || shape_kept.value
|
|
748
1151
|
end
|
|
749
1152
|
|
|
750
|
-
sets :capable
|
|
751
|
-
sets :held
|
|
752
|
-
sets :forks
|
|
753
|
-
sets :contested
|
|
754
|
-
sets :bound
|
|
755
|
-
sets :candidates
|
|
756
|
-
sets :drifted
|
|
757
|
-
sets :loadable
|
|
758
|
-
sets :shape_kept
|
|
759
1153
|
|
|
760
1154
|
emits EraPermitted
|
|
761
1155
|
end
|
|
@@ -765,9 +1159,8 @@ policy "RecordTheEra" do
|
|
|
765
1159
|
goal "Record that the admitted change was made, and what it did"
|
|
766
1160
|
|
|
767
1161
|
reference_to Era
|
|
768
|
-
attribute :report, Report
|
|
1162
|
+
attribute :report, Report, sets: true
|
|
769
1163
|
|
|
770
|
-
sets :report
|
|
771
1164
|
|
|
772
1165
|
emits EraSettled
|
|
773
1166
|
end
|
|
@@ -777,9 +1170,8 @@ policy "RecordTheEra" do
|
|
|
777
1170
|
goal "Record that the change was refused, or could not be made, and why"
|
|
778
1171
|
|
|
779
1172
|
reference_to Era
|
|
780
|
-
attribute :refusal, Report
|
|
1173
|
+
attribute :refusal, Report, sets: true
|
|
781
1174
|
|
|
782
|
-
sets :refusal
|
|
783
1175
|
|
|
784
1176
|
emits EraAbandoned
|
|
785
1177
|
end
|
|
@@ -833,32 +1225,32 @@ policy "RecordTheEra" do
|
|
|
833
1225
|
|
|
834
1226
|
policy "ExamineWhenFirstEraRequested" do
|
|
835
1227
|
on "Era.FirstEraRequested"
|
|
836
|
-
|
|
1228
|
+
ask :examine, with: { run: :run }
|
|
837
1229
|
end
|
|
838
1230
|
|
|
839
1231
|
policy "ExamineWhenTailMergeRequested" do
|
|
840
1232
|
on "Era.TailMergeRequested"
|
|
841
|
-
|
|
1233
|
+
ask :examine, with: { run: :run }
|
|
842
1234
|
end
|
|
843
1235
|
|
|
844
1236
|
policy "ExamineWhenReattestRequested" do
|
|
845
1237
|
on "Era.ReattestRequested"
|
|
846
|
-
|
|
1238
|
+
ask :examine, with: { run: :run }
|
|
847
1239
|
end
|
|
848
1240
|
|
|
849
1241
|
policy "ExamineWhenBackfillRequested" do
|
|
850
1242
|
on "Era.BackfillRequested"
|
|
851
|
-
|
|
1243
|
+
ask :examine, with: { run: :run }
|
|
852
1244
|
end
|
|
853
1245
|
|
|
854
1246
|
policy "ExamineWhenCompactionRequested" do
|
|
855
1247
|
on "Era.CompactionRequested"
|
|
856
|
-
|
|
1248
|
+
ask :examine, with: { run: :run }
|
|
857
1249
|
end
|
|
858
1250
|
|
|
859
1251
|
policy "ExamineWhenHekiCompactionRequested" do
|
|
860
1252
|
on "Era.HekiCompactionRequested"
|
|
861
|
-
|
|
1253
|
+
ask :examine, with: { run: :run }
|
|
862
1254
|
end
|
|
863
1255
|
|
|
864
1256
|
policy "PermitWhenExamined" do
|
|
@@ -866,7 +1258,7 @@ policy "RecordTheEra" do
|
|
|
866
1258
|
trigger Era::Permit, with: {
|
|
867
1259
|
capable: :capable, held: :held, forks: :forks, contested: :contested,
|
|
868
1260
|
bound: :bound, candidates: :candidates,
|
|
869
|
-
drifted: :drifted, loadable: :loadable, shape_kept: :shape_kept
|
|
1261
|
+
drifted: :drifted, loadable: :loadable, shape_kept: :shape_kept, operation: :operation
|
|
870
1262
|
}
|
|
871
1263
|
end
|
|
872
1264
|
|
|
@@ -886,9 +1278,13 @@ policy "RecordTheEra" do
|
|
|
886
1278
|
trigger Era::Abandon, with: { refusal: "the journal's facts do not admit this change" }
|
|
887
1279
|
end
|
|
888
1280
|
|
|
1281
|
+
# A compaction waits for its seal (ledger.bluebook); every other change is applied at once.
|
|
889
1282
|
policy "ChangeWhenPermitted" do
|
|
890
1283
|
on "Era.EraPermitted"
|
|
891
|
-
|
|
1284
|
+
where do
|
|
1285
|
+
operation.value != "compact" && operation.value != "compact_heki"
|
|
1286
|
+
end
|
|
1287
|
+
ask :apply, with: { run: :run }
|
|
892
1288
|
end
|
|
893
1289
|
|
|
894
1290
|
policy "RecordTheChange" do
|