hecks 3.10.0 → 3.12.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 +29 -0
- data/examples/pizzas/bluebook/pizzas.hecksagon +7 -0
- data/exe/hecks +4 -4
- data/lib/hecks/adapters/driven/d1.rb +2 -10
- data/lib/hecks/adapters/driven/heki.adapter +1 -1
- data/lib/hecks/adapters/driven/heki.rb +2 -12
- data/lib/hecks/adapters/driven/lambda.adapter +1 -1
- data/lib/hecks/adapters/driven/lambda.rb +3 -18
- data/lib/hecks/adapters/driven/postgres.rb +4 -11
- data/lib/hecks/adapters/driven/sqlite.adapter +1 -1
- data/lib/hecks/adapters/driven/sqlite.rb +2 -10
- data/lib/hecks/adapters/driving/admission.rb +46 -0
- data/lib/hecks/adapters/driving/cli/nesting.rb +36 -0
- data/lib/hecks/adapters/driving/cli/shorthand.rb +88 -0
- data/lib/hecks/adapters/driving/cli.rb +127 -0
- data/lib/hecks/adapters/driving/cli_runner/answers.rb +160 -0
- data/lib/hecks/adapters/driving/cli_runner/resolution.rb +158 -0
- data/lib/hecks/adapters/driving/cli_runner/settling.rb +120 -0
- data/lib/hecks/adapters/driving/cli_runner/streaming.rb +93 -0
- data/lib/hecks/adapters/driving/cli_runner/suggestions.rb +47 -0
- data/lib/hecks/adapters/driving/cli_runner.rb +70 -0
- data/lib/hecks/adapters/driving/command_request.rb +121 -0
- data/lib/hecks/adapters/driving/handle.rb +214 -0
- data/lib/hecks/adapters/driving/json.rb +136 -0
- data/lib/hecks/adapters/driving/launcher_options.rb +267 -0
- data/lib/hecks/adapters/driving/mcp/properties.rb +49 -0
- data/lib/hecks/adapters/driving/mcp/tool_calls.rb +116 -0
- data/lib/hecks/adapters/driving/mcp/tool_definitions/auditing.rb +53 -0
- data/lib/hecks/adapters/driving/mcp/tool_definitions/calling.rb +71 -0
- data/lib/hecks/adapters/driving/mcp/tool_definitions/reading.rb +99 -0
- data/lib/hecks/adapters/driving/mcp/tool_definitions.rb +18 -0
- data/lib/hecks/adapters/driving/mcp.rb +159 -0
- data/lib/hecks/adapters/driving/mcp_guide_cache.rb +78 -0
- data/lib/hecks/adapters/driving/mcp_scope/argument_policy.rb +97 -0
- data/lib/hecks/adapters/driving/mcp_scope/env_problems.rb +69 -0
- data/lib/hecks/adapters/driving/mcp_scope/presenter.rb +83 -0
- data/lib/hecks/adapters/driving/mcp_scope.rb +213 -0
- data/lib/hecks/adapters/driving/newcomer.rb +50 -0
- data/lib/hecks/adapters/driving/ruby/aggregate_module.rb +171 -0
- data/lib/hecks/adapters/driving/ruby/chapter.rb +91 -0
- data/lib/hecks/adapters/driving/ruby.rb +83 -0
- data/lib/hecks/adapters/driving/usage_cache.rb +144 -0
- data/lib/hecks/{doors.rb → adapters/driving.rb} +10 -6
- data/lib/hecks/behaviors/expectations/boot.rb +1 -1
- data/lib/hecks/bench/ruby_runner.rb +1 -1
- data/lib/hecks/bluebook/ask_resolution.rb +130 -0
- data/lib/hecks/bluebook/assembly/aggregate_assembly.rb +8 -2
- data/lib/hecks/bluebook/assembly/contracts/read_models.rb +1 -1
- data/lib/hecks/bluebook/assembly/contracts/rules.rb +4 -2
- data/lib/hecks/bluebook/assembly/contracts/structure.rb +3 -1
- data/lib/hecks/bluebook/assembly/marks.rb +4 -15
- data/lib/hecks/bluebook/assembly/scalars.rb +39 -0
- data/lib/hecks/bluebook/attribute.rb +1 -1
- data/lib/hecks/bluebook/behaviour/command.rb +13 -8
- data/lib/hecks/bluebook/behaviour/policy.rb +30 -0
- data/lib/hecks/bluebook/capabilities/attribute_values.rb +72 -0
- data/lib/hecks/bluebook/capabilities.rb +91 -9
- data/lib/hecks/bluebook/domain_port.rb +16 -4
- data/lib/hecks/bluebook/dsl/adapter_builder.rb +18 -6
- data/lib/hecks/bluebook/dsl/binding_proxy.rb +13 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/computed_sources.rb +98 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/fan_out_rows.rb +42 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/projected_fields.rb +14 -2
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/provisions.rb +69 -3
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/with_projections.rb +17 -10
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation.rb +5 -0
- data/lib/hecks/bluebook/dsl/bootstrap_table.rb +2 -0
- data/lib/hecks/bluebook/dsl/command_builder/mutations.rb +8 -1
- data/lib/hecks/bluebook/dsl/command_builder/operands.rb +121 -0
- data/lib/hecks/bluebook/dsl/command_builder.rb +2 -0
- data/lib/hecks/bluebook/dsl/hecksagon_builder.rb +10 -1
- data/lib/hecks/bluebook/dsl/lifecycle_builder.rb +45 -2
- data/lib/hecks/bluebook/dsl/policy_builder.rb +47 -10
- data/lib/hecks/bluebook/dsl/rule_reference.rb +7 -4
- data/lib/hecks/bluebook/dsl/world_builder.rb +1 -1
- data/lib/hecks/bluebook/expression/ast_json/emitters.rb +6 -0
- data/lib/hecks/bluebook/expression/ast_json.rb +9 -6
- data/lib/hecks/bluebook/expression/ast_reader.rb +14 -9
- data/lib/hecks/bluebook/expression/projection.json +36 -0
- data/lib/hecks/bluebook/expression/resolver/operations.rb +31 -0
- data/lib/hecks/bluebook/expression/resolver/parsing.rb +38 -5
- data/lib/hecks/bluebook/expression/resolver/scanning.rb +22 -5
- data/lib/hecks/bluebook/expression/resolver/values.rb +10 -0
- data/lib/hecks/bluebook/expression/resolver.rb +20 -1
- data/lib/hecks/bluebook/hecksagon.rb +23 -3
- data/lib/hecks/bluebook/lifecycle.rb +22 -3
- data/lib/hecks/bluebook/meta_validator/adapter_judge.rb +13 -1
- data/lib/hecks/bluebook/meta_validator/modes.rb +4 -1
- data/lib/hecks/bluebook/meta_validator/readings.rb +24 -1
- data/lib/hecks/bluebook/meta_validator/reconstruction/heads.rb +2 -1
- data/lib/hecks/bluebook/meta_validator/reconstruction.rb +6 -3
- data/lib/hecks/bluebook/meta_validator/shapes.rb +5 -0
- data/lib/hecks/bluebook/meta_validator/verdict_cache.rb +1 -1
- data/lib/hecks/bluebook/meta_validator.rb +12 -12
- data/lib/hecks/bluebook/model_check/ask_checks.rb +71 -0
- data/lib/hecks/bluebook/model_check/policy_checks.rb +2 -1
- data/lib/hecks/bluebook/model_check/reference_checks.rb +70 -0
- data/lib/hecks/bluebook/model_check.rb +8 -2
- data/lib/hecks/bluebook/policy.rb +4 -2
- data/lib/hecks/bluebook/smoke_test.rb +1 -1
- data/lib/hecks/bluebook/synthesizer.rb +2 -0
- data/lib/hecks/bluebook.rb +2 -0
- data/lib/hecks/cli/command_table.rb +1 -1
- data/lib/hecks/cli/console.rb +2 -1
- data/lib/hecks/cli/document.rb +1 -1
- data/lib/hecks/cli/launcher_words.rb +4 -4
- data/lib/hecks/cli/mcp.rb +4 -4
- data/lib/hecks/cli/project_cli/launcher_source.rb +2 -2
- data/lib/hecks/cli/project_cli/templates.rb +5 -5
- data/lib/hecks/cli/project_cli.rb +9 -6
- data/lib/hecks/cli/run.rb +2 -2
- data/lib/hecks/cli/smoke_http/checks.rb +4 -1
- data/lib/hecks/cli/smoke_http/transport.rb +3 -3
- data/lib/hecks/cli/smoke_http.rb +3 -0
- data/lib/hecks/codemod.rb +5 -2
- data/lib/hecks/corpus/routes.rb +7 -0
- data/lib/hecks/corpus/rust.rb +3 -2
- data/lib/hecks/deploy/bluebook/deploy.bluebook +34 -4
- data/lib/hecks/doc/reference/rendering.rb +6 -3
- data/lib/hecks/forms/app/commands.rb +8 -7
- data/lib/hecks/forms/app/queries.rb +2 -1
- data/lib/hecks/forms/app.rb +1 -1
- data/lib/hecks/forms/record_renderer.rb +1 -1
- data/lib/hecks/framework/bluebook/privacy.bluebook +11 -0
- data/lib/hecks/fuzzing/concurrent_dispatch.rb +4 -1
- data/lib/hecks/fuzzing/failure_triage.rb +2 -1
- data/lib/hecks/fuzzing/mutation/run.rb +11 -4
- data/lib/hecks/fuzzing/properties/catalog.rb +6 -4
- data/lib/hecks/fuzzing/properties/guaranteed_by_construction.rb +18 -11
- data/lib/hecks/fuzzing/properties/guards.rb +1 -1
- data/lib/hecks/fuzzing/self_consistency/saga_redelivery.rb +1 -1
- data/lib/hecks/fuzzing/self_consistency.rb +6 -2
- data/lib/hecks/fuzzing/shrinker.rb +3 -1
- data/lib/hecks/fuzzing/value_generator.rb +19 -5
- data/lib/hecks/gate/stages.yml +33 -7
- data/lib/hecks/grammar/evolve.rb +1 -1
- data/lib/hecks/grammar/expression_operators.json +372 -0
- data/lib/hecks/grammar/operators.rb +3 -1
- data/lib/hecks/hecks/adapters/codebase/corpus_tasks.rb +10 -10
- data/lib/hecks/hecks/adapters/codebase/inspection/rubycritic.rb +35 -0
- data/lib/hecks/hecks/adapters/codebase/inspection.rb +104 -0
- data/lib/hecks/hecks/adapters/codebase/publishing.rb +2 -1
- data/lib/hecks/hecks/adapters/codebase/release_facts.rb +12 -2
- data/lib/hecks/hecks/adapters/codebase/source_tree.rb +2 -1
- data/lib/hecks/hecks/adapters/codebase/test_runner.rb +1 -1
- data/lib/hecks/hecks/adapters/cost_explorer.rb +8 -5
- data/lib/hecks/hecks/adapters/deploy_toolchain/statuses.rb +2 -1
- data/lib/hecks/hecks/adapters/finding_github.rb +13 -6
- data/lib/hecks/hecks/adapters/first_admin.rb +2 -2
- data/lib/hecks/hecks/adapters/github_rulesets.rb +6 -3
- data/lib/hecks/hecks/adapters/in_process_boot.rb +1 -1
- data/lib/hecks/hecks/adapters/journal_store/compaction.rb +1 -1
- data/lib/hecks/hecks/adapters/journal_store/edge_audit.rb +10 -20
- data/lib/hecks/hecks/adapters/journal_store/held_domain.rb +28 -5
- data/lib/hecks/hecks/adapters/local_files.rb +2 -2
- data/lib/hecks/hecks/adapters/rehearsal/audit_report.rb +107 -0
- data/lib/hecks/hecks/adapters/rehearsal/census.rb +71 -0
- data/lib/hecks/hecks/adapters/rehearsal/declaration.rb +133 -0
- data/lib/hecks/hecks/adapters/rehearsal/environment.rb +83 -0
- data/lib/hecks/hecks/adapters/rehearsal/inquiry.rb +142 -0
- data/lib/hecks/hecks/adapters/rehearsal/memory_store.rb +96 -0
- data/lib/hecks/hecks/adapters/rehearsal/postgres_census.rb +100 -0
- data/lib/hecks/hecks/adapters/rehearsal/postgres_reading.rb +69 -0
- data/lib/hecks/hecks/adapters/rehearsal/postgres_store.rb +133 -0
- data/lib/hecks/hecks/adapters/rehearsal/rows.rb +41 -0
- data/lib/hecks/hecks/adapters/rehearsal/rust_audit.rb +83 -0
- data/lib/hecks/hecks/adapters/rehearsal/subject.rb +104 -0
- data/lib/hecks/hecks/adapters/rehearsal.rb +54 -0
- data/lib/hecks/hecks/adapters/rehearsal_store.adapter +7 -0
- data/lib/hecks/hecks/adapters/rehearsal_store.rb +81 -0
- data/lib/hecks/hecks/adapters/terminal.rb +13 -11
- data/lib/hecks/hecks/codebase.behaviors +13 -1
- data/lib/hecks/hecks/codebase.bluebook +239 -5
- data/lib/hecks/hecks/custodian.behaviors +24 -6
- data/lib/hecks/hecks/custodian.bluebook +6 -1227
- data/lib/hecks/hecks/deploy.behaviors +1 -1
- data/lib/hecks/hecks/deploy.world +1 -3
- data/lib/hecks/hecks/hecks.behaviors +1 -1
- data/lib/hecks/hecks/hecks.hecksagon +53 -18
- data/lib/hecks/hecks/hecks.world +13 -10
- data/lib/hecks/hecks/rehearsal.bluebook +477 -0
- data/lib/hecks/hecks/site.behaviors +1 -1
- data/lib/hecks/hecks/site.world +0 -1
- data/lib/hecks/hecks/tooling.bluebook +1238 -0
- data/lib/hecks/indifferent_key.rb +20 -0
- data/lib/hecks/language/adapter.bluebook +13 -3
- data/lib/hecks/language/bluebook/aggregate.bluebook +23 -0
- data/lib/hecks/language/bluebook/bluebook.behaviors +23 -0
- data/lib/hecks/language/bluebook/bluebook.bluebook +15 -0
- data/lib/hecks/language/bluebook/entity.bluebook +18 -0
- data/lib/hecks/language/bluebook/policy.behaviors +19 -0
- data/lib/hecks/language/bluebook/policy.bluebook +9 -1
- data/lib/hecks/language/bluebook/query.bluebook +1 -1
- data/lib/hecks/language/bluebook/vocabulary.bluebook +63 -4
- data/lib/hecks/language/hecksagon/domain_port.bluebook +1 -1
- data/lib/hecks/language/hecksagon/hecksagon.bluebook +22 -0
- data/lib/hecks/language/oidc.json +10 -0
- data/lib/hecks/language/port.bluebook +4 -4
- data/lib/hecks/literal.rb +12 -3
- data/lib/hecks/ports/key_vault.rb +7 -2
- data/lib/hecks/ports/persistence/plugins/era/era_check.rb +21 -10
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/boot.rb +4 -2
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/era_resolver.rb +2 -1
- data/lib/hecks/ports/persistence/repository_factory.rb +6 -3
- data/lib/hecks/projection_files/expression_tables.rb +7 -2
- data/lib/hecks/projections/deploy/box/compose.rb +6 -4
- data/lib/hecks/projections/deploy/box/edge.rb +62 -0
- data/lib/hecks/projections/deploy/box/logging.rb +99 -0
- data/lib/hecks/projections/deploy/box/roll_scripts.rb +16 -8
- data/lib/hecks/projections/deploy/box/settings/cdn.rb +40 -0
- data/lib/hecks/projections/deploy/box/settings/logs.rb +40 -0
- data/lib/hecks/projections/deploy/box/settings/patterns.rb +11 -0
- data/lib/hecks/projections/deploy/box/settings/types.rb +16 -1
- data/lib/hecks/projections/deploy/box/settings.rb +6 -2
- data/lib/hecks/projections/deploy/box/stack_yaml.rb +5 -2
- data/lib/hecks/projections/deploy/box/templates/Makefile.tmpl +16 -0
- data/lib/hecks/projections/deploy/box/templates/box.yaml.tmpl +8 -4
- data/lib/hecks/projections/deploy/box/templates/deploy-box.sh.tmpl +32 -0
- data/lib/hecks/projections/deploy/box/templates/deploy-service.sh.tmpl +1 -1
- data/lib/hecks/projections/deploy/box/templates/edge.mk.tmpl +17 -0
- data/lib/hecks/projections/deploy/box/templates/edge.yaml.tmpl +65 -0
- data/lib/hecks/projections/deploy/box/templates/log-group.yaml.tmpl +12 -0
- data/lib/hecks/projections/deploy/box/templates/log-policy.yaml.tmpl +7 -0
- data/lib/hecks/projections/deploy/box/templates/render-compose-taskdef.sh.tmpl +5 -4
- data/lib/hecks/projections/deploy/box/templates/render-compose.sh.tmpl +5 -4
- data/lib/hecks/projections/deploy/box.rb +15 -3
- data/lib/hecks/projections/deploy/preview/preview.sh.erb +1 -1
- data/lib/hecks/projections/deploy/shared.rb +5 -2
- data/lib/hecks/projections/model/deviations.rb +2 -2
- data/lib/hecks/projections/model.rb +2 -2
- data/lib/hecks/projections/oidc.rb +13 -1
- data/lib/hecks/projections/shape.rb +5 -2
- data/lib/hecks/projections/site/cms_editor/attributes.rb +26 -6
- data/lib/hecks/projections/site/cms_editor/blocks.rb +157 -0
- data/lib/hecks/projections/site/cms_editor/checks.rb +14 -1
- data/lib/hecks/projections/site/cms_editor/clearing.rb +70 -0
- data/lib/hecks/projections/site/cms_editor/color.rb +124 -0
- data/lib/hecks/projections/site/cms_editor/composition.rb +42 -0
- data/lib/hecks/projections/site/cms_editor/destructive.rb +61 -0
- data/lib/hecks/projections/site/cms_editor/drafts.rb +102 -0
- data/lib/hecks/projections/site/cms_editor/hints.rb +74 -0
- data/lib/hecks/projections/site/cms_editor/icons.rb +86 -0
- data/lib/hecks/projections/site/cms_editor/key_kinds.rb +31 -0
- data/lib/hecks/projections/site/cms_editor/limits.rb +72 -0
- data/lib/hecks/projections/site/cms_editor/media.rb +1 -1
- data/lib/hecks/projections/site/cms_editor/moment.rb +34 -0
- data/lib/hecks/projections/site/cms_editor/palette.rb +115 -0
- data/lib/hecks/projections/site/cms_editor/pickers.rb +85 -0
- data/lib/hecks/projections/site/cms_editor/preview.rb +91 -0
- data/lib/hecks/projections/site/cms_editor/relations.rb +92 -0
- data/lib/hecks/projections/site/cms_editor/scale_checks.rb +66 -0
- data/lib/hecks/projections/site/cms_editor/scheduling.rb +150 -0
- data/lib/hecks/projections/site/cms_editor/schema.rb +96 -19
- data/lib/hecks/projections/site/cms_editor/setting.rb +52 -9
- data/lib/hecks/projections/site/cms_editor/targets.rb +86 -0
- data/lib/hecks/projections/site/cms_editor/templates/package.json.tmpl +18 -1
- data/lib/hecks/projections/site/cms_editor/templates/src/app.ts.tmpl +251 -57
- data/lib/hecks/projections/site/cms_editor/templates/src/assets.ts.tmpl +98 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/auth/membership.ts.tmpl +32 -24
- data/lib/hecks/projections/site/cms_editor/templates/src/browser/app.css.tmpl +412 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/browser/autosave.js.tmpl +144 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/browser/blocks.js.tmpl +500 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/browser/body_doc.js.tmpl +175 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/browser/body_editor.js.tmpl +418 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/browser/epoch.js.tmpl +61 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/browser/forms.js.tmpl +210 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/browser/lists.js.tmpl +40 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/browser/main.js.tmpl +26 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/browser/media_picker.js.tmpl +232 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/browser/moments.js.tmpl +73 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/browser/pickers.js.tmpl +152 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/browser/preview.js.tmpl +98 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/browser/shell.js.tmpl +140 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/browser/toast.js.tmpl +66 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/choices.ts.tmpl +99 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/commands.ts.tmpl +78 -24
- data/lib/hecks/projections/site/cms_editor/templates/src/config.ts.tmpl +6 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/flash.ts.tmpl +52 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/host.ts.tmpl +19 -2
- data/lib/hecks/projections/site/cms_editor/templates/src/media/handler.ts.tmpl +31 -8
- data/lib/hecks/projections/site/cms_editor/templates/src/names.ts.tmpl +36 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/schema.ts.tmpl +131 -2
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/availability.ts.tmpl +15 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/block_list.js.tmpl +213 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/blocks.ts.tmpl +275 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/body_model.js.tmpl +8 -5
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/detail.ts.tmpl +88 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/dialogs.ts.tmpl +43 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/fields.ts.tmpl +229 -34
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/html.ts.tmpl +40 -81
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/icons.ts.tmpl +15 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/input.ts.tmpl +29 -12
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/links.ts.tmpl +100 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/moments.ts.tmpl +44 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/outline.ts.tmpl +53 -17
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/pages.ts.tmpl +178 -88
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/paging.ts.tmpl +82 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/pickers.ts.tmpl +110 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/preview.ts.tmpl +87 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/related.ts.tmpl +97 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/schedule.ts.tmpl +160 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/shell.ts.tmpl +211 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/table.ts.tmpl +151 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/theme.js.tmpl +16 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/values.ts.tmpl +69 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/words.ts.tmpl +97 -0
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/world.ts.tmpl +35 -0
- data/lib/hecks/projections/site/cms_editor/templates/tsconfig.json.tmpl +2 -1
- data/lib/hecks/projections/site/cms_editor/theme.rb +29 -0
- data/lib/hecks/projections/site/cms_editor/theme_checks.rb +57 -0
- data/lib/hecks/projections/site/cms_editor.rb +49 -23
- data/lib/hecks/projections/site/role_probe.rb +2 -0
- data/lib/hecks/projections/site/site_root/workflow.rb +5 -0
- data/lib/hecks/projector/cli_audience.rb +22 -1
- data/lib/hecks/projector/cli_projector/listing.rb +1 -1
- data/lib/hecks/projector/cli_projector/option_specs.rb +1 -1
- data/lib/hecks/projector/cli_projector/usage.rb +15 -4
- data/lib/hecks/projector/docs_projector/closing.rb +1 -1
- data/lib/hecks/projector/docs_projector.rb +1 -1
- data/lib/hecks/projector/exporter/bindings.rb +40 -10
- data/lib/hecks/projector/exporter/capability_values.rb +55 -0
- data/lib/hecks/projector/narrate_projector/reactions.rb +1 -1
- data/lib/hecks/projector/target.rb +11 -0
- data/lib/hecks/projector.rb +32 -5
- data/lib/hecks/quality_control/adapters/github_checks.rb +12 -8
- data/lib/hecks/quality_control/adapters/github_issues.rb +8 -4
- data/lib/hecks/quality_control/cli/qa_open_pr.rb +2 -2
- data/lib/hecks/quality_control/cli/qa_sweep/checks/shrinking.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_sweep/finding_report.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_sweep.rb +1 -1
- data/lib/hecks/quality_control/quality_control.bluebook +6 -2
- data/lib/hecks/release/approval.rb +64 -0
- data/lib/hecks/router/{door.rb → aggregate_reader.rb} +5 -4
- data/lib/hecks/router/namespace_installer.rb +16 -16
- data/lib/hecks/router.rb +1 -1
- data/lib/hecks/runtime/best_effort.rb +22 -0
- data/lib/hecks/runtime/command_interpreter/mutation_applier.rb +12 -2
- data/lib/hecks/runtime/command_interpreter.rb +3 -2
- data/lib/hecks/runtime/command_rules/emission.rb +1 -1
- data/lib/hecks/runtime/dispatcher.rb +4 -4
- data/lib/hecks/runtime/entity_element/location.rb +1 -1
- data/lib/hecks/runtime/event.rb +5 -0
- data/lib/hecks/runtime/identity.rb +7 -6
- data/lib/hecks/runtime/interpreting.rb +2 -1
- data/lib/hecks/runtime/invocation_builder.rb +1 -1
- data/lib/hecks/runtime/loader/boot_steps.rb +8 -5
- data/lib/hecks/runtime/loader.rb +10 -10
- data/lib/hecks/runtime/policy_interpreter/arguments.rb +7 -4
- data/lib/hecks/runtime/policy_interpreter/fan_out.rb +3 -3
- data/lib/hecks/runtime/policy_interpreter.rb +6 -6
- data/lib/hecks/runtime/port_operation_interpreter.rb +1 -1
- data/lib/hecks/runtime/reaction_invocation.rb +1 -1
- data/lib/hecks/runtime/rebuild_sweep.rb +11 -1
- data/lib/hecks/runtime/registry/ask_verification.rb +35 -0
- data/lib/hecks/runtime/registry/hecksagon_rules.rb +10 -0
- data/lib/hecks/runtime/registry/merging.rb +1 -1
- data/lib/hecks/runtime/registry/providers.rb +16 -0
- data/lib/hecks/runtime/registry/read_repository.rb +6 -4
- data/lib/hecks/runtime/registry/verification.rb +4 -1
- data/lib/hecks/runtime/registry/world_defaults.rb +29 -0
- data/lib/hecks/runtime/registry.rb +1 -1
- data/lib/hecks/runtime/saga_interpreter/compensation.rb +1 -1
- data/lib/hecks/runtime/saga_interpreter/delivery.rb +4 -4
- data/lib/hecks/runtime/saga_interpreter/transitions.rb +1 -1
- data/lib/hecks/runtime/saga_interpreter.rb +3 -3
- data/lib/hecks/runtime/tenant_check.rb +5 -4
- data/lib/hecks/runtime/value/coercion.rb +2 -2
- data/lib/hecks/runtime/value/validation.rb +16 -4
- data/lib/hecks/runtime.rb +9 -9
- data/lib/hecks/rust_build/host.rb +11 -4
- data/lib/hecks/rust_build/prebuilt_binary.rb +101 -0
- data/lib/hecks/rust_build/project_rust/target_ir.rb +1 -1
- data/lib/hecks/rust_build/wasm.rb +1 -1
- data/lib/hecks/rust_build/wasm_browser.rb +1 -1
- data/lib/hecks/rust_build.rb +11 -0
- data/lib/hecks/served_options.rb +53 -0
- data/lib/hecks/site/bluebook/site.bluebook +1 -0
- data/lib/hecks/storehouse/audit.rb +1 -1
- data/lib/hecks/storehouse/dispatching.rb +8 -6
- data/lib/hecks/storehouse/introspection.rb +2 -2
- data/lib/hecks/storehouse/querying.rb +6 -4
- data/lib/hecks/storehouse.rb +4 -4
- data/lib/hecks/tools/ci_gate_decision.rb +35 -0
- data/lib/hecks/tools/ci_gates.rb +20 -1
- data/lib/hecks/tools/comment_style/source_file.rb +4 -1
- data/lib/hecks/tools/deploy_recipe_lint/fixtures.rb +4 -1
- data/lib/hecks/tools/lanes/files.rb +8 -0
- data/lib/hecks/tools/lanes/prebuilt_workflow.rb +81 -0
- data/lib/hecks/tools/lanes/rows.rb +6 -0
- data/lib/hecks/tools/lanes.rb +1 -0
- data/lib/hecks/tools/oidc_manifests.rb +4 -5
- data/lib/hecks/tools/regeneration_run.rb +11 -4
- data/lib/hecks/tools/release_only.rb +111 -0
- data/lib/hecks/tools/site_routes/editor_files.rb +12 -5
- data/lib/hecks/tools/tenant_provisioning.rb +2 -2
- data/lib/hecks/tools/tools_doc.rb +4 -4
- data/lib/hecks/version.rb +1 -1
- data/lib/hecks/vocabulary.rb +19 -5
- data/lib/hecks.rb +15 -15
- data/lib/rubocop/cop/hecks/env_dump.rb +69 -0
- data/lib/rubocop/cop/hecks/monotonic_duration.rb +53 -0
- data/lib/rubocop/cop/hecks/no_wall_clock_in_runtime.rb +34 -0
- data/lib/rubocop/cop/hecks/raw_shell_interpolation.rb +79 -0
- data/lib/rubocop/cop/hecks/sleep_in_spec.rb +34 -0
- data/lib/rubocop/cop/hecks/swallowed_rescue.rb +37 -0
- data/lib/rubocop/cop/hecks/symbol_string_key_mix.rb +50 -0
- data/lib/rubocop/cop/hecks/untyped_raise.rb +37 -0
- data/prebuilt/9ee54e2f0d4d6d3fe046827779b221e02de665fba911a048ae5dd8b8fbfb7d90.marshal +0 -0
- data/prebuilt/d74a00e996222c1d8b676d5959092effc46b4dc59e0555f3bf9554ac58e3094a.marshal +0 -0
- data/prebuilt/verdicts-df19f35868d3284a70f55e42dcef87ef4e65e6a678e5135f72e1f6cff4c1357b.json +1 -0
- data/rust/.gitignore +6 -0
- data/rust/Cargo.toml +6 -0
- data/rust/build/src/binding_pass.rs +103 -0
- data/rust/build/src/cargo_sync.rs +6 -0
- data/rust/build/src/lineage_pass.rs +3 -3
- data/rust/build/src/main.rs +17 -5
- data/rust/build/src/pipeline.rs +48 -5
- data/rust/build/src/seams_pass.rs +123 -0
- data/rust/build/src/translation_pass.rs +167 -0
- data/rust/codegen/src/asks.rs +103 -0
- data/rust/codegen/src/commands.rs +13 -8
- data/rust/codegen/src/constraints.rs +25 -0
- data/rust/codegen/src/domain_generator.rs +2 -0
- data/rust/codegen/src/expr_emitter.rs +13 -0
- data/rust/codegen/src/json_codec.rs +54 -15
- data/rust/codegen/src/main.rs +1 -0
- data/rust/codegen/src/mutations.rs +128 -3
- data/rust/codegen/src/queries.rs +11 -2
- data/rust/codegen/src/reactions.rs +1 -1
- data/rust/codegen/src/types.rs +166 -8
- data/rust/host/HECKS_RELEASE +1 -1
- data/rust/host/src/api.rs +4 -4
- data/rust/host/src/bin/validate_harness.rs +43 -0
- data/rust/host/src/boundary_fuzz/expr_json.rs +2 -2
- data/rust/host/src/boundary_fuzz/ir.rs +1 -0
- data/rust/host/src/boundary_fuzz/server.rs +1 -1
- data/rust/host/src/checkout.rs +35 -19
- data/rust/host/src/commerce_ir.rs +408 -2
- data/rust/host/src/expr_json.rs +118 -0
- data/rust/host/src/extension.rs +13 -1
- data/rust/host/src/lib.rs +1 -0
- data/rust/host/src/mint.rs +1 -1
- data/rust/host/src/payments/tests.rs +27 -1
- data/rust/host/src/payments.rs +12 -4
- data/rust/host/src/platform_signin/attack_tests.rs +1100 -0
- data/rust/host/src/platform_signin/config.rs +512 -0
- data/rust/host/src/platform_signin/cookie.rs +237 -0
- data/rust/host/src/platform_signin/extension.rs +190 -0
- data/rust/host/src/platform_signin/fetcher.rs +322 -0
- data/rust/host/src/platform_signin/handler.rs +251 -0
- data/rust/host/src/platform_signin/handler_tests.rs +554 -0
- data/rust/host/src/platform_signin/jti.rs +196 -0
- data/rust/host/src/platform_signin/jwks.rs +542 -0
- data/rust/host/src/platform_signin/jws.rs +249 -0
- data/rust/host/src/platform_signin/known_answer_tests.rs +237 -0
- data/rust/host/src/platform_signin/mapping_tests.rs +254 -0
- data/rust/host/src/platform_signin/mod.rs +75 -0
- data/rust/host/src/platform_signin/mode_tests.rs +382 -0
- data/rust/host/src/platform_signin/pages.rs +204 -0
- data/rust/host/src/platform_signin/query.rs +233 -0
- data/rust/host/src/platform_signin/session.rs +151 -0
- data/rust/host/src/platform_signin/settings.rs +385 -0
- data/rust/host/src/platform_signin/strict_json.rs +351 -0
- data/rust/host/src/platform_signin/test_support.rs +235 -0
- data/rust/host/src/platform_signin/ttl_tests.rs +94 -0
- data/rust/host/src/platform_signin/verify.rs +604 -0
- data/rust/host/src/platform_signin/wiring_support.rs +319 -0
- data/rust/host/src/query_step.rs +22 -4
- data/rust/host/src/reference_validate.rs +653 -108
- data/rust/host/src/resend.rs +2 -0
- data/rust/host/src/server.rs +19 -6
- data/rust/host/src/ui_schema.rs +132 -5
- data/rust/host/src/web/newsletter.rs +7 -8
- data/rust/host/src/web/newsletter_send.rs +38 -13
- data/rust/host/src/web/registrations.rs +229 -26
- data/rust/host/src/web.rs +53 -9
- data/rust/parser/src/emit.rs +38 -6
- data/rust/parser/src/expr/ast_json.rs +7 -1
- data/rust/parser/src/expr/resolver.rs +171 -6
- data/rust/parser/src/ir.rs +7 -0
- data/rust/parser/src/keywords.rs +24 -0
- data/rust/parser/src/main.rs +3 -0
- data/rust/parser/src/parse/aggregate.rs +2 -1
- data/rust/parser/src/parse/chapter.rs +2 -2
- data/rust/parser/src/parse/command.rs +2 -0
- data/rust/parser/src/parse/hecksagon.rs +5 -2
- data/rust/parser/src/parse/lifecycle.rs +81 -0
- data/rust/parser/src/parse/mod.rs +15 -1
- data/rust/parser/src/parse/policy.rs +13 -2
- data/rust/parser/src/parse/value_object.rs +34 -17
- data/rust/parser/src/ruby_value.rs +1 -1
- data/rust/src/exemplar/commands.rs +4 -4
- data/rust/src/exemplar/constraints.rs +1 -1
- data/rust/src/exemplar/json.rs +43 -1
- data/rust/src/kernel/cli.rs +7 -5
- data/rust/src/kernel/dispatch.rs +2 -2
- data/rust/src/kernel/dispatch_guard_tests.rs +1 -1
- data/rust/src/kernel/expr.rs +66 -3
- data/rust/src/kernel/expression_operators/arithmetic.rs +130 -5
- data/rust/src/kernel/expression_operators/text.rs +26 -2
- data/rust/src/kernel/json.rs +15 -0
- data/rust/src/kernel/mod.rs +1 -1
- data/rust/src/kernel/orchestrate.rs +54 -5
- data/rust/src/kernel/orchestrate_guard_tests.rs +67 -0
- data/rust/src/kernel/pattern.rs +60 -0
- data/rust/src/kernel/reference_lookup.rs +90 -7
- metadata +178 -38
- data/lib/hecks/doors/cli_door/nesting.rb +0 -34
- data/lib/hecks/doors/cli_door/shorthand.rb +0 -85
- data/lib/hecks/doors/cli_door.rb +0 -124
- data/lib/hecks/doors/cli_runner/answers.rb +0 -138
- data/lib/hecks/doors/cli_runner/resolution.rb +0 -146
- data/lib/hecks/doors/cli_runner/settling.rb +0 -115
- data/lib/hecks/doors/cli_runner/streaming.rb +0 -90
- data/lib/hecks/doors/cli_runner/suggestions.rb +0 -43
- data/lib/hecks/doors/cli_runner.rb +0 -66
- data/lib/hecks/doors/command_request.rb +0 -119
- data/lib/hecks/doors/handle.rb +0 -208
- data/lib/hecks/doors/json_door.rb +0 -132
- data/lib/hecks/doors/launcher_options.rb +0 -247
- data/lib/hecks/doors/mcp_door/properties.rb +0 -47
- data/lib/hecks/doors/mcp_door/tool_calls.rb +0 -113
- data/lib/hecks/doors/mcp_door/tool_definitions/auditing.rb +0 -51
- data/lib/hecks/doors/mcp_door/tool_definitions/calling.rb +0 -69
- data/lib/hecks/doors/mcp_door/tool_definitions/reading.rb +0 -97
- data/lib/hecks/doors/mcp_door/tool_definitions.rb +0 -15
- data/lib/hecks/doors/mcp_door.rb +0 -156
- data/lib/hecks/doors/mcp_door_scope/argument_policy.rb +0 -92
- data/lib/hecks/doors/mcp_door_scope/env_problems.rb +0 -55
- data/lib/hecks/doors/mcp_door_scope/presenter.rb +0 -78
- data/lib/hecks/doors/mcp_door_scope.rb +0 -201
- data/lib/hecks/doors/mcp_guide_cache.rb +0 -75
- data/lib/hecks/doors/ruby_door/aggregate_door.rb +0 -162
- data/lib/hecks/doors/ruby_door/chapter.rb +0 -89
- data/lib/hecks/doors/ruby_door.rb +0 -80
- data/lib/hecks/doors/usage_cache.rb +0 -139
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/body_widget.js.tmpl +0 -282
- data/lib/hecks/projections/site/cms_editor/templates/src/ui/media_picker.js.tmpl +0 -109
- data/prebuilt/c28d6d9db14eea3e17161e9d9c262efee30b256cf97693a7cfd552bce24b2f7f.marshal +0 -0
- data/prebuilt/cb375cba61ca0dbe8ddb9739c306510fe05e5f4b7a9b6955caff8224c63ea0e0.marshal +0 -0
- data/prebuilt/verdicts-d6d584ad43b5f3cebf88aafbbdbf024c38574acf18e06adffbc555f7786b1c2f.json +0 -1
|
@@ -1902,6 +1902,378 @@
|
|
|
1902
1902
|
"value": ".unset?"
|
|
1903
1903
|
}
|
|
1904
1904
|
}
|
|
1905
|
+
},
|
|
1906
|
+
{
|
|
1907
|
+
"verb": "Expression::Operator.Propose",
|
|
1908
|
+
"args": {
|
|
1909
|
+
"symbol": {
|
|
1910
|
+
"value": ".strip"
|
|
1911
|
+
},
|
|
1912
|
+
"category": {
|
|
1913
|
+
"value": "text"
|
|
1914
|
+
},
|
|
1915
|
+
"precedence": {
|
|
1916
|
+
"value": 7
|
|
1917
|
+
},
|
|
1918
|
+
"arity": {
|
|
1919
|
+
"value": 1
|
|
1920
|
+
},
|
|
1921
|
+
"grammar": {
|
|
1922
|
+
"value": "inner"
|
|
1923
|
+
},
|
|
1924
|
+
"strategy": {
|
|
1925
|
+
"value": "suffix_match"
|
|
1926
|
+
},
|
|
1927
|
+
"position": {
|
|
1928
|
+
"value": 23
|
|
1929
|
+
}
|
|
1930
|
+
}
|
|
1931
|
+
},
|
|
1932
|
+
{
|
|
1933
|
+
"verb": "Expression::Operator.Render",
|
|
1934
|
+
"args": {
|
|
1935
|
+
"symbol": {
|
|
1936
|
+
"value": ".strip"
|
|
1937
|
+
},
|
|
1938
|
+
"target": {
|
|
1939
|
+
"value": "ruby"
|
|
1940
|
+
},
|
|
1941
|
+
"form": {
|
|
1942
|
+
"value": "a.strip"
|
|
1943
|
+
}
|
|
1944
|
+
}
|
|
1945
|
+
},
|
|
1946
|
+
{
|
|
1947
|
+
"verb": "Expression::Operator.Render",
|
|
1948
|
+
"args": {
|
|
1949
|
+
"symbol": {
|
|
1950
|
+
"value": ".strip"
|
|
1951
|
+
},
|
|
1952
|
+
"target": {
|
|
1953
|
+
"value": "rust"
|
|
1954
|
+
},
|
|
1955
|
+
"form": {
|
|
1956
|
+
"value": "a.strip -> a without leading and trailing whitespace"
|
|
1957
|
+
}
|
|
1958
|
+
}
|
|
1959
|
+
},
|
|
1960
|
+
{
|
|
1961
|
+
"verb": "Expression::Operator.Admit",
|
|
1962
|
+
"args": {
|
|
1963
|
+
"symbol": {
|
|
1964
|
+
"value": ".strip"
|
|
1965
|
+
}
|
|
1966
|
+
}
|
|
1967
|
+
},
|
|
1968
|
+
{
|
|
1969
|
+
"verb": "Expression::Operator.Propose",
|
|
1970
|
+
"args": {
|
|
1971
|
+
"symbol": {
|
|
1972
|
+
"value": ".lstrip"
|
|
1973
|
+
},
|
|
1974
|
+
"category": {
|
|
1975
|
+
"value": "text"
|
|
1976
|
+
},
|
|
1977
|
+
"precedence": {
|
|
1978
|
+
"value": 7
|
|
1979
|
+
},
|
|
1980
|
+
"arity": {
|
|
1981
|
+
"value": 1
|
|
1982
|
+
},
|
|
1983
|
+
"grammar": {
|
|
1984
|
+
"value": "inner"
|
|
1985
|
+
},
|
|
1986
|
+
"strategy": {
|
|
1987
|
+
"value": "suffix_match"
|
|
1988
|
+
},
|
|
1989
|
+
"position": {
|
|
1990
|
+
"value": 24
|
|
1991
|
+
}
|
|
1992
|
+
}
|
|
1993
|
+
},
|
|
1994
|
+
{
|
|
1995
|
+
"verb": "Expression::Operator.Render",
|
|
1996
|
+
"args": {
|
|
1997
|
+
"symbol": {
|
|
1998
|
+
"value": ".lstrip"
|
|
1999
|
+
},
|
|
2000
|
+
"target": {
|
|
2001
|
+
"value": "ruby"
|
|
2002
|
+
},
|
|
2003
|
+
"form": {
|
|
2004
|
+
"value": "a.lstrip"
|
|
2005
|
+
}
|
|
2006
|
+
}
|
|
2007
|
+
},
|
|
2008
|
+
{
|
|
2009
|
+
"verb": "Expression::Operator.Render",
|
|
2010
|
+
"args": {
|
|
2011
|
+
"symbol": {
|
|
2012
|
+
"value": ".lstrip"
|
|
2013
|
+
},
|
|
2014
|
+
"target": {
|
|
2015
|
+
"value": "rust"
|
|
2016
|
+
},
|
|
2017
|
+
"form": {
|
|
2018
|
+
"value": "a.lstrip -> a without leading whitespace"
|
|
2019
|
+
}
|
|
2020
|
+
}
|
|
2021
|
+
},
|
|
2022
|
+
{
|
|
2023
|
+
"verb": "Expression::Operator.Admit",
|
|
2024
|
+
"args": {
|
|
2025
|
+
"symbol": {
|
|
2026
|
+
"value": ".lstrip"
|
|
2027
|
+
}
|
|
2028
|
+
}
|
|
2029
|
+
},
|
|
2030
|
+
{
|
|
2031
|
+
"verb": "Expression::Operator.Propose",
|
|
2032
|
+
"args": {
|
|
2033
|
+
"symbol": {
|
|
2034
|
+
"value": ".rstrip"
|
|
2035
|
+
},
|
|
2036
|
+
"category": {
|
|
2037
|
+
"value": "text"
|
|
2038
|
+
},
|
|
2039
|
+
"precedence": {
|
|
2040
|
+
"value": 7
|
|
2041
|
+
},
|
|
2042
|
+
"arity": {
|
|
2043
|
+
"value": 1
|
|
2044
|
+
},
|
|
2045
|
+
"grammar": {
|
|
2046
|
+
"value": "inner"
|
|
2047
|
+
},
|
|
2048
|
+
"strategy": {
|
|
2049
|
+
"value": "suffix_match"
|
|
2050
|
+
},
|
|
2051
|
+
"position": {
|
|
2052
|
+
"value": 25
|
|
2053
|
+
}
|
|
2054
|
+
}
|
|
2055
|
+
},
|
|
2056
|
+
{
|
|
2057
|
+
"verb": "Expression::Operator.Render",
|
|
2058
|
+
"args": {
|
|
2059
|
+
"symbol": {
|
|
2060
|
+
"value": ".rstrip"
|
|
2061
|
+
},
|
|
2062
|
+
"target": {
|
|
2063
|
+
"value": "ruby"
|
|
2064
|
+
},
|
|
2065
|
+
"form": {
|
|
2066
|
+
"value": "a.rstrip"
|
|
2067
|
+
}
|
|
2068
|
+
}
|
|
2069
|
+
},
|
|
2070
|
+
{
|
|
2071
|
+
"verb": "Expression::Operator.Render",
|
|
2072
|
+
"args": {
|
|
2073
|
+
"symbol": {
|
|
2074
|
+
"value": ".rstrip"
|
|
2075
|
+
},
|
|
2076
|
+
"target": {
|
|
2077
|
+
"value": "rust"
|
|
2078
|
+
},
|
|
2079
|
+
"form": {
|
|
2080
|
+
"value": "a.rstrip -> a without trailing whitespace"
|
|
2081
|
+
}
|
|
2082
|
+
}
|
|
2083
|
+
},
|
|
2084
|
+
{
|
|
2085
|
+
"verb": "Expression::Operator.Admit",
|
|
2086
|
+
"args": {
|
|
2087
|
+
"symbol": {
|
|
2088
|
+
"value": ".rstrip"
|
|
2089
|
+
}
|
|
2090
|
+
}
|
|
2091
|
+
},
|
|
2092
|
+
{
|
|
2093
|
+
"verb": "Expression::Operator.Propose",
|
|
2094
|
+
"args": {
|
|
2095
|
+
"symbol": {
|
|
2096
|
+
"value": "-"
|
|
2097
|
+
},
|
|
2098
|
+
"category": {
|
|
2099
|
+
"value": "arithmetic"
|
|
2100
|
+
},
|
|
2101
|
+
"precedence": {
|
|
2102
|
+
"value": 6
|
|
2103
|
+
},
|
|
2104
|
+
"arity": {
|
|
2105
|
+
"value": 2
|
|
2106
|
+
},
|
|
2107
|
+
"grammar": {
|
|
2108
|
+
"value": "inner"
|
|
2109
|
+
},
|
|
2110
|
+
"strategy": {
|
|
2111
|
+
"value": "top_level_split"
|
|
2112
|
+
},
|
|
2113
|
+
"position": {
|
|
2114
|
+
"value": 26
|
|
2115
|
+
}
|
|
2116
|
+
}
|
|
2117
|
+
},
|
|
2118
|
+
{
|
|
2119
|
+
"verb": "Expression::Operator.Render",
|
|
2120
|
+
"args": {
|
|
2121
|
+
"symbol": {
|
|
2122
|
+
"value": "-"
|
|
2123
|
+
},
|
|
2124
|
+
"target": {
|
|
2125
|
+
"value": "ruby"
|
|
2126
|
+
},
|
|
2127
|
+
"form": {
|
|
2128
|
+
"value": "a - b"
|
|
2129
|
+
}
|
|
2130
|
+
}
|
|
2131
|
+
},
|
|
2132
|
+
{
|
|
2133
|
+
"verb": "Expression::Operator.Render",
|
|
2134
|
+
"args": {
|
|
2135
|
+
"symbol": {
|
|
2136
|
+
"value": "-"
|
|
2137
|
+
},
|
|
2138
|
+
"target": {
|
|
2139
|
+
"value": "rust"
|
|
2140
|
+
},
|
|
2141
|
+
"form": {
|
|
2142
|
+
"value": "a - b -> checked i64 arithmetic, refusing on overflow"
|
|
2143
|
+
}
|
|
2144
|
+
}
|
|
2145
|
+
},
|
|
2146
|
+
{
|
|
2147
|
+
"verb": "Expression::Operator.Admit",
|
|
2148
|
+
"args": {
|
|
2149
|
+
"symbol": {
|
|
2150
|
+
"value": "-"
|
|
2151
|
+
}
|
|
2152
|
+
}
|
|
2153
|
+
},
|
|
2154
|
+
{
|
|
2155
|
+
"verb": "Expression::Operator.Propose",
|
|
2156
|
+
"args": {
|
|
2157
|
+
"symbol": {
|
|
2158
|
+
"value": "*"
|
|
2159
|
+
},
|
|
2160
|
+
"category": {
|
|
2161
|
+
"value": "arithmetic"
|
|
2162
|
+
},
|
|
2163
|
+
"precedence": {
|
|
2164
|
+
"value": 7
|
|
2165
|
+
},
|
|
2166
|
+
"arity": {
|
|
2167
|
+
"value": 2
|
|
2168
|
+
},
|
|
2169
|
+
"grammar": {
|
|
2170
|
+
"value": "inner"
|
|
2171
|
+
},
|
|
2172
|
+
"strategy": {
|
|
2173
|
+
"value": "top_level_split"
|
|
2174
|
+
},
|
|
2175
|
+
"position": {
|
|
2176
|
+
"value": 27
|
|
2177
|
+
}
|
|
2178
|
+
}
|
|
2179
|
+
},
|
|
2180
|
+
{
|
|
2181
|
+
"verb": "Expression::Operator.Render",
|
|
2182
|
+
"args": {
|
|
2183
|
+
"symbol": {
|
|
2184
|
+
"value": "*"
|
|
2185
|
+
},
|
|
2186
|
+
"target": {
|
|
2187
|
+
"value": "ruby"
|
|
2188
|
+
},
|
|
2189
|
+
"form": {
|
|
2190
|
+
"value": "a * b"
|
|
2191
|
+
}
|
|
2192
|
+
}
|
|
2193
|
+
},
|
|
2194
|
+
{
|
|
2195
|
+
"verb": "Expression::Operator.Render",
|
|
2196
|
+
"args": {
|
|
2197
|
+
"symbol": {
|
|
2198
|
+
"value": "*"
|
|
2199
|
+
},
|
|
2200
|
+
"target": {
|
|
2201
|
+
"value": "rust"
|
|
2202
|
+
},
|
|
2203
|
+
"form": {
|
|
2204
|
+
"value": "a * b -> checked i64 arithmetic, refusing on overflow"
|
|
2205
|
+
}
|
|
2206
|
+
}
|
|
2207
|
+
},
|
|
2208
|
+
{
|
|
2209
|
+
"verb": "Expression::Operator.Admit",
|
|
2210
|
+
"args": {
|
|
2211
|
+
"symbol": {
|
|
2212
|
+
"value": "*"
|
|
2213
|
+
}
|
|
2214
|
+
}
|
|
2215
|
+
},
|
|
2216
|
+
{
|
|
2217
|
+
"verb": "Expression::Operator.Propose",
|
|
2218
|
+
"args": {
|
|
2219
|
+
"symbol": {
|
|
2220
|
+
"value": "/"
|
|
2221
|
+
},
|
|
2222
|
+
"category": {
|
|
2223
|
+
"value": "arithmetic"
|
|
2224
|
+
},
|
|
2225
|
+
"precedence": {
|
|
2226
|
+
"value": 7
|
|
2227
|
+
},
|
|
2228
|
+
"arity": {
|
|
2229
|
+
"value": 2
|
|
2230
|
+
},
|
|
2231
|
+
"grammar": {
|
|
2232
|
+
"value": "inner"
|
|
2233
|
+
},
|
|
2234
|
+
"strategy": {
|
|
2235
|
+
"value": "top_level_split"
|
|
2236
|
+
},
|
|
2237
|
+
"position": {
|
|
2238
|
+
"value": 28
|
|
2239
|
+
}
|
|
2240
|
+
}
|
|
2241
|
+
},
|
|
2242
|
+
{
|
|
2243
|
+
"verb": "Expression::Operator.Render",
|
|
2244
|
+
"args": {
|
|
2245
|
+
"symbol": {
|
|
2246
|
+
"value": "/"
|
|
2247
|
+
},
|
|
2248
|
+
"target": {
|
|
2249
|
+
"value": "ruby"
|
|
2250
|
+
},
|
|
2251
|
+
"form": {
|
|
2252
|
+
"value": "a / b"
|
|
2253
|
+
}
|
|
2254
|
+
}
|
|
2255
|
+
},
|
|
2256
|
+
{
|
|
2257
|
+
"verb": "Expression::Operator.Render",
|
|
2258
|
+
"args": {
|
|
2259
|
+
"symbol": {
|
|
2260
|
+
"value": "/"
|
|
2261
|
+
},
|
|
2262
|
+
"target": {
|
|
2263
|
+
"value": "rust"
|
|
2264
|
+
},
|
|
2265
|
+
"form": {
|
|
2266
|
+
"value": "a / b -> floor division on integers, refusing a zero divisor and overflow"
|
|
2267
|
+
}
|
|
2268
|
+
}
|
|
2269
|
+
},
|
|
2270
|
+
{
|
|
2271
|
+
"verb": "Expression::Operator.Admit",
|
|
2272
|
+
"args": {
|
|
2273
|
+
"symbol": {
|
|
2274
|
+
"value": "/"
|
|
2275
|
+
}
|
|
2276
|
+
}
|
|
1905
2277
|
}
|
|
1906
2278
|
]
|
|
1907
2279
|
}
|
|
@@ -96,7 +96,9 @@ module Hecks
|
|
|
96
96
|
[[evaluator::Or, "||", %i[left right]], [evaluator::And, "&&", %i[left right]],
|
|
97
97
|
[evaluator::Not, "!", %i[node]], [evaluator::Compare, ->(node) { node.operator.symbol }, %i[left right]],
|
|
98
98
|
[evaluator::Include, ".include?", %i[haystack needle]], [evaluator::Resolve, nil, %i[expr]],
|
|
99
|
-
[resolver::Addition, "+", %i[left right]], [resolver::
|
|
99
|
+
[resolver::Addition, "+", %i[left right]], [resolver::Subtraction, "-", %i[left right]],
|
|
100
|
+
[resolver::Multiplication, "*", %i[left right]], [resolver::Division, "/", %i[left right]],
|
|
101
|
+
[resolver::Modulo, ".modulo", %i[receiver divisor]]]
|
|
100
102
|
end
|
|
101
103
|
|
|
102
104
|
# @return [Array<String>] operators found in the members of a Struct node; none for any
|
|
@@ -11,12 +11,12 @@ module Hecks
|
|
|
11
11
|
module Adapters
|
|
12
12
|
module Codebase
|
|
13
13
|
# What Codebase's `CorpusRun` asks of the working tree: which committed domains have a Rust
|
|
14
|
-
# feature, what the language's IR holds, and the two
|
|
14
|
+
# feature, what the language's IR holds, and the two servers that serve it.
|
|
15
15
|
#
|
|
16
16
|
# The questions are pure reads and run in this process, with the code `hecks rust_domains` and
|
|
17
17
|
# `hecks ir_constructs` run (`Hecks::Corpus`, `Hecks::QueryIR`); the coverage question runs
|
|
18
18
|
# `Hecks::RustBuild`'s coverage tool over each generated module, also in this process. The
|
|
19
|
-
# two
|
|
19
|
+
# two servers run until they are closed: the query MCP server on stdio, and the forms app on a
|
|
20
20
|
# local port.
|
|
21
21
|
module CorpusTasks
|
|
22
22
|
# Every operation this family carries out.
|
|
@@ -26,7 +26,7 @@ module Hecks
|
|
|
26
26
|
DEFAULT_PORT = 4567
|
|
27
27
|
|
|
28
28
|
class << self
|
|
29
|
-
# @return [#call, nil] serves the MCP
|
|
29
|
+
# @return [#call, nil] serves the MCP server; `Hecks::QueryIrMcp.start` when nil. A spec
|
|
30
30
|
# replaces it so no stdio has to be held.
|
|
31
31
|
attr_accessor :mcp_server
|
|
32
32
|
|
|
@@ -41,14 +41,14 @@ module Hecks
|
|
|
41
41
|
|
|
42
42
|
module_function
|
|
43
43
|
|
|
44
|
-
# Opens one of the
|
|
44
|
+
# Opens one of the servers.
|
|
45
45
|
#
|
|
46
46
|
# @param operation [String] `serve_query_ir_mcp` or `present`
|
|
47
47
|
# @param held [Hash] the `CorpusRun` record's fields: `port`
|
|
48
48
|
# @param tree [Tree] the working tree, already known to be a hecks checkout
|
|
49
49
|
# @param shell [#capture, nil] unused
|
|
50
|
-
# @return [String] a note that the
|
|
51
|
-
# @raise [ConsoleCapture::Failure] when the MCP
|
|
50
|
+
# @return [String] a note that the server closed
|
|
51
|
+
# @raise [ConsoleCapture::Failure] when the MCP server refuses the process's setup
|
|
52
52
|
def call(operation, held, tree, shell: nil)
|
|
53
53
|
_ = shell
|
|
54
54
|
return serve_mcp if operation == "serve_query_ir_mcp"
|
|
@@ -78,14 +78,14 @@ module Hecks
|
|
|
78
78
|
# @return [Hash] the same fields as plain values
|
|
79
79
|
def plain(held) = held.transform_values { |value| value.is_a?(Hash) ? value[:value] : value }
|
|
80
80
|
|
|
81
|
-
# @return [String] a note that the MCP
|
|
82
|
-
# @raise [ConsoleCapture::Failure] when the
|
|
81
|
+
# @return [String] a note that the MCP server closed
|
|
82
|
+
# @raise [ConsoleCapture::Failure] when the server refuses to start
|
|
83
83
|
def serve_mcp
|
|
84
84
|
server = CorpusTasks.mcp_server || ->(**options) { QueryIrMcp.start(**options) }
|
|
85
85
|
server.call(argv: [])
|
|
86
|
-
"query ir mcp
|
|
86
|
+
"query ir mcp server closed"
|
|
87
87
|
rescue SystemExit => e
|
|
88
|
-
raise ConsoleCapture::Failure, "the query ir mcp
|
|
88
|
+
raise ConsoleCapture::Failure, "the query ir mcp server refused to start (status #{e.status}); see stderr"
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
# @param port [Integer] the port to listen on
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Runs rubycritic with its git root taken from git.
|
|
4
|
+
#
|
|
5
|
+
# rubycritic finds the repository root by walking up to the first `.git` directory. A linked
|
|
6
|
+
# worktree has a `.git` file instead, so inside one nested in its main checkout the walk passes the
|
|
7
|
+
# worktree and stops at the main checkout's directory. Churn is then read from the wrong tree and
|
|
8
|
+
# comes back 0 for every file. Asking git for the top level answers right in either layout.
|
|
9
|
+
#
|
|
10
|
+
# Started as a program by `Inspection`: `ruby rubycritic.rb <rubycritic arguments>`. Required, it
|
|
11
|
+
# installs the churn fix and runs nothing, so it loads standalone like every other lib file.
|
|
12
|
+
require "rubycritic/cli/application"
|
|
13
|
+
|
|
14
|
+
module Hecks
|
|
15
|
+
module Adapters
|
|
16
|
+
module Codebase
|
|
17
|
+
module Inspection
|
|
18
|
+
# Gives rubycritic's churn the root git reports for the directory it runs in.
|
|
19
|
+
module GitToplevel
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
# @return [String] the top level of the working tree the current directory is in
|
|
23
|
+
def find_git_root
|
|
24
|
+
root = `git rev-parse --show-toplevel`.strip
|
|
25
|
+
root.empty? ? super : root
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
RubyCritic::SourceControlSystem::Git::Churn.prepend(Hecks::Adapters::Codebase::Inspection::GitToplevel)
|
|
34
|
+
|
|
35
|
+
exit RubyCritic::Cli::Application.new(ARGV).execute if File.expand_path($PROGRAM_NAME) == File.expand_path(__FILE__)
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "yaml"
|
|
4
|
+
require_relative "tree"
|
|
5
|
+
require_relative "../shell"
|
|
6
|
+
require_relative "../console_capture"
|
|
7
|
+
|
|
8
|
+
module Hecks
|
|
9
|
+
module Adapters
|
|
10
|
+
module Codebase
|
|
11
|
+
# What Codebase's `InspectionRun` asks of the working tree: ranking its Ruby by complexity
|
|
12
|
+
# (flog), finding copied code (flay), listing design smells (reek), and writing the combined
|
|
13
|
+
# report with git churn (rubycritic).
|
|
14
|
+
#
|
|
15
|
+
# The tools take no exclude list of their own, so the files are listed here first and the
|
|
16
|
+
# ones `.rubocop.yml` excludes (generated output, vendored code) are left out: a finding in
|
|
17
|
+
# one belongs to its generator. Each tool then runs from the checkout's root through
|
|
18
|
+
# `bundle exec`, and what it printed is the report.
|
|
19
|
+
module Inspection
|
|
20
|
+
# Every operation this family carries out, one for each tool.
|
|
21
|
+
OPERATIONS = %w[flog flay reek rubycritic].freeze
|
|
22
|
+
|
|
23
|
+
# rubycritic starts through a launcher that finds the git root right inside a worktree.
|
|
24
|
+
RUBYCRITIC = ["ruby", File.join(__dir__, "inspection", "rubycritic.rb"), "--no-browser"].freeze
|
|
25
|
+
|
|
26
|
+
# The program and flags each operation starts, before the files.
|
|
27
|
+
PROGRAMS = { "flog" => %w[flog --methods-only],
|
|
28
|
+
"flay" => %w[flay],
|
|
29
|
+
"reek" => %w[reek],
|
|
30
|
+
"rubycritic" => RUBYCRITIC }.freeze
|
|
31
|
+
|
|
32
|
+
# The statuses that still mean the tool reported: reek ends 2 when it found smells.
|
|
33
|
+
REPORTING = { "reek" => [0, 2] }.freeze
|
|
34
|
+
|
|
35
|
+
# Searched when no path is named.
|
|
36
|
+
DEFAULT_PATHS = "lib"
|
|
37
|
+
|
|
38
|
+
module_function
|
|
39
|
+
|
|
40
|
+
# Carries out one operation.
|
|
41
|
+
#
|
|
42
|
+
# @param operation [String] one of `OPERATIONS`
|
|
43
|
+
# @param held [Hash] the `InspectionRun` record's fields: `paths` and `top`
|
|
44
|
+
# @param tree [Tree] the working tree, already known to be a hecks checkout
|
|
45
|
+
# @param shell [#capture, nil] starts the tool; a `Shell` when nil
|
|
46
|
+
# @return [String] what the tool printed, cut to `top` lines when that is named
|
|
47
|
+
# @raise [ConsoleCapture::Failure] when no Ruby file is named, or the tool is missing
|
|
48
|
+
# or fails
|
|
49
|
+
def call(operation, held, tree, shell: nil)
|
|
50
|
+
args = held.transform_values { |value| value.is_a?(Hash) ? value[:value] : value }
|
|
51
|
+
files = ruby_files(tree, args[:paths] || DEFAULT_PATHS)
|
|
52
|
+
raise ConsoleCapture::Failure, "no Ruby file under #{args[:paths] || DEFAULT_PATHS}" if files.empty?
|
|
53
|
+
|
|
54
|
+
result = (shell || Shell.new).capture("bundle", "exec", *PROGRAMS.fetch(operation), *files,
|
|
55
|
+
chdir: tree.root)
|
|
56
|
+
shorten(report(operation, result), args[:top])
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# @param operation [String] the tool's name
|
|
60
|
+
# @param result [Shell::Result] what the tool said
|
|
61
|
+
# @return [String] its output
|
|
62
|
+
# @raise [ConsoleCapture::Failure] when it ended in a status that is not a report
|
|
63
|
+
def report(operation, result)
|
|
64
|
+
return result.out if REPORTING.fetch(operation, [0]).include?(result.status.exitstatus)
|
|
65
|
+
|
|
66
|
+
raise ConsoleCapture::Failure,
|
|
67
|
+
"#{operation} ended with status #{result.status.exitstatus}: #{result.err}#{result.out}".strip
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# @param text [String] a report
|
|
71
|
+
# @param top [Integer, nil] how many lines to keep
|
|
72
|
+
# @return [String] the first `top` lines, or the whole text
|
|
73
|
+
def shorten(text, top)
|
|
74
|
+
top ? text.lines.first(top).join : text
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# The Ruby files under the named paths, less those the style config excludes.
|
|
78
|
+
#
|
|
79
|
+
# @param tree [Tree] the checkout
|
|
80
|
+
# @param paths [String] comma-separated files or directories, relative to the root
|
|
81
|
+
# @return [Array<String>] the files, relative to the root and sorted
|
|
82
|
+
def ruby_files(tree, paths)
|
|
83
|
+
excluded = exclusions(tree)
|
|
84
|
+
paths.split(",").flat_map { |path| listing(tree, path) }.uniq.sort.reject do |file|
|
|
85
|
+
excluded.any? { |glob| File.fnmatch?(glob, file, File::FNM_PATHNAME | File::FNM_EXTGLOB) }
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# @return [Array<String>] the files at one path: itself when a file, else every `.rb` below
|
|
90
|
+
def listing(tree, path)
|
|
91
|
+
return [path] if File.file?(tree.path(path))
|
|
92
|
+
|
|
93
|
+
Dir.glob("#{path}/**/*.rb", base: tree.root)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# @return [Array<String>] the globs `.rubocop.yml` excludes from every cop
|
|
97
|
+
def exclusions(tree)
|
|
98
|
+
config = YAML.safe_load_file(tree.path(".rubocop.yml"), permitted_classes: [Symbol])
|
|
99
|
+
Array(config.dig("AllCops", "Exclude"))
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
@@ -46,7 +46,8 @@ module Hecks
|
|
|
46
46
|
none = { value: "none" }
|
|
47
47
|
{ operation: { value: operation }, version: { value: "0.0.0" }, client_version: { value: "0.0.0" },
|
|
48
48
|
ir_version: { value: "0.0.0" }, ships_from: { path: "none" }, branch: none, head: none, release_lane: none,
|
|
49
|
-
tag_state: none, on_origin: { value: false }, clean: { value: false }, changelog: { value: false }
|
|
49
|
+
tag_state: none, on_origin: { value: false }, clean: { value: false }, changelog: { value: false },
|
|
50
|
+
approved: { value: false } }
|
|
50
51
|
end
|
|
51
52
|
|
|
52
53
|
# Carries out an accepted request.
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
require "json"
|
|
4
4
|
require "hecks/release/runner"
|
|
5
5
|
require "hecks/release/lane"
|
|
6
|
+
require "hecks/release/approval"
|
|
6
7
|
require_relative "tree"
|
|
7
8
|
require_relative "../console_capture"
|
|
8
9
|
|
|
@@ -15,8 +16,9 @@ module Hecks
|
|
|
15
16
|
# It reads the branch, the lane a release is cut from (the `Lane` row that feeds a tag),
|
|
16
17
|
# whether `HEAD` is that lane's `origin/` branch (after a fetch), whether the tree is
|
|
17
18
|
# clean, the gem's version and the client package's, whether the changelog has a heading for
|
|
18
|
-
# the version,
|
|
19
|
-
#
|
|
19
|
+
# the version, whether the commit that set the version carries the owner's approval trailer,
|
|
20
|
+
# and where a tag for the version already points. Nothing is changed but the remote-tracking
|
|
21
|
+
# refs a fetch updates.
|
|
20
22
|
class ReleaseFacts
|
|
21
23
|
# The line of `lib/hecks/version.rb` that declares the version.
|
|
22
24
|
VERSION_LINE = /^\s*VERSION\s*=\s*"(?<version>[^"]+)"/
|
|
@@ -54,6 +56,7 @@ module Hecks
|
|
|
54
56
|
fetch_origin!
|
|
55
57
|
head = read("rev-parse", "HEAD")
|
|
56
58
|
lane_facts(head).merge(clean: flag(read("status", "--porcelain").empty?),
|
|
59
|
+
approved: flag(approved?),
|
|
57
60
|
tag_state: word(tag_state("v#{version}", head)))
|
|
58
61
|
end
|
|
59
62
|
|
|
@@ -69,6 +72,13 @@ module Hecks
|
|
|
69
72
|
on_origin: flag(head == read("rev-parse", "origin/#{lane}")) }
|
|
70
73
|
end
|
|
71
74
|
|
|
75
|
+
# Whether the newest commit on this checkout that set the version names who approved the
|
|
76
|
+
# release in its message (the trailer the `Lane` row names).
|
|
77
|
+
def approved?
|
|
78
|
+
message = read("log", "--first-parent", "-1", "--format=%B", "-G^ *VERSION = ", "--", "lib/hecks/version.rb")
|
|
79
|
+
!Release::Approval.approver(message).nil?
|
|
80
|
+
end
|
|
81
|
+
|
|
72
82
|
def tag_state(tag, head)
|
|
73
83
|
tagger = Release::Runner::Tagger.new(git: @git, console: nil, dry_run: true)
|
|
74
84
|
commits = [tagger.local_commit(tag), tagger.remote_commit(tag)].compact
|
|
@@ -7,6 +7,7 @@ require_relative "conformance"
|
|
|
7
7
|
require_relative "regeneration"
|
|
8
8
|
require_relative "gate"
|
|
9
9
|
require_relative "style"
|
|
10
|
+
require_relative "inspection"
|
|
10
11
|
require_relative "codemods"
|
|
11
12
|
require_relative "test_suite"
|
|
12
13
|
require_relative "corpus_tasks"
|
|
@@ -181,7 +182,7 @@ module Hecks
|
|
|
181
182
|
|
|
182
183
|
# The task families, each carrying out the operations it lists.
|
|
183
184
|
FAMILIES = [Codebase::Language, Codebase::KernelTables, Codebase::Conformance, Codebase::Regeneration,
|
|
184
|
-
Codebase::Gate, Codebase::Style, Codebase::Codemods, Codebase::TestSuite,
|
|
185
|
+
Codebase::Gate, Codebase::Style, Codebase::Inspection, Codebase::Codemods, Codebase::TestSuite,
|
|
185
186
|
Codebase::CorpusTasks, Codebase::Publishing, Codebase::Promotion].freeze
|
|
186
187
|
private_constant :FAMILIES
|
|
187
188
|
|
|
@@ -55,7 +55,7 @@ module Hecks
|
|
|
55
55
|
return self.class.runner if self.class.runner
|
|
56
56
|
|
|
57
57
|
require "rspec/core"
|
|
58
|
-
# A process that runs one example after another, as a resident
|
|
58
|
+
# A process that runs one example after another, as a resident server does, has to reset
|
|
59
59
|
# RSpec between runs: its reporter keeps the first run's output stream, so a later run
|
|
60
60
|
# would write into that and answer an empty report.
|
|
61
61
|
lambda do |args, err, out|
|