hecks 1.2.0 → 1.4.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/lib/hecks/adapters/driven/claude_code.rb +7 -7
- data/lib/hecks/adapters/driven/d1.rb +187 -23
- data/lib/hecks/adapters/driven/folder.rb +10 -10
- data/lib/hecks/adapters/driven/google_authentication.rb +8 -8
- data/lib/hecks/adapters/driven/governance_authorization.rb +31 -13
- data/lib/hecks/adapters/driven/heki/journal.rb +60 -2
- data/lib/hecks/adapters/driven/heki/saga_store.rb +5 -5
- data/lib/hecks/adapters/driven/heki.rb +13 -7
- data/lib/hecks/adapters/driven/identity_registry.rb +2 -2
- data/lib/hecks/adapters/driven/in_memory_ordering.rb +3 -3
- data/lib/hecks/adapters/driven/lambda/client.rb +34 -9
- data/lib/hecks/adapters/driven/lambda.rb +39 -33
- data/lib/hecks/adapters/driven/local_storage.rb +17 -10
- data/lib/hecks/adapters/driven/memory.rb +205 -9
- data/lib/hecks/adapters/driven/mock_stripe_adapter.rb +1 -1
- data/lib/hecks/adapters/driven/postgres/codec.rb +27 -11
- data/lib/hecks/adapters/driven/postgres/outbox.rb +40 -2
- data/lib/hecks/adapters/driven/postgres/reconnect.rb +23 -7
- data/lib/hecks/adapters/driven/postgres/schema_builder.rb +14 -14
- data/lib/hecks/adapters/driven/postgres.rb +175 -28
- data/lib/hecks/adapters/driven/postgres_era.adapter +5 -0
- data/lib/hecks/adapters/driven/prism.rb +4 -4
- data/lib/hecks/adapters/driven/sql_query_builder.rb +34 -22
- data/lib/hecks/adapters/driven/sqlite/codec.rb +38 -10
- data/lib/hecks/adapters/driven/sqlite/projection.rb +60 -32
- data/lib/hecks/adapters/driven/sqlite/schema_builder.rb +12 -12
- data/lib/hecks/adapters/driven/sqlite.rb +181 -21
- data/lib/hecks/adapters/driven.rb +4 -4
- data/lib/hecks/adapters/driving/github_webhook.rb +145 -0
- data/lib/hecks/behaviors/dsl.rb +2 -2
- data/lib/hecks/behaviors/expectations.rb +51 -23
- data/lib/hecks/behaviors/ir.rb +1 -1
- data/lib/hecks/behaviors/rspec.rb +1 -1
- data/lib/hecks/behaviors/runner.rb +2 -2
- data/lib/hecks/behaviors.rb +1 -1
- data/lib/hecks/bluebook/aggregate.rb +13 -13
- data/lib/hecks/bluebook/assembly/aggregate_assembly.rb +10 -10
- data/lib/hecks/bluebook/assembly/build.rb +1 -1
- data/lib/hecks/bluebook/assembly/contract.rb +39 -16
- data/lib/hecks/bluebook/assembly/contracts.rb +40 -38
- data/lib/hecks/bluebook/assembly/marks.rb +18 -18
- data/lib/hecks/bluebook/assembly/specializer.rb +19 -21
- data/lib/hecks/bluebook/assembly.rb +9 -9
- data/lib/hecks/bluebook/attribute.rb +9 -9
- data/lib/hecks/bluebook/behaviour/aggregate.rb +11 -11
- data/lib/hecks/bluebook/behaviour/attribute.rb +5 -5
- data/lib/hecks/bluebook/behaviour/chapter.rb +23 -5
- data/lib/hecks/bluebook/behaviour/command.rb +23 -23
- data/lib/hecks/bluebook/behaviour/domain_port.rb +27 -3
- data/lib/hecks/bluebook/behaviour/entity.rb +8 -8
- data/lib/hecks/bluebook/behaviour/hexagon.rb +4 -4
- data/lib/hecks/bluebook/behaviour/lifecycle.rb +5 -5
- data/lib/hecks/bluebook/behaviour/policy.rb +12 -12
- data/lib/hecks/bluebook/behaviour/process_manager.rb +7 -7
- data/lib/hecks/bluebook/behaviour/query.rb +1 -1
- data/lib/hecks/bluebook/behaviour/read_model.rb +8 -8
- data/lib/hecks/bluebook/behaviour/traits.rb +12 -12
- data/lib/hecks/bluebook/behaviour/value_object.rb +6 -6
- data/lib/hecks/bluebook/capabilities.rb +27 -0
- data/lib/hecks/bluebook/chapter.rb +28 -9
- data/lib/hecks/bluebook/command.rb +12 -12
- data/lib/hecks/bluebook/domain_port.rb +9 -9
- data/lib/hecks/bluebook/dsl/adapter_builder.rb +24 -0
- data/lib/hecks/bluebook/dsl/aggregate_builder/sealing.rb +49 -49
- data/lib/hecks/bluebook/dsl/aggregate_builder.rb +96 -96
- data/lib/hecks/bluebook/dsl/attribute_collector.rb +41 -41
- data/lib/hecks/bluebook/dsl/binding_proxy.rb +22 -2
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation.rb +111 -74
- data/lib/hecks/bluebook/dsl/bluebook_builder.rb +48 -30
- data/lib/hecks/bluebook/dsl/bootstrap_table.rb +116 -0
- data/lib/hecks/bluebook/dsl/command_builder.rb +103 -103
- data/lib/hecks/bluebook/dsl/const_shim.rb +46 -15
- data/lib/hecks/bluebook/dsl/domain_port_builder.rb +90 -25
- data/lib/hecks/bluebook/dsl/entity_builder.rb +56 -56
- data/lib/hecks/bluebook/dsl/generic_dispatch.rb +148 -132
- data/lib/hecks/bluebook/dsl/hecksagon_builder.rb +89 -30
- data/lib/hecks/bluebook/dsl/identity_declaration.rb +17 -17
- data/lib/hecks/bluebook/dsl/lifecycle_builder.rb +27 -4
- data/lib/hecks/bluebook/dsl/policy_builder.rb +30 -21
- data/lib/hecks/bluebook/dsl/port_builder.rb +38 -7
- data/lib/hecks/bluebook/dsl/port_operation_builder.rb +56 -22
- data/lib/hecks/bluebook/dsl/process_manager_builder.rb +35 -35
- data/lib/hecks/bluebook/dsl/query_builder.rb +5 -5
- data/lib/hecks/bluebook/dsl/read_model_builder.rb +34 -34
- data/lib/hecks/bluebook/dsl/rule_reference.rb +41 -39
- data/lib/hecks/bluebook/dsl/translation_builder.rb +9 -9
- data/lib/hecks/bluebook/dsl/value_object_builder.rb +16 -16
- data/lib/hecks/bluebook/dsl/word_gate.rb +59 -53
- data/lib/hecks/bluebook/dsl/world_builder.rb +51 -8
- data/lib/hecks/bluebook/entity.rb +11 -11
- data/lib/hecks/bluebook/expression/ast_json.rb +20 -20
- data/lib/hecks/bluebook/expression/ast_reader.rb +3 -3
- data/lib/hecks/bluebook/expression/canonical_form.rb +9 -9
- data/lib/hecks/bluebook/expression/evaluator.rb +18 -18
- data/lib/hecks/bluebook/expression/resolver/block_predicates.rb +18 -18
- data/lib/hecks/bluebook/expression/resolver.rb +60 -62
- data/lib/hecks/bluebook/hexagon.rb +1 -1
- data/lib/hecks/bluebook/lifecycle.rb +1 -1
- data/lib/hecks/bluebook/meta_validator/adapter_judge.rb +1 -1
- data/lib/hecks/bluebook/meta_validator/judge.rb +122 -86
- data/lib/hecks/bluebook/meta_validator/plan.rb +39 -39
- data/lib/hecks/bluebook/meta_validator/port_judge.rb +2 -2
- data/lib/hecks/bluebook/meta_validator/readings.rb +43 -43
- data/lib/hecks/bluebook/meta_validator/reconstruction.rb +44 -37
- data/lib/hecks/bluebook/meta_validator/shapes.rb +25 -21
- data/lib/hecks/bluebook/meta_validator/syntax_boot.rb +145 -31
- data/lib/hecks/bluebook/meta_validator/translation_judge.rb +6 -6
- data/lib/hecks/bluebook/meta_validator/world_judge.rb +5 -5
- data/lib/hecks/bluebook/meta_validator.rb +70 -70
- data/lib/hecks/bluebook/model_check.rb +301 -84
- data/lib/hecks/bluebook/pattern_subset.rb +9 -9
- data/lib/hecks/bluebook/policy.rb +15 -13
- data/lib/hecks/bluebook/process_manager.rb +14 -14
- data/lib/hecks/bluebook/project_register.rb +6 -6
- data/lib/hecks/bluebook/query.rb +4 -4
- data/lib/hecks/bluebook/read_model.rb +14 -14
- data/lib/hecks/bluebook/reference.rb +8 -8
- data/lib/hecks/bluebook/smoke_test.rb +19 -19
- data/lib/hecks/bluebook/synthesizer.rb +12 -12
- data/lib/hecks/bluebook/translation.rb +4 -4
- data/lib/hecks/bluebook/value_object.rb +6 -6
- data/lib/hecks/bluebook.rb +2 -2
- data/lib/hecks/codemod/legacy_dispatch_args.rb +299 -0
- data/lib/hecks/codemod/legacy_dispatch_recorder.rb +186 -0
- data/lib/hecks/codemod.rb +36 -35
- data/lib/hecks/construct.rb +6 -6
- data/lib/hecks/corpus.rb +317 -0
- data/lib/hecks/deprecation.rb +95 -0
- data/lib/hecks/doc/reference.rb +19 -19
- data/lib/hecks/embryonaut_bluebook.rb +11 -11
- data/lib/hecks/facade/cli_door.rb +69 -10
- data/lib/hecks/facade/cli_runner.rb +105 -24
- data/lib/hecks/facade/command_request.rb +23 -0
- data/lib/hecks/facade/handle.rb +79 -32
- data/lib/hecks/facade/json_door.rb +106 -25
- data/lib/hecks/facade/surface/aggregate_door.rb +42 -27
- data/lib/hecks/facade/surface/chapter.rb +26 -17
- data/lib/hecks/facade/surface.rb +16 -3
- data/lib/hecks/facade.rb +15 -4
- data/lib/hecks/forms/app.rb +46 -30
- data/lib/hecks/forms/command_form_renderer.rb +70 -9
- data/lib/hecks/forms/field_renderer.rb +142 -6
- data/lib/hecks/forms/field_shape.rb +183 -20
- data/lib/hecks/forms/html.rb +51 -7
- data/lib/hecks/forms/index_renderer.rb +14 -2
- data/lib/hecks/forms/params.rb +120 -23
- data/lib/hecks/forms/port_argument.rb +2 -2
- data/lib/hecks/forms/query_form_renderer.rb +2 -2
- data/lib/hecks/forms/record_renderer.rb +2 -2
- data/lib/hecks/forms/record_table.rb +1 -1
- data/lib/hecks/forms/value_object_shape.rb +3 -3
- data/lib/hecks/forms.rb +24 -4
- data/lib/hecks/fqn.rb +1 -1
- data/lib/hecks/framework/bluebook/governance.bluebook +9 -0
- data/lib/hecks/framework.rb +48 -17
- data/lib/hecks/freezer.rb +11 -11
- data/lib/hecks/fuzzing/bounded_exhaustive_expressions.rb +90 -90
- data/lib/hecks/fuzzing/combination_miner.rb +119 -0
- data/lib/hecks/fuzzing/concurrent_dispatch.rb +361 -0
- data/lib/hecks/fuzzing/coverage_campaign.rb +118 -0
- data/lib/hecks/fuzzing/differential.rb +158 -0
- data/lib/hecks/fuzzing/domain_generator.rb +694 -0
- data/lib/hecks/fuzzing/era_boundary.rb +124 -0
- data/lib/hecks/fuzzing/form_census.rb +199 -0
- data/lib/hecks/fuzzing/generated_domain_check.rb +95 -0
- data/lib/hecks/fuzzing/invalid_value_generator.rb +6 -6
- data/lib/hecks/fuzzing/isolated_boot.rb +226 -38
- data/lib/hecks/fuzzing/nondeterministic.rb +67 -0
- data/lib/hecks/fuzzing/persistence_parity.rb +161 -0
- data/lib/hecks/fuzzing/properties/corrections.rb +100 -0
- data/lib/hecks/fuzzing/properties/dispatch_and_mutations.rb +321 -41
- data/lib/hecks/fuzzing/properties/guards.rb +129 -26
- data/lib/hecks/fuzzing/properties/invariants_and_aggregation.rb +32 -32
- data/lib/hecks/fuzzing/properties/lifecycle_and_replay.rb +31 -11
- data/lib/hecks/fuzzing/properties/outbox.rb +142 -0
- data/lib/hecks/fuzzing/properties/querying.rb +17 -17
- data/lib/hecks/fuzzing/properties.rb +84 -39
- data/lib/hecks/fuzzing/qa_settings.rb +152 -0
- data/lib/hecks/fuzzing/replay.rb +224 -114
- data/lib/hecks/fuzzing/rotation_priority.rb +94 -0
- data/lib/hecks/fuzzing/rust_gap_manifest.rb +113 -0
- data/lib/hecks/fuzzing/self_consistency.rb +676 -0
- data/lib/hecks/fuzzing/sequence_generator/adversary.rb +526 -0
- data/lib/hecks/fuzzing/sequence_generator/catalog.rb +101 -30
- data/lib/hecks/fuzzing/sequence_generator/outcome_tracker.rb +55 -8
- data/lib/hecks/fuzzing/sequence_generator/picker.rb +31 -11
- data/lib/hecks/fuzzing/sequence_generator/step_builder.rb +123 -32
- data/lib/hecks/fuzzing/sequence_generator.rb +152 -31
- data/lib/hecks/fuzzing/shrinker.rb +197 -0
- data/lib/hecks/fuzzing/structural_skips.rb +39 -0
- data/lib/hecks/fuzzing/sweep_depth.rb +53 -0
- data/lib/hecks/fuzzing/target_capabilities.rb +180 -0
- data/lib/hecks/fuzzing/value_generator.rb +66 -14
- data/lib/hecks/fuzzing.rb +11 -0
- data/lib/hecks/grammar/evolve.rb +10 -10
- data/lib/hecks/grammar.rb +7 -7
- data/lib/hecks/ir.rb +13 -13
- data/lib/hecks/language/bluebook/bluebook.bluebook +41 -0
- data/lib/hecks/language/bluebook/policy.bluebook +11 -1
- data/lib/hecks/language/bluebook/vocabulary.bluebook +365 -15
- data/lib/hecks/language/oidc.json +5 -0
- data/lib/hecks/literal.rb +9 -9
- data/lib/hecks/naming.rb +89 -21
- data/lib/hecks/ports/access_control.rb +58 -2
- data/lib/hecks/ports/agent/answers.rb +83 -6
- data/lib/hecks/ports/agent.rb +119 -35
- data/lib/hecks/ports/authentication.rb +44 -4
- data/lib/hecks/ports/authorization.rb +53 -11
- data/lib/hecks/ports/clock.rb +42 -23
- data/lib/hecks/ports/extraction.rb +16 -0
- data/lib/hecks/ports/identity_assignment.rb +24 -2
- data/lib/hecks/ports/identity_generation.rb +17 -3
- data/lib/hecks/ports/identity_resolution.rb +18 -1
- data/lib/hecks/ports/loading.rb +4 -0
- data/lib/hecks/ports/persistence/append_only.rb +172 -8
- data/lib/hecks/ports/persistence/binding_policy.rb +34 -0
- data/lib/hecks/ports/persistence/codec_boundary.rb +178 -0
- data/lib/hecks/ports/persistence/execution.rb +4 -0
- data/lib/hecks/ports/persistence/null_saga_store.rb +12 -1
- data/lib/hecks/ports/persistence/plugin.rb +42 -4
- data/lib/hecks/ports/persistence/plugins/era/era_check.rb +218 -25
- data/lib/hecks/ports/persistence/plugins/era/era_guard/shape_diff.rb +77 -9
- data/lib/hecks/ports/persistence/plugins/era/era_guard.rb +81 -24
- data/lib/hecks/ports/persistence/plugins/era/era_tamper.rb +29 -18
- data/lib/hecks/ports/persistence/plugins/era/lineage.rb +144 -60
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/era_store.rb +103 -8
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/field_cache.rb +98 -23
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/head_compiler.rb +282 -109
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/mint_transaction.rb +63 -25
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/provisioning.rb +160 -58
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/resumable_backfill.rb +51 -28
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/tail_merge.rb +28 -5
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/transform_installer.rb +25 -12
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage.rb +129 -34
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/coverage_check.rb +51 -6
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/era_resolver.rb +44 -6
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/merge_coordinator.rb +16 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/minter.rb +57 -4
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager.rb +25 -2
- data/lib/hecks/ports/persistence/plugins/era/postgres_era.rb +338 -83
- data/lib/hecks/ports/persistence/plugins/era/storage_shape.rb +68 -10
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/approval_digest.rb +9 -3
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_one.rb +9 -2
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_two.rb +42 -8
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/unfed_report.rb +16 -1
- data/lib/hecks/ports/persistence/plugins/era/translation/audit.rb +36 -5
- data/lib/hecks/ports/persistence/plugins/era/translation/reattest.rb +23 -3
- data/lib/hecks/ports/persistence/plugins/era/translation/rule_compiler.rb +18 -19
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/differ.rb +5 -5
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/writer.rb +1 -1
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold.rb +2 -2
- data/lib/hecks/ports/persistence/plugins/era.rb +12 -2
- data/lib/hecks/ports/persistence/remote_runtime.rb +9 -2
- data/lib/hecks/ports/persistence/repository_factory.rb +29 -6
- data/lib/hecks/ports/persistence/state_codec.rb +319 -0
- data/lib/hecks/ports/persistence.rb +36 -1
- data/lib/hecks/ports/projection.rb +61 -7
- data/lib/hecks/ports/query/in_memory.rb +3 -3
- data/lib/hecks/ports/query/ordering.rb +6 -6
- data/lib/hecks/ports/query.rb +35 -0
- data/lib/hecks/projections/bootstrap_table.rb +112 -0
- data/lib/hecks/projections/diagrams.rb +75 -75
- data/lib/hecks/projections/glossary/html.rb +250 -0
- data/lib/hecks/projections/glossary/markdown.rb +105 -0
- data/lib/hecks/projections/glossary/mermaid.rb +110 -0
- data/lib/hecks/projections/glossary/page.css +271 -0
- data/lib/hecks/projections/glossary/page.js +72 -0
- data/lib/hecks/projections/glossary/sections.rb +17 -0
- data/lib/hecks/projections/glossary/sentences.rb +205 -0
- data/lib/hecks/projections/glossary.rb +214 -286
- data/lib/hecks/projections/ir.rb +1 -1
- data/lib/hecks/projections/model/deviations.rb +18 -17
- data/lib/hecks/projections/model.rb +25 -21
- data/lib/hecks/projections/oidc.rb +7 -7
- data/lib/hecks/projections/parser_table.rb +5 -5
- data/lib/hecks/projections/reference.rb +3 -3
- data/lib/hecks/projections/rust_vocabulary.rb +443 -0
- data/lib/hecks/projections/shape.rb +2 -2
- data/lib/hecks/projections/statements.rb +11 -11
- data/lib/hecks/projections/vocabulary.rb +9 -9
- data/lib/hecks/projections.rb +5 -3
- data/lib/hecks/projector/cli_projector.rb +29 -29
- data/lib/hecks/projector/docs_projector.rb +13 -13
- data/lib/hecks/projector/exporter.rb +42 -21
- data/lib/hecks/projector/ir_projector.rb +1 -1
- data/lib/hecks/projector/narrate_projector.rb +15 -22
- data/lib/hecks/projector/target.rb +13 -13
- data/lib/hecks/projector.rb +15 -15
- data/lib/hecks/query_ir.rb +47 -47
- data/lib/hecks/query_specification/common/comparators.rb +19 -3
- data/lib/hecks/query_specification/common/comparison.rb +132 -24
- data/lib/hecks/query_specification/common/dsl.rb +65 -9
- data/lib/hecks/query_specification/common/null_policy.rb +57 -13
- data/lib/hecks/query_specification/common/null_semantics.rb +4 -0
- data/lib/hecks/query_specification/common/options.rb +25 -0
- data/lib/hecks/query_specification/field_path.rb +69 -15
- data/lib/hecks/query_specification/hop_path.rb +57 -20
- data/lib/hecks/query_specification/read_model/specification.rb +4 -0
- data/lib/hecks/rendering.rb +3 -3
- data/lib/hecks/router/namespace_installer.rb +3 -3
- data/lib/hecks/router.rb +1 -1
- data/lib/hecks/runtime/aggregate_lock.rb +11 -11
- data/lib/hecks/runtime/boot_gates.rb +3 -3
- data/lib/hecks/runtime/caller.rb +8 -8
- data/lib/hecks/runtime/capability_graph.rb +2 -2
- data/lib/hecks/runtime/command_interpreter/argument_gate.rb +22 -25
- data/lib/hecks/runtime/command_interpreter/mutation_applier.rb +64 -67
- data/lib/hecks/runtime/command_interpreter.rb +159 -102
- data/lib/hecks/runtime/command_rules/admissibility.rb +69 -69
- data/lib/hecks/runtime/command_rules/arithmetic.rb +137 -91
- data/lib/hecks/runtime/command_rules/authorization.rb +38 -17
- data/lib/hecks/runtime/command_rules/emission.rb +18 -1
- data/lib/hecks/runtime/command_rules/references.rb +94 -19
- data/lib/hecks/runtime/command_rules.rb +3 -0
- data/lib/hecks/runtime/dependency_planning.rb +11 -11
- data/lib/hecks/runtime/dispatcher.rb +283 -90
- data/lib/hecks/runtime/entity_element.rb +282 -46
- data/lib/hecks/runtime/entity_interpreter.rb +160 -69
- data/lib/hecks/runtime/errors.rb +19 -19
- data/lib/hecks/runtime/event.rb +6 -6
- data/lib/hecks/runtime/identity.rb +22 -22
- data/lib/hecks/runtime/instance.rb +39 -14
- data/lib/hecks/runtime/interpreting.rb +12 -12
- data/lib/hecks/runtime/invocation.rb +276 -0
- data/lib/hecks/runtime/loader.rb +14 -14
- data/lib/hecks/runtime/outbox.rb +23 -23
- data/lib/hecks/runtime/policy_interpreter.rb +54 -54
- data/lib/hecks/runtime/port_operation_interpreter.rb +22 -19
- data/lib/hecks/runtime/query_interpreter.rb +111 -56
- data/lib/hecks/runtime/reaction_invocation.rb +76 -9
- data/lib/hecks/runtime/read_model_interpreter.rb +40 -40
- data/lib/hecks/runtime/rebuild_sweep.rb +4 -4
- data/lib/hecks/runtime/reference_hop.rb +6 -6
- data/lib/hecks/runtime/refusal_wording.rb +92 -112
- data/lib/hecks/runtime/registry/saga_persistence.rb +21 -21
- data/lib/hecks/runtime/registry/verification.rb +36 -26
- data/lib/hecks/runtime/registry.rb +56 -27
- data/lib/hecks/runtime/remote_dispatcher.rb +38 -23
- data/lib/hecks/runtime/routing.rb +10 -88
- data/lib/hecks/runtime/saga_interpreter/correlation.rb +17 -17
- data/lib/hecks/runtime/saga_interpreter.rb +93 -56
- data/lib/hecks/runtime/saga_pending_dispatch.rb +12 -12
- data/lib/hecks/runtime/tenant_check.rb +9 -9
- data/lib/hecks/runtime/tenant_scope.rb +5 -5
- data/lib/hecks/runtime/value/admission.rb +75 -30
- data/lib/hecks/runtime/value/coercion.rb +379 -226
- data/lib/hecks/runtime/value/entity_list_coercion.rb +248 -0
- data/lib/hecks/runtime/value.rb +28 -23
- data/lib/hecks/runtime.rb +7 -7
- data/lib/hecks/storehouse.rb +64 -64
- data/lib/hecks/version.rb +3 -3
- data/lib/hecks/vocabulary.rb +207 -5
- data/lib/hecks.rb +13 -11
- data/lib/rubocop/cop/hecks/fallback_hash_lookup.rb +11 -11
- data/lib/rubocop/cop/hecks/sequential_hash_rename_in_loop.rb +14 -12
- data/lib/rubocop/cop/hecks/thread_shared_ivar_mutation.rb +11 -11
- metadata +43 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module RuboCop
|
|
2
2
|
module Cop
|
|
3
3
|
module Hecks
|
|
4
|
-
#
|
|
4
|
+
# Flags plain `@ivar` mutation inside a class this codebase already
|
|
5
5
|
# knows is a thread-shared singleton — one `Dispatcher`/`Registry`
|
|
6
6
|
# instance lives for the life of a boot and is dispatched through
|
|
7
7
|
# from every thread of a Puma worker pool (or any other multi-
|
|
@@ -9,29 +9,29 @@ module RuboCop
|
|
|
9
9
|
# shared, mutable state with no per-thread or mutex-guarded
|
|
10
10
|
# isolation at all.
|
|
11
11
|
#
|
|
12
|
-
#
|
|
12
|
+
# This is the mechanical follow-up to a real bug already fixed here
|
|
13
13
|
# (see `dispatcher.rb`'s own `#reenter` comment, and
|
|
14
14
|
# `spec/runtime/dispatcher_spec.rb`): `@reaction_depth` used to be a
|
|
15
15
|
# plain ivar on `Dispatcher`, so two threads' concurrent top-level
|
|
16
16
|
# dispatches corrupted each other's view of "how deep into a
|
|
17
17
|
# reaction cascade am I". The fix moved that one ivar to
|
|
18
18
|
# `Thread.current[:hecks_reaction_depth]`. This cop exists so the
|
|
19
|
-
#
|
|
19
|
+
# next plain ivar someone adds to either class gets flagged before
|
|
20
20
|
# it becomes the next instance of the same bug, rather than after.
|
|
21
21
|
#
|
|
22
|
-
#
|
|
22
|
+
# **Scoped narrowly on purpose** — by class name
|
|
23
23
|
# (`Hecks::Runtime::Dispatcher`/`Hecks::Runtime::Registry`), not by
|
|
24
24
|
# blanket-flagging every ivar mutation in the codebase. Most classes
|
|
25
|
-
# in this codebase are
|
|
25
|
+
# in this codebase are not shared across threads (a fresh value
|
|
26
26
|
# object per call, a builder used once at boot) and ivar mutation
|
|
27
27
|
# there is completely ordinary Ruby with no hazard behind it at
|
|
28
28
|
# all — flagging it everywhere would be noise nobody trusts, the
|
|
29
29
|
# same reasoning `.rubocop.yml`'s own header gives for every other
|
|
30
30
|
# cop in this repo.
|
|
31
31
|
#
|
|
32
|
-
#
|
|
32
|
+
# What counts as "PLAIN": `@ivar = ...`, `@ivar ||= ...`, `@ivar +=
|
|
33
33
|
# ...`, `@ivar << ...`, `@ivar[k] = v`. `initialize` is exempt — an
|
|
34
|
-
# ivar being
|
|
34
|
+
# ivar being set up for the first time, before any other thread can
|
|
35
35
|
# possibly hold a reference to this object, is not the hazard (see
|
|
36
36
|
# `Registry#initialize`'s own `@saga_mutex = Mutex.new`, which this
|
|
37
37
|
# cop must not flag). `Thread.current[...]`-backed state and a
|
|
@@ -68,8 +68,8 @@ module RuboCop
|
|
|
68
68
|
RESTRICT_ON_SEND = [:<<, :[]=].freeze
|
|
69
69
|
|
|
70
70
|
def on_ivasgn(node)
|
|
71
|
-
# A
|
|
72
|
-
# children. The commissioner also visits the
|
|
71
|
+
# A plain `@x = 1` parses as `(ivasgn :@x (int 1))` — two
|
|
72
|
+
# children. The commissioner also visits the bare `(ivasgn :@x)`
|
|
73
73
|
# node nested one level inside an `op_asgn`/`or_asgn` (`@x += 1`,
|
|
74
74
|
# `@x ||= 1`) as its own `ivasgn` node with only one child — that
|
|
75
75
|
# one is handled by `on_op_asgn`/`on_or_asgn` below instead, so
|
|
@@ -81,7 +81,7 @@ module RuboCop
|
|
|
81
81
|
|
|
82
82
|
def on_op_asgn(node)
|
|
83
83
|
# `@x += 1` parses as `(op_asgn (ivasgn :@x) :+ (int 1))` — the
|
|
84
|
-
# target is an `ivasgn` node carrying
|
|
84
|
+
# target is an `ivasgn` node carrying just the name (no value
|
|
85
85
|
# child, unlike a plain `@x = 1`), not an `ivar` node.
|
|
86
86
|
ivar_node = node.children.first
|
|
87
87
|
return unless ivar_node.is_a?(RuboCop::AST::Node) && ivar_node.ivasgn_type?
|
|
@@ -99,7 +99,7 @@ module RuboCop
|
|
|
99
99
|
receiver = node.receiver
|
|
100
100
|
return unless receiver
|
|
101
101
|
|
|
102
|
-
# `@ivar << x` — the receiver
|
|
102
|
+
# `@ivar << x` — the receiver is the ivar.
|
|
103
103
|
# `@ivar[k] = v` — the receiver is a `send(@ivar, :[], k)`, whose
|
|
104
104
|
# own receiver is the ivar (`node.receiver.receiver`).
|
|
105
105
|
ivar_node = if receiver.ivar_type?
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hecks
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chris Young
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-09-
|
|
11
|
+
date: 2026-09-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: prism
|
|
@@ -83,6 +83,7 @@ files:
|
|
|
83
83
|
- lib/hecks/adapters/driven/sqlite/schema_builder.rb
|
|
84
84
|
- lib/hecks/adapters/driven/system_clock.adapter
|
|
85
85
|
- lib/hecks/adapters/driven/system_clock.rb
|
|
86
|
+
- lib/hecks/adapters/driving/github_webhook.rb
|
|
86
87
|
- lib/hecks/behaviors.rb
|
|
87
88
|
- lib/hecks/behaviors/dsl.rb
|
|
88
89
|
- lib/hecks/behaviors/expectations.rb
|
|
@@ -113,6 +114,7 @@ files:
|
|
|
113
114
|
- lib/hecks/bluebook/behaviour/read_model.rb
|
|
114
115
|
- lib/hecks/bluebook/behaviour/traits.rb
|
|
115
116
|
- lib/hecks/bluebook/behaviour/value_object.rb
|
|
117
|
+
- lib/hecks/bluebook/capabilities.rb
|
|
116
118
|
- lib/hecks/bluebook/chapter.rb
|
|
117
119
|
- lib/hecks/bluebook/command.rb
|
|
118
120
|
- lib/hecks/bluebook/domain_port.rb
|
|
@@ -124,6 +126,7 @@ files:
|
|
|
124
126
|
- lib/hecks/bluebook/dsl/binding_proxy.rb
|
|
125
127
|
- lib/hecks/bluebook/dsl/bluebook_builder.rb
|
|
126
128
|
- lib/hecks/bluebook/dsl/bluebook_builder/validation.rb
|
|
129
|
+
- lib/hecks/bluebook/dsl/bootstrap_table.rb
|
|
127
130
|
- lib/hecks/bluebook/dsl/command_builder.rb
|
|
128
131
|
- lib/hecks/bluebook/dsl/const_shim.rb
|
|
129
132
|
- lib/hecks/bluebook/dsl/domain_port_builder.rb
|
|
@@ -181,10 +184,14 @@ files:
|
|
|
181
184
|
- lib/hecks/bluebook/translation.rb
|
|
182
185
|
- lib/hecks/bluebook/value_object.rb
|
|
183
186
|
- lib/hecks/codemod.rb
|
|
187
|
+
- lib/hecks/codemod/legacy_dispatch_args.rb
|
|
188
|
+
- lib/hecks/codemod/legacy_dispatch_recorder.rb
|
|
184
189
|
- lib/hecks/construct.rb
|
|
190
|
+
- lib/hecks/corpus.rb
|
|
185
191
|
- lib/hecks/deploy/bluebook/deploy.bluebook
|
|
186
192
|
- lib/hecks/deploy/bluebook/deploy.hecksagon
|
|
187
193
|
- lib/hecks/deploy/oidc.json
|
|
194
|
+
- lib/hecks/deprecation.rb
|
|
188
195
|
- lib/hecks/doc/reference.rb
|
|
189
196
|
- lib/hecks/embryonaut_bluebook.rb
|
|
190
197
|
- lib/hecks/facade.rb
|
|
@@ -223,20 +230,41 @@ files:
|
|
|
223
230
|
- lib/hecks/freezer.rb
|
|
224
231
|
- lib/hecks/fuzzing.rb
|
|
225
232
|
- lib/hecks/fuzzing/bounded_exhaustive_expressions.rb
|
|
233
|
+
- lib/hecks/fuzzing/combination_miner.rb
|
|
234
|
+
- lib/hecks/fuzzing/concurrent_dispatch.rb
|
|
235
|
+
- lib/hecks/fuzzing/coverage_campaign.rb
|
|
236
|
+
- lib/hecks/fuzzing/differential.rb
|
|
237
|
+
- lib/hecks/fuzzing/domain_generator.rb
|
|
238
|
+
- lib/hecks/fuzzing/era_boundary.rb
|
|
239
|
+
- lib/hecks/fuzzing/form_census.rb
|
|
240
|
+
- lib/hecks/fuzzing/generated_domain_check.rb
|
|
226
241
|
- lib/hecks/fuzzing/invalid_value_generator.rb
|
|
227
242
|
- lib/hecks/fuzzing/isolated_boot.rb
|
|
243
|
+
- lib/hecks/fuzzing/nondeterministic.rb
|
|
244
|
+
- lib/hecks/fuzzing/persistence_parity.rb
|
|
228
245
|
- lib/hecks/fuzzing/properties.rb
|
|
246
|
+
- lib/hecks/fuzzing/properties/corrections.rb
|
|
229
247
|
- lib/hecks/fuzzing/properties/dispatch_and_mutations.rb
|
|
230
248
|
- lib/hecks/fuzzing/properties/guards.rb
|
|
231
249
|
- lib/hecks/fuzzing/properties/invariants_and_aggregation.rb
|
|
232
250
|
- lib/hecks/fuzzing/properties/lifecycle_and_replay.rb
|
|
251
|
+
- lib/hecks/fuzzing/properties/outbox.rb
|
|
233
252
|
- lib/hecks/fuzzing/properties/querying.rb
|
|
253
|
+
- lib/hecks/fuzzing/qa_settings.rb
|
|
234
254
|
- lib/hecks/fuzzing/replay.rb
|
|
255
|
+
- lib/hecks/fuzzing/rotation_priority.rb
|
|
256
|
+
- lib/hecks/fuzzing/rust_gap_manifest.rb
|
|
257
|
+
- lib/hecks/fuzzing/self_consistency.rb
|
|
235
258
|
- lib/hecks/fuzzing/sequence_generator.rb
|
|
259
|
+
- lib/hecks/fuzzing/sequence_generator/adversary.rb
|
|
236
260
|
- lib/hecks/fuzzing/sequence_generator/catalog.rb
|
|
237
261
|
- lib/hecks/fuzzing/sequence_generator/outcome_tracker.rb
|
|
238
262
|
- lib/hecks/fuzzing/sequence_generator/picker.rb
|
|
239
263
|
- lib/hecks/fuzzing/sequence_generator/step_builder.rb
|
|
264
|
+
- lib/hecks/fuzzing/shrinker.rb
|
|
265
|
+
- lib/hecks/fuzzing/structural_skips.rb
|
|
266
|
+
- lib/hecks/fuzzing/sweep_depth.rb
|
|
267
|
+
- lib/hecks/fuzzing/target_capabilities.rb
|
|
240
268
|
- lib/hecks/fuzzing/value_generator.rb
|
|
241
269
|
- lib/hecks/grammar.rb
|
|
242
270
|
- lib/hecks/grammar/evolve.rb
|
|
@@ -298,6 +326,7 @@ files:
|
|
|
298
326
|
- lib/hecks/ports/persistence.rb
|
|
299
327
|
- lib/hecks/ports/persistence/append_only.rb
|
|
300
328
|
- lib/hecks/ports/persistence/binding_policy.rb
|
|
329
|
+
- lib/hecks/ports/persistence/codec_boundary.rb
|
|
301
330
|
- lib/hecks/ports/persistence/execution.rb
|
|
302
331
|
- lib/hecks/ports/persistence/null_saga_store.rb
|
|
303
332
|
- lib/hecks/ports/persistence/plugin.rb
|
|
@@ -337,20 +366,30 @@ files:
|
|
|
337
366
|
- lib/hecks/ports/persistence/plugins/era/translation/scaffold/writer.rb
|
|
338
367
|
- lib/hecks/ports/persistence/remote_runtime.rb
|
|
339
368
|
- lib/hecks/ports/persistence/repository_factory.rb
|
|
369
|
+
- lib/hecks/ports/persistence/state_codec.rb
|
|
340
370
|
- lib/hecks/ports/projection.port
|
|
341
371
|
- lib/hecks/ports/projection.rb
|
|
342
372
|
- lib/hecks/ports/query.rb
|
|
343
373
|
- lib/hecks/ports/query/in_memory.rb
|
|
344
374
|
- lib/hecks/ports/query/ordering.rb
|
|
345
375
|
- lib/hecks/projections.rb
|
|
376
|
+
- lib/hecks/projections/bootstrap_table.rb
|
|
346
377
|
- lib/hecks/projections/diagrams.rb
|
|
347
378
|
- lib/hecks/projections/glossary.rb
|
|
379
|
+
- lib/hecks/projections/glossary/html.rb
|
|
380
|
+
- lib/hecks/projections/glossary/markdown.rb
|
|
381
|
+
- lib/hecks/projections/glossary/mermaid.rb
|
|
382
|
+
- lib/hecks/projections/glossary/page.css
|
|
383
|
+
- lib/hecks/projections/glossary/page.js
|
|
384
|
+
- lib/hecks/projections/glossary/sections.rb
|
|
385
|
+
- lib/hecks/projections/glossary/sentences.rb
|
|
348
386
|
- lib/hecks/projections/ir.rb
|
|
349
387
|
- lib/hecks/projections/model.rb
|
|
350
388
|
- lib/hecks/projections/model/deviations.rb
|
|
351
389
|
- lib/hecks/projections/oidc.rb
|
|
352
390
|
- lib/hecks/projections/parser_table.rb
|
|
353
391
|
- lib/hecks/projections/reference.rb
|
|
392
|
+
- lib/hecks/projections/rust_vocabulary.rb
|
|
354
393
|
- lib/hecks/projections/shape.rb
|
|
355
394
|
- lib/hecks/projections/statements.rb
|
|
356
395
|
- lib/hecks/projections/vocabulary.rb
|
|
@@ -406,6 +445,7 @@ files:
|
|
|
406
445
|
- lib/hecks/runtime/identity.rb
|
|
407
446
|
- lib/hecks/runtime/instance.rb
|
|
408
447
|
- lib/hecks/runtime/interpreting.rb
|
|
448
|
+
- lib/hecks/runtime/invocation.rb
|
|
409
449
|
- lib/hecks/runtime/loader.rb
|
|
410
450
|
- lib/hecks/runtime/outbox.rb
|
|
411
451
|
- lib/hecks/runtime/policy_interpreter.rb
|
|
@@ -429,6 +469,7 @@ files:
|
|
|
429
469
|
- lib/hecks/runtime/value.rb
|
|
430
470
|
- lib/hecks/runtime/value/admission.rb
|
|
431
471
|
- lib/hecks/runtime/value/coercion.rb
|
|
472
|
+
- lib/hecks/runtime/value/entity_list_coercion.rb
|
|
432
473
|
- lib/hecks/runtime/value/invariant_violation.rb
|
|
433
474
|
- lib/hecks/storehouse.rb
|
|
434
475
|
- lib/hecks/version.rb
|