hecks 6.0.0 → 7.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/exe/hecks +19 -12
- data/lib/hecks/adapters/driven/claude_code.rb +2 -2
- data/lib/hecks/adapters/driven/folder.rb +10 -1
- data/lib/hecks/adapters/driven/folder_overlay.rb +15 -0
- data/lib/hecks/adapters/driven/heki.rb +1 -1
- data/lib/hecks/adapters/driven/in_process_key_vault.rb +1 -1
- data/lib/hecks/adapters/driven/memory/outbox_rows.rb +2 -2
- data/lib/hecks/adapters/driven/postgres/name_guard.rb +25 -0
- data/lib/hecks/adapters/driven/postgres/outbox.rb +3 -3
- data/lib/hecks/adapters/driven/postgres/repository.rb +1 -1
- data/lib/hecks/adapters/driven/postgres/shared_connection.rb +1 -1
- data/lib/hecks/adapters/driven/postgres.rb +3 -0
- data/lib/hecks/adapters/driven/postgres_era/boot.rb +28 -16
- data/lib/hecks/adapters/driven/postgres_era/class_methods.rb +27 -7
- data/lib/hecks/adapters/driven/postgres_era/dialect.rb +10 -5
- data/lib/hecks/adapters/driven/postgres_era/field_cache_provisioner.rb +39 -0
- data/lib/hecks/adapters/driven/postgres_era/journal.rb +52 -13
- data/lib/hecks/adapters/driven/postgres_era/lineage/chain_sql.rb +29 -49
- data/lib/hecks/adapters/driven/postgres_era/lineage/direct_sql.rb +73 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/direct_verified.json +10 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/direct_verified.rb +65 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/domain_rename.rb +77 -25
- data/lib/hecks/adapters/driven/postgres_era/lineage/domain_rename_state.rb +108 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/era_integrity.rb +11 -6
- data/lib/hecks/adapters/driven/postgres_era/lineage/era_store.rb +63 -5
- data/lib/hecks/adapters/driven/postgres_era/lineage/layered_sql.rb +64 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/ledger_reset.rb +150 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/mint_provisioning.rb +85 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/mint_transaction.rb +11 -7
- data/lib/hecks/adapters/driven/postgres_era/lineage/provisioning.rb +11 -5
- data/lib/hecks/adapters/driven/postgres_era/lineage/split_sql.rb +76 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/sql_templates.rb +9 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage.rb +10 -2
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/context.rb +23 -3
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/coverage_check.rb +3 -1
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/disposable_ledger.rb +119 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/era_resolution.rb +219 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/era_resolver.rb +68 -71
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/held_era.rb +68 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/ledger_change.rb +63 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/merge_coordinator.rb +1 -1
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/mint_decision.rb +163 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/mint_request.rb +24 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/minter.rb +59 -21
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/refusals.rb +24 -11
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager.rb +40 -6
- data/lib/hecks/adapters/driven/postgres_era/shared_tables.rb +32 -0
- data/lib/hecks/adapters/driven/postgres_era.adapter +12 -0
- data/lib/hecks/adapters/driven/postgres_era.rb +25 -10
- data/lib/hecks/adapters/driven/prism.rb +0 -1
- data/lib/hecks/adapters/driven/sql_query_builder.rb +1 -0
- data/lib/hecks/adapters/driven/sqlite/dispatch_claims.rb +1 -1
- data/lib/hecks/adapters/driven/sqlite/name_guard.rb +25 -0
- data/lib/hecks/adapters/driven/sqlite/outbox.rb +2 -2
- data/lib/hecks/adapters/driven/sqlite/repository.rb +1 -1
- data/lib/hecks/adapters/driven/sqlite/schema_builder.rb +20 -0
- data/lib/hecks/adapters/driven/sqlite.rb +9 -1
- data/lib/hecks/adapters/driven/tenant_provisioner.rb +1 -1
- data/lib/hecks/adapters/driven/worktree_overlay.rb +117 -0
- data/lib/hecks/adapters/driving/cli/shorthand.rb +5 -1
- data/lib/hecks/adapters/driving/cli.rb +1 -1
- data/lib/hecks/adapters/driving/cli_runner/answers.rb +77 -22
- data/lib/hecks/adapters/driving/cli_runner/bang_rule.rb +35 -0
- data/lib/hecks/adapters/driving/cli_runner/completion_words.rb +36 -0
- data/lib/hecks/adapters/driving/cli_runner/json_words.rb +55 -0
- data/lib/hecks/adapters/driving/cli_runner/name_index.rb +63 -0
- data/lib/hecks/adapters/driving/cli_runner/read_context.rb +32 -0
- data/lib/hecks/adapters/driving/cli_runner/renamed_names.rb +49 -0
- data/lib/hecks/adapters/driving/cli_runner/resolution.rb +43 -17
- data/lib/hecks/adapters/driving/cli_runner/resume_words.rb +63 -0
- data/lib/hecks/adapters/driving/cli_runner/run_reference.rb +66 -0
- data/lib/hecks/adapters/driving/cli_runner/run_replay.rb +118 -0
- data/lib/hecks/adapters/driving/cli_runner/search_words.rb +35 -0
- data/lib/hecks/adapters/driving/cli_runner/settling.rb +6 -5
- data/lib/hecks/adapters/driving/cli_runner/streaming.rb +11 -10
- data/lib/hecks/adapters/driving/cli_runner/suggestions.rb +1 -1
- data/lib/hecks/adapters/driving/cli_runner/tour_words.rb +77 -0
- data/lib/hecks/adapters/driving/cli_runner/verb_names.rb +36 -4
- data/lib/hecks/adapters/driving/cli_runner/verbosity.rb +75 -0
- data/lib/hecks/adapters/driving/cli_runner.rb +106 -7
- data/lib/hecks/adapters/driving/context_line.rb +85 -0
- data/lib/hecks/adapters/driving/exit_status.rb +31 -0
- data/lib/hecks/adapters/driving/launcher_options.rb +7 -5
- data/lib/hecks/adapters/driving/mcp/progress_sink.rb +45 -0
- data/lib/hecks/adapters/driving/mcp/tool_calls.rb +7 -5
- data/lib/hecks/adapters/driving/mcp.rb +25 -5
- data/lib/hecks/adapters/driving/mcp_scope/argument_policy.rb +40 -7
- data/lib/hecks/adapters/driving/mcp_scope.rb +8 -7
- data/lib/hecks/adapters/driving/ruby/aggregate_module/hooks.rb +154 -0
- data/lib/hecks/adapters/driving/ruby/aggregate_module.rb +64 -93
- data/lib/hecks/adapters/driving/usage_log.rb +146 -0
- data/lib/hecks/adapters/driving/write_guard.rb +55 -0
- data/lib/hecks/adapters/driving.rb +0 -1
- data/lib/hecks/behaviors/dsl.rb +5 -1
- data/lib/hecks/behaviors/expectations/boot.rb +0 -1
- data/lib/hecks/bluebook/acknowledgements.rb +1 -1
- data/lib/hecks/bluebook/aggregate.rb +21 -18
- data/lib/hecks/bluebook/assembly/contracts/sagas.rb +2 -0
- data/lib/hecks/bluebook/assembly/contracts/structure.rb +18 -13
- data/lib/hecks/bluebook/behaviour/aggregate.rb +27 -3
- data/lib/hecks/bluebook/command.rb +16 -5
- data/lib/hecks/bluebook/declaration.rb +32 -4
- data/lib/hecks/bluebook/domain_port.rb +7 -3
- data/lib/hecks/bluebook/dsl/aggregate_builder/relationships.rb +0 -2
- data/lib/hecks/bluebook/dsl/aggregate_builder/renaming.rb +25 -0
- data/lib/hecks/bluebook/dsl/aggregate_builder.rb +3 -0
- data/lib/hecks/bluebook/dsl/attribute_collector.rb +0 -1
- data/lib/hecks/bluebook/dsl/audience_word.rb +40 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/metadata.rb +56 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/modules.rb +80 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/correlation_keys.rb +51 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation.rb +1 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder.rb +17 -34
- data/lib/hecks/bluebook/dsl/bootstrap_table.rb +8 -0
- data/lib/hecks/bluebook/dsl/command_builder.rb +13 -3
- data/lib/hecks/bluebook/dsl/entity_builder.rb +0 -2
- data/lib/hecks/bluebook/dsl/generic_dispatch.rb +6 -4
- data/lib/hecks/bluebook/dsl/kinds.rb +53 -0
- data/lib/hecks/bluebook/dsl/port_operation_builder.rb +9 -2
- data/lib/hecks/bluebook/dsl/process_manager_builder.rb +25 -15
- data/lib/hecks/bluebook/dsl/translation_builder.rb +16 -1
- data/lib/hecks/bluebook/dsl/word_gate.rb +1 -1
- data/lib/hecks/bluebook/dsl.rb +1 -0
- data/lib/hecks/bluebook/meta_validator/judge/identity.rb +9 -4
- data/lib/hecks/bluebook/meta_validator/plan/category.rb +10 -2
- data/lib/hecks/bluebook/meta_validator/plan/verbs.rb +9 -0
- data/lib/hecks/bluebook/meta_validator/plan.rb +2 -1
- data/lib/hecks/bluebook/meta_validator/reconstruction/heads.rb +3 -1
- data/lib/hecks/bluebook/meta_validator/reconstruction/reading.rb +7 -0
- data/lib/hecks/bluebook/meta_validator/reconstruction.rb +7 -2
- data/lib/hecks/bluebook/meta_validator/shapes.rb +3 -0
- data/lib/hecks/bluebook/meta_validator/syntax_boot/disk_cache.rb +1 -1
- data/lib/hecks/bluebook/model_check/aggregate_checks.rb +27 -0
- data/lib/hecks/bluebook/model_check/ask_checks.rb +25 -0
- data/lib/hecks/bluebook/model_check/reaction_chains.rb +114 -0
- data/lib/hecks/bluebook/model_check/reaction_cycles.rb +53 -0
- data/lib/hecks/bluebook/model_check/reaction_depth_checks.rb +58 -0
- data/lib/hecks/bluebook/model_check/reaction_walk.rb +62 -0
- data/lib/hecks/bluebook/model_check.rb +5 -27
- data/lib/hecks/bluebook/process_manager.rb +20 -3
- data/lib/hecks/bluebook/translation.rb +5 -3
- data/lib/hecks/bluebook/translation_plan.rb +9 -2
- data/lib/hecks/ci_pipeline/adapters/ci_cache.adapter +7 -0
- data/lib/hecks/ci_pipeline/adapters/ci_cache.rb +39 -0
- data/lib/hecks/ci_pipeline/adapters/ci_runner.adapter +7 -0
- data/lib/hecks/ci_pipeline/adapters/ci_runner.rb +55 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.behaviors +322 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.bluebook +938 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.hecksagon +12 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.ports.hecksagon +16 -0
- data/lib/hecks/ci_speed/adapters/ci_reader.adapter +7 -0
- data/lib/hecks/ci_speed/adapters/ci_reader.rb +141 -0
- data/lib/hecks/ci_speed/adapters/local_runner/answer.rb +41 -0
- data/lib/hecks/ci_speed/adapters/local_runner/catalog.rb +89 -0
- data/lib/hecks/ci_speed/adapters/local_runner/checkouts.rb +89 -0
- data/lib/hecks/ci_speed/adapters/local_runner/launcher.rb +69 -0
- data/lib/hecks/ci_speed/adapters/local_runner/load_average.rb +38 -0
- data/lib/hecks/ci_speed/adapters/local_runner/refs.rb +39 -0
- data/lib/hecks/ci_speed/adapters/local_runner/refused.rb +11 -0
- data/lib/hecks/ci_speed/adapters/local_runner/verdict.rb +71 -0
- data/lib/hecks/ci_speed/adapters/local_runner.adapter +7 -0
- data/lib/hecks/ci_speed/adapters/local_runner.rb +168 -0
- data/lib/hecks/ci_speed/adapters/replayed_runner.rb +39 -0
- data/lib/hecks/ci_speed/ci_speed.behaviors +341 -0
- data/lib/hecks/ci_speed/ci_speed.bluebook +1073 -0
- data/lib/hecks/ci_speed/ci_speed.hecksagon +11 -0
- data/lib/hecks/ci_speed/ci_speed.ports.hecksagon +21 -0
- data/lib/hecks/ci_workflows/ci_workflows.behaviors +13 -0
- data/lib/hecks/ci_workflows/ci_workflows.bluebook +173 -0
- data/lib/hecks/ci_workflows/ci_workflows.hecksagon +15 -0
- data/lib/hecks/coder/coder.bluebook +385 -0
- data/lib/hecks/coder/coder.hecksagon +12 -0
- data/lib/hecks/command_names/check.rb +39 -0
- data/lib/hecks/command_names/extractor.rb +67 -0
- data/lib/hecks/command_names/index.rb +40 -0
- data/lib/hecks/command_names/resolution.rb +81 -0
- data/lib/hecks/command_names/scan.rb +54 -0
- data/lib/hecks/command_names/sources.rb +73 -0
- data/lib/hecks/command_names.rb +26 -0
- data/lib/hecks/composer/jobs.rb +1 -1
- data/lib/hecks/composer/toolbox.rb +8 -1
- data/lib/hecks/corpus/generated_key.rb +205 -0
- data/lib/hecks/corpus/listing.rb +34 -0
- data/lib/hecks/corpus/rust.rb +27 -11
- data/lib/hecks/corpus/sources.rb +2 -1
- data/lib/hecks/corpus.rb +37 -42
- data/lib/hecks/deprecation.rb +23 -0
- data/lib/hecks/doc/reference/readme.rb +1 -1
- data/lib/hecks/doc/reference/rendering.rb +2 -2
- data/lib/hecks/doc/reference.rb +1 -1
- data/lib/hecks/embryonaut_bluebook/manifest.rb +1 -1
- data/lib/hecks/fixer/fixer.bluebook +240 -0
- data/lib/hecks/fixer/fixer.hecksagon +17 -0
- data/lib/hecks/framework_bluebooks.rb +32 -7
- data/lib/hecks/fuzzing/concurrent_dispatch/world_copy.rb +1 -0
- data/lib/hecks/fuzzing/isolated_boot/postgres_scratch.rb +11 -12
- data/lib/hecks/fuzzing/isolated_boot/worlds.rb +23 -5
- data/lib/hecks/fuzzing/isolated_boot.rb +1 -1
- data/lib/hecks/fuzzing/mutation/checks.rb +3 -3
- data/lib/hecks/grammar/translation.bluebook +1 -1
- data/lib/hecks/grammar/translation_rules.json +64 -0
- data/lib/hecks/hecks/adapter_words.json +7 -0
- data/lib/hecks/hecks/adapters/area_overlap.rb +156 -0
- data/lib/hecks/hecks/adapters/claude_agents.rb +8 -3
- data/lib/hecks/hecks/adapters/codebase/batch_runs.rb +60 -0
- data/lib/hecks/hecks/adapters/codebase/changed_specs.rb +52 -0
- data/lib/hecks/hecks/adapters/codebase/codemods.rb +3 -2
- data/lib/hecks/hecks/adapters/codebase/conformance.rb +14 -1
- data/lib/hecks/hecks/adapters/codebase/corpus_queries.rb +53 -0
- data/lib/hecks/hecks/adapters/codebase/generated_keys.rb +31 -0
- data/lib/hecks/hecks/adapters/codebase/impacted_specs.rb +110 -0
- data/lib/hecks/hecks/adapters/codebase/language.rb +2 -2
- data/lib/hecks/hecks/adapters/codebase/launcher_text.rb +39 -0
- data/lib/hecks/hecks/adapters/codebase/minitest_runs.rb +52 -0
- data/lib/hecks/hecks/adapters/codebase/regeneration.rb +51 -8
- data/lib/hecks/hecks/adapters/codebase/run_options.rb +35 -0
- data/lib/hecks/hecks/adapters/codebase/scripting.rb +39 -0
- data/lib/hecks/hecks/adapters/codebase/search.rb +1 -1
- data/lib/hecks/hecks/adapters/codebase/source_tree.rb +79 -51
- data/lib/hecks/hecks/adapters/codebase/spec_files/report.rb +71 -0
- data/lib/hecks/hecks/adapters/codebase/spec_files/shared_run.rb +73 -0
- data/lib/hecks/hecks/adapters/codebase/spec_files.rb +95 -0
- data/lib/hecks/hecks/adapters/codebase/test_runner.rb +53 -4
- data/lib/hecks/hecks/adapters/codebase/test_scope.rb +105 -0
- data/lib/hecks/hecks/adapters/codebase/test_suite.rb +48 -34
- data/lib/hecks/hecks/adapters/console_capture.rb +1 -1
- data/lib/hecks/hecks/adapters/cost_explorer.rb +9 -1
- data/lib/hecks/hecks/adapters/dispatching/brief_text.rb +51 -0
- data/lib/hecks/hecks/adapters/dispatching/launcher.rb +97 -0
- data/lib/hecks/hecks/adapters/dispatching/plan.rb +82 -0
- data/lib/hecks/hecks/adapters/dispatching/rows.rb +66 -0
- data/lib/hecks/hecks/adapters/dispatching/settings.rb +81 -0
- data/lib/hecks/hecks/adapters/dispatching/settler.rb +40 -0
- data/lib/hecks/hecks/adapters/dispatching.adapter +7 -0
- data/lib/hecks/hecks/adapters/dispatching.rb +93 -0
- data/lib/hecks/hecks/adapters/doctor_reading/report.rb +27 -0
- data/lib/hecks/hecks/adapters/doctor_reading.adapter +7 -0
- data/lib/hecks/hecks/adapters/doctor_reading.rb +161 -0
- data/lib/hecks/hecks/adapters/git_checkout.rb +1 -1
- data/lib/hecks/hecks/adapters/git_commit.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_commit.rb +61 -0
- data/lib/hecks/hecks/adapters/git_landing/finisher.rb +82 -0
- data/lib/hecks/hecks/adapters/git_landing/foreign_hold.rb +111 -0
- data/lib/hecks/hecks/adapters/git_landing/line.rb +171 -0
- data/lib/hecks/hecks/adapters/git_landing/lineup.rb +98 -0
- data/lib/hecks/hecks/adapters/git_landing/merger.rb +1 -1
- data/lib/hecks/hecks/adapters/git_landing/numbering.rb +54 -0
- data/lib/hecks/hecks/adapters/git_landing/rivals.rb +59 -0
- data/lib/hecks/hecks/adapters/git_landing/ticket.rb +156 -0
- data/lib/hecks/hecks/adapters/git_landing/tidy.rb +147 -0
- data/lib/hecks/hecks/adapters/git_landing/train.rb +104 -0
- data/lib/hecks/hecks/adapters/git_landing/verdict.rb +64 -0
- data/lib/hecks/hecks/adapters/git_landing/waiting.rb +120 -0
- data/lib/hecks/hecks/adapters/git_landing.rb +106 -20
- data/lib/hecks/hecks/adapters/git_main_pull.rb +99 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/bench.rb +82 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/due.rb +84 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/impacted/skips.rb +47 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/impacted/spec_run.rb +75 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/impacted.rb +181 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/line.rb +76 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/reading.rb +24 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/record.rb +146 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/spec_map/corpus.rb +25 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/spec_map/needles.rb +61 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/spec_map.rb +105 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/stages.rb +118 -0
- data/lib/hecks/hecks/adapters/git_rehearsal.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_rehearsal.rb +141 -0
- data/lib/hecks/hecks/adapters/git_train/bench.rb +15 -15
- data/lib/hecks/hecks/adapters/git_train/branch_guard.rb +62 -0
- data/lib/hecks/hecks/adapters/git_train/carriage.rb +27 -28
- data/lib/hecks/hecks/adapters/git_train/launcher_shape.rb +75 -0
- data/lib/hecks/hecks/adapters/git_train/mint_step.rb +47 -0
- data/lib/hecks/hecks/adapters/git_train/settlement.rb +167 -0
- data/lib/hecks/hecks/adapters/git_train.rb +73 -15
- data/lib/hecks/hecks/adapters/git_worktree_add.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_worktree_add.rb +68 -0
- data/lib/hecks/hecks/adapters/github_pull_requests.adapter +7 -0
- data/lib/hecks/hecks/adapters/github_pull_requests.rb +109 -0
- data/lib/hecks/hecks/adapters/host_http.rb +6 -6
- data/lib/hecks/hecks/adapters/in_process_boot.rb +10 -8
- data/lib/hecks/hecks/adapters/in_process_operations.rb +11 -17
- data/lib/hecks/hecks/adapters/in_process_undo.rb +17 -0
- data/lib/hecks/hecks/adapters/journal_store/changes.rb +13 -4
- data/lib/hecks/hecks/adapters/journal_store/edge_audit.rb +28 -15
- data/lib/hecks/hecks/adapters/journal_store/examination.rb +17 -1
- data/lib/hecks/hecks/adapters/journal_store/held_domain/renaming.rb +45 -0
- data/lib/hecks/hecks/adapters/journal_store/held_domain.rb +31 -5
- data/lib/hecks/hecks/adapters/journal_store/held_mint.rb +128 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/attestation.rb +1 -1
- data/lib/hecks/hecks/adapters/journal_store/readings/boot_status.rb +58 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/composition.rb +39 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/outcomes.rb +76 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/postgres_reader.rb +44 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/reader.rb +64 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/report.rb +102 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/sqlite_reader.rb +43 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/stores.rb +80 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/subscribers.rb +72 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/summary.rb +39 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace.rb +39 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/command_line.rb +57 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/edge_guards.rb +107 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/inspection.rb +94 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/plan.rb +66 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/report.rb +72 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/store.rb +34 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/watermark_guards.rb +86 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/world.rb +66 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan.rb +36 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/projection_audit.rb +64 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/scaffolding.rb +3 -3
- data/lib/hecks/hecks/adapters/journal_store/readings/sqlite_status/database_reading.rb +113 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/sqlite_status/read_only.rb +33 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/sqlite_status.rb +32 -0
- data/lib/hecks/hecks/adapters/journal_store/readings.rb +13 -1
- data/lib/hecks/hecks/adapters/journal_store/reconcile_report.rb +60 -0
- data/lib/hecks/hecks/adapters/journal_store/reconciliation.rb +121 -0
- data/lib/hecks/hecks/adapters/journal_store/translation_write/shape_edge.rb +59 -0
- data/lib/hecks/hecks/adapters/journal_store/translation_write.rb +123 -0
- data/lib/hecks/hecks/adapters/journal_store.rb +16 -0
- data/lib/hecks/hecks/adapters/landed_work.adapter +7 -0
- data/lib/hecks/hecks/adapters/landed_work.rb +52 -0
- data/lib/hecks/hecks/adapters/local_files.rb +6 -6
- data/lib/hecks/hecks/adapters/process_pool.rb +3 -2
- data/lib/hecks/hecks/adapters/push_size.rb +57 -0
- data/lib/hecks/hecks/adapters/qa_quiescing.adapter +7 -0
- data/lib/hecks/hecks/adapters/qa_quiescing.rb +57 -0
- data/lib/hecks/hecks/adapters/rehearsal/inquiry.rb +30 -3
- data/lib/hecks/hecks/adapters/rehearsal/memory_store.rb +63 -3
- data/lib/hecks/hecks/adapters/rehearsal/postgres_reading.rb +29 -6
- data/lib/hecks/hecks/adapters/rehearsal/subject.rb +11 -5
- data/lib/hecks/hecks/adapters/rust_toolchain.rb +10 -1
- data/lib/hecks/hecks/adapters/rust_workspace.rb +1 -1
- data/lib/hecks/hecks/adapters/settings_reading/disposable_ledger.rb +32 -0
- data/lib/hecks/hecks/adapters/settings_reading/push_nudge.rb +26 -0
- data/lib/hecks/hecks/adapters/settings_reading/stores.rb +76 -0
- data/lib/hecks/hecks/adapters/settings_reading/test_scope.rb +28 -0
- data/lib/hecks/hecks/adapters/settings_reading.rb +28 -2
- data/lib/hecks/hecks/adapters/started_work.rb +42 -0
- data/lib/hecks/hecks/adapters/terminal.rb +12 -10
- data/lib/hecks/hecks/adapters/where_reading.adapter +7 -0
- data/lib/hecks/hecks/adapters/where_reading.rb +64 -0
- data/lib/hecks/hecks/adapters/work_areas.rb +57 -0
- data/lib/hecks/hecks/adapters/work_limits.rb +57 -0
- data/lib/hecks/hecks/build/build.bluebook +576 -0
- data/lib/hecks/hecks/check/check.bluebook +966 -0
- data/lib/hecks/hecks/codebase.behaviors +61 -5
- data/lib/hecks/hecks/composer.behaviors +1 -1
- data/lib/hecks/hecks/context_map.hecksagon +1 -1
- data/lib/hecks/hecks/custodian.behaviors +33 -7
- data/lib/hecks/hecks/delegate/delegate.bluebook +355 -0
- data/lib/hecks/hecks/deliver/deliver.bluebook +945 -0
- data/lib/hecks/hecks/deploy.behaviors +1 -1
- data/lib/hecks/hecks/evolve/evolve.bluebook +788 -0
- data/lib/hecks/hecks/find/find.bluebook +81 -0
- data/lib/hecks/hecks/hecks.behaviors +1 -1
- data/lib/hecks/hecks/hecks.bluebook +0 -133
- data/lib/hecks/hecks/hecks.contextmap +2 -0
- data/lib/hecks/hecks/hecks.hecksagon +185 -29
- data/lib/hecks/hecks/hecks.world +35 -9
- data/lib/hecks/hecks/implicit_moves.json +24 -0
- data/lib/hecks/hecks/migrate/migrate.bluebook +1066 -0
- data/lib/hecks/hecks/operate/operate.bluebook +695 -0
- data/lib/hecks/hecks/quiesce/quiesce.bluebook +117 -0
- data/lib/hecks/hecks/rehearse/rehearse.bluebook +133 -0
- data/lib/hecks/hecks/release/release.bluebook +916 -0
- data/lib/hecks/hecks/serve/serve.bluebook +134 -0
- data/lib/hecks/hecks/shapes.json +1 -15
- data/lib/hecks/hecks/site.behaviors +1 -1
- data/lib/hecks/hecks/start/start.bluebook +194 -0
- data/lib/hecks/hecks/test/test.bluebook +638 -0
- data/lib/hecks/hecks/tickets.world +14 -0
- data/lib/hecks/language/bluebook/aggregate.bluebook +22 -0
- data/lib/hecks/language/bluebook/bluebook.bluebook +34 -0
- data/lib/hecks/language/bluebook/command.bluebook +35 -0
- data/lib/hecks/language/bluebook/process_manager.bluebook +14 -1
- data/lib/hecks/language/bluebook/vocabulary.bluebook +174 -54
- data/lib/hecks/language/hecksagon/domain_port.bluebook +1 -0
- data/lib/hecks/language/hecksagon/port_operation.bluebook +14 -0
- data/lib/hecks/language/kinds/run.kind +120 -0
- data/lib/hecks/language/oidc.json +10 -0
- data/lib/hecks/language/translation/translation_aggregate.bluebook +24 -0
- data/lib/hecks/module_folders.rb +31 -0
- data/lib/hecks/ports/key_vault.rb +1 -1
- data/lib/hecks/ports/persistence/append_only.rb +26 -8
- data/lib/hecks/ports/persistence/binding_policy.rb +3 -1
- data/lib/hecks/ports/persistence/codec_boundary.rb +1 -1
- data/lib/hecks/ports/persistence/mint_door.rb +74 -0
- data/lib/hecks/ports/persistence/plugins/era/era_check.rb +6 -5
- data/lib/hecks/ports/persistence/plugins/era/era_guard/shape_diff.rb +5 -1
- data/lib/hecks/ports/persistence/plugins/era/era_status.rb +48 -0
- data/lib/hecks/ports/persistence/plugins/era/projected_bluebook.rb +127 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/additive_shape.rb +107 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/compose.rb +155 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/compose_render.rb +79 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/edge_files.rb +49 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/edge_route.rb +61 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/implicit_edge.rb +67 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/reconcile.rb +130 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/reconcile_files.rb +35 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/differ.rb +13 -5
- data/lib/hecks/ports/persistence/plugins/era/translation.rb +5 -0
- data/lib/hecks/ports/persistence/plugins/era.rb +1 -0
- data/lib/hecks/ports/persistence/repository_factory.rb +11 -3
- data/lib/hecks/ports/persistence/stored_name_guard.rb +36 -0
- data/lib/hecks/ports/persistence.rb +2 -0
- data/lib/hecks/projections/ci_pipeline/table/checks.rb +137 -0
- data/lib/hecks/projections/ci_pipeline/table/lookup.rb +59 -0
- data/lib/hecks/projections/ci_pipeline/table/refusals.rb +58 -0
- data/lib/hecks/projections/ci_pipeline/table/rows.rb +119 -0
- data/lib/hecks/projections/ci_pipeline/table/tree.rb +30 -0
- data/lib/hecks/projections/ci_pipeline/table/typing.rb +92 -0
- data/lib/hecks/projections/ci_pipeline/table.rb +112 -0
- data/lib/hecks/projections/ci_pipeline/workflows.rb +162 -0
- data/lib/hecks/projections/ci_pipeline/yaml_text.rb +104 -0
- data/lib/hecks/projections/deploy/box/hosting.rb +1 -1
- data/lib/hecks/projections/deploy/box/roll_recipe.rb +1 -1
- data/lib/hecks/projections/deploy/box/roll_scripts.rb +1 -1
- data/lib/hecks/projections/deploy/box.rb +1 -1
- data/lib/hecks/projections/deploy/templates/fargate/Makefile.tmpl +1 -1
- data/lib/hecks/projections/deploy/templates/lambda/Makefile.tmpl +3 -3
- data/lib/hecks/projections/undo.rb +46 -0
- data/lib/hecks/projections.rb +2 -0
- data/lib/hecks/projector/cli_projector/claims.rb +11 -0
- data/lib/hecks/projector/cli_projector/command_help.rb +6 -1
- data/lib/hecks/projector/cli_projector/command_specs.rb +11 -1
- data/lib/hecks/projector/cli_projector/completion.rb +87 -0
- data/lib/hecks/projector/cli_projector/everyday.rb +40 -0
- data/lib/hecks/projector/cli_projector/json_listing.rb +77 -0
- data/lib/hecks/projector/cli_projector/listing.rb +1 -1
- data/lib/hecks/projector/cli_projector/modules.rb +39 -0
- data/lib/hecks/projector/cli_projector/query_specs.rb +1 -0
- data/lib/hecks/projector/cli_projector/renames.rb +58 -0
- data/lib/hecks/projector/cli_projector/search.rb +74 -0
- data/lib/hecks/projector/cli_projector/usage.rb +23 -6
- data/lib/hecks/projector/cli_projector.rb +24 -1
- data/lib/hecks/quality_control/adapters/ci_head.adapter +8 -0
- data/lib/hecks/quality_control/adapters/image_roll.adapter +9 -0
- data/lib/hecks/quality_control/adapters/image_roll.rb +158 -0
- data/lib/hecks/quality_control/adapters/main_maintenance.adapter +8 -0
- data/lib/hecks/quality_control/adapters/main_maintenance.rb +275 -0
- data/lib/hecks/quality_control/adapters/pump_tools.adapter +7 -0
- data/lib/hecks/quality_control/adapters/pump_tools.rb +18 -0
- data/lib/hecks/quality_control/adapters/push_due_reader.adapter +8 -0
- data/lib/hecks/quality_control/adapters/push_due_reader.rb +99 -0
- data/lib/hecks/quality_control/adapters/qa_auto_mint.rb +183 -0
- data/lib/hecks/quality_control/adapters/qa_era_mint.rb +94 -0
- data/lib/hecks/quality_control/adapters/qa_quiesce_marker.rb +126 -0
- data/lib/hecks/quality_control/adapters/run_keys.rb +36 -0
- data/lib/hecks/quality_control/adapters/run_reader.adapter +7 -0
- data/lib/hecks/quality_control/adapters/run_reader.rb +188 -0
- data/lib/hecks/quality_control/cli/child.rb +1 -0
- data/lib/hecks/quality_control/cli/qa_discover_external_domains/scanning.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_domain_novelty.rb +3 -3
- data/lib/hecks/quality_control/cli/qa_event_pump/attached.rb +67 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/consumer.rb +103 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/cursors.rb +60 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/reactions.rb +46 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/reader.rb +30 -0
- data/lib/hecks/quality_control/cli/qa_event_pump.rb +76 -0
- data/lib/hecks/quality_control/cli/qa_fix_main_bug/publishing.rb +79 -0
- data/lib/hecks/quality_control/cli/qa_fix_main_bug.rb +167 -0
- data/lib/hecks/quality_control/cli/qa_generated_domains/evaluation.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_generated_domains/promotion.rb +3 -3
- data/lib/hecks/quality_control/cli/qa_main_gate/gate_run.rb +52 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/logging.rb +70 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/shell.rb +47 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/sweeping.rb +59 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/worktree.rb +62 -0
- data/lib/hecks/quality_control/cli/qa_main_gate.rb +135 -0
- data/lib/hecks/quality_control/cli/qa_postgres_role.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_pr_check/checking.rb +2 -3
- data/lib/hecks/quality_control/cli/qa_push_nudge.rb +48 -0
- data/lib/hecks/quality_control/cli/qa_seed_angles/seed.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_sweep/seat.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_tick/event_pump_step.rb +34 -0
- data/lib/hecks/quality_control/cli/qa_tick/output.rb +16 -1
- data/lib/hecks/quality_control/cli/qa_tick/push_nudge_step.rb +28 -0
- data/lib/hecks/quality_control/cli/qa_tick/quiesce_guard.rb +51 -0
- data/lib/hecks/quality_control/cli/qa_tick.rb +36 -8
- data/lib/hecks/quality_control/quality_control.behaviors +65 -0
- data/lib/hecks/quality_control/quality_control.bluebook +1131 -11
- data/lib/hecks/quality_control/quality_control.hecksagon +11 -0
- data/lib/hecks/quality_control/quality_control.ports.hecksagon +138 -0
- data/lib/hecks/query_ir/touchpoints.rb +5 -7
- data/lib/hecks/refused.rb +21 -0
- data/lib/hecks/release/approval.rb +6 -3
- data/lib/hecks/release/conditions.rb +46 -0
- data/lib/hecks/release/runner/gem_publisher.rb +4 -4
- data/lib/hecks/release/version_commit.rb +48 -0
- data/lib/hecks/runtime/command_interpreter/hydration.rb +5 -4
- data/lib/hecks/runtime/command_interpreter/persisting.rb +11 -3
- data/lib/hecks/runtime/command_interpreter.rb +2 -2
- data/lib/hecks/runtime/command_rules/admissibility.rb +0 -2
- data/lib/hecks/runtime/command_rules/emission.rb +0 -1
- data/lib/hecks/runtime/dependency_planning/expression_reads.rb +0 -1
- data/lib/hecks/runtime/dispatcher/planning.rb +24 -0
- data/lib/hecks/runtime/dispatcher/routing.rb +6 -0
- data/lib/hecks/runtime/dispatcher/value_routing.rb +54 -0
- data/lib/hecks/runtime/dispatcher.rb +7 -1
- data/lib/hecks/runtime/dry_run_plan.rb +60 -0
- data/lib/hecks/runtime/entity_element/location.rb +0 -1
- data/lib/hecks/runtime/entity_element/mutations.rb +0 -1
- data/lib/hecks/runtime/entity_interpreter/locating.rb +5 -0
- data/lib/hecks/runtime/entity_interpreter.rb +0 -1
- data/lib/hecks/runtime/errors.rb +26 -0
- data/lib/hecks/runtime/instance.rb +0 -1
- data/lib/hecks/runtime/invocation_builder.rb +0 -1
- data/lib/hecks/runtime/outbox/consumer_runner.rb +9 -1
- data/lib/hecks/runtime/outbox/relay.rb +25 -4
- data/lib/hecks/runtime/outbox/runnable.rb +3 -1
- data/lib/hecks/runtime/outbox.rb +6 -2
- data/lib/hecks/runtime/policy_interpreter/fan_out.rb +18 -2
- data/lib/hecks/runtime/policy_interpreter.rb +17 -9
- data/lib/hecks/runtime/port_operation_interpreter.rb +21 -7
- data/lib/hecks/runtime/query_interpreter/arguments.rb +6 -5
- data/lib/hecks/runtime/reaction_invocation.rb +0 -1
- data/lib/hecks/runtime/refusal_wording.rb +12 -1
- data/lib/hecks/runtime/registry/context_maps.rb +1 -5
- data/lib/hecks/runtime/registry/declarations.rb +34 -4
- data/lib/hecks/runtime/registry/hecksagon_rules.rb +15 -1
- data/lib/hecks/runtime/registry/runtime_state.rb +10 -0
- data/lib/hecks/runtime/registry/world_defaults.rb +24 -2
- data/lib/hecks/runtime/registry/world_names.rb +99 -0
- data/lib/hecks/runtime/registry.rb +33 -27
- data/lib/hecks/runtime/saga_interpreter/compensation.rb +10 -0
- data/lib/hecks/runtime/saga_interpreter/correlation.rb +29 -3
- data/lib/hecks/runtime/saga_interpreter/delivery.rb +0 -1
- data/lib/hecks/runtime/saga_interpreter/lifecycle.rb +1 -1
- data/lib/hecks/runtime/saga_interpreter.rb +46 -2
- data/lib/hecks/runtime/value/coercion.rb +36 -8
- data/lib/hecks/rust_build/conformance.rb +16 -5
- data/lib/hecks/rust_build/parser.rb +25 -0
- data/lib/hecks/rust_build/project_rust/codegen_run.rb +45 -12
- data/lib/hecks/rust_build/project_rust/declared.rb +80 -0
- data/lib/hecks/rust_build/project_rust/features_header.rb +22 -0
- data/lib/hecks/rust_build/project_rust/manifest.rb +96 -0
- data/lib/hecks/rust_build/project_rust/meta.rb +36 -0
- data/lib/hecks/rust_build/project_rust.rb +28 -90
- data/lib/hecks/rust_build/write_if_changed.rb +19 -4
- data/lib/hecks/rust_build.rb +2 -1
- data/lib/hecks/rust_format.rb +32 -2
- data/lib/hecks/secrets.rb +111 -0
- data/lib/hecks/shape_ledger/edge_hygiene.rb +170 -0
- data/lib/hecks/shape_ledger/scope.rb +51 -0
- data/lib/hecks/shape_ledger/status.rb +89 -0
- data/lib/hecks/shape_ledger.rb +78 -33
- data/lib/hecks/site/bluebook/site.bluebook +1 -0
- data/lib/hecks/storehouse/audit.rb +34 -4
- data/lib/hecks/storehouse/callers.rb +8 -0
- data/lib/hecks/storehouse/dispatching.rb +14 -3
- data/lib/hecks/storehouse/identity.rb +41 -0
- data/lib/hecks/storehouse/querying.rb +7 -7
- data/lib/hecks/storehouse.rb +28 -10
- data/lib/hecks/tickets/bluebook/adapters/work_areas.adapter +7 -0
- data/lib/hecks/tickets/bluebook/adapters/work_limits.adapter +7 -0
- data/lib/hecks/tickets/bluebook/tickets.behaviors +70 -0
- data/lib/hecks/tickets/bluebook/tickets.bluebook +323 -28
- data/lib/hecks/tickets/bluebook/tickets.hecksagon +7 -0
- data/lib/hecks/tickets/bluebook/tickets.ports.hecksagon +17 -0
- data/lib/hecks/{cli → tools}/behaviors.rb +1 -1
- data/lib/hecks/{cli → tools}/canonicalise.rb +1 -1
- data/lib/hecks/{cli → tools}/check_engine_agreement.rb +1 -1
- data/lib/hecks/{cli → tools}/check_era.rb +6 -6
- data/lib/hecks/tools/ci_gates.rb +8 -2
- data/lib/hecks/tools/ci_workflows.rb +98 -0
- data/lib/hecks/{cli → tools}/console.rb +1 -1
- data/lib/hecks/{cli → tools}/deploy_template_diff.rb +1 -1
- data/lib/hecks/{cli → tools}/doc_coverage.rb +2 -2
- data/lib/hecks/{cli → tools}/document.rb +1 -1
- data/lib/hecks/{cli → tools}/domain_stub.rb +1 -1
- data/lib/hecks/{cli → tools}/domain_writer.rb +1 -1
- data/lib/hecks/tools/downstream_model_check.rb +122 -0
- data/lib/hecks/tools/evolve_run.rb +2 -2
- data/lib/hecks/{cli → tools}/expected_era.rb +1 -1
- data/lib/hecks/{cli → tools}/expression_projection.rb +1 -1
- data/lib/hecks/{cli → tools}/follow.rb +1 -1
- data/lib/hecks/tools/fuzz_sweep/options.rb +40 -5
- data/lib/hecks/tools/fuzz_sweep/pool.rb +12 -1
- data/lib/hecks/tools/fuzz_sweep/shards.rb +155 -0
- data/lib/hecks/tools/fuzz_sweep.rb +11 -5
- data/lib/hecks/tools/gate.rb +38 -29
- data/lib/hecks/tools/gate_memo/local_files.rb +33 -0
- data/lib/hecks/tools/gate_memo/rehearsal.rb +54 -0
- data/lib/hecks/tools/gate_memo/ruby_files.rb +152 -0
- data/lib/hecks/tools/gate_memo/session.rb +114 -0
- data/lib/hecks/tools/gate_memo/standalone.rb +67 -0
- data/lib/hecks/tools/gate_memo.rb +196 -0
- data/lib/hecks/tools/gate_report.rb +56 -0
- data/lib/hecks/{cli → tools}/history.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_agent.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_aggregate.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_draft.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_record.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_run.rb +2 -2
- data/lib/hecks/{cli → tools}/interview_session/agent_state.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session/catalog.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session/manual_findings.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session/proposals.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session.rb +2 -2
- data/lib/hecks/{cli → tools}/interview_shape/lifecycle.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_shape.rb +1 -1
- data/lib/hecks/{cli → tools}/ir.rb +1 -1
- data/lib/hecks/tools/lanes/files.rb +1 -1
- data/lib/hecks/tools/lanes/watch_workflow.rb +6 -8
- data/lib/hecks/tools/lanes/workflow.rb +1 -1
- data/lib/hecks/tools/lanes.rb +1 -1
- data/lib/hecks/{cli → tools}/mcp.rb +1 -1
- data/lib/hecks/{cli → tools}/model_check/examination.rb +1 -1
- data/lib/hecks/{cli → tools}/model_check/sources.rb +1 -1
- data/lib/hecks/{cli → tools}/model_check.rb +1 -1
- data/lib/hecks/tools/move_disables/reasons.rb +35 -0
- data/lib/hecks/tools/move_disables.rb +211 -0
- data/lib/hecks/tools/move_former_name.rb +105 -0
- data/lib/hecks/{cli → tools}/pattern_cases.rb +1 -1
- data/lib/hecks/{cli → tools}/persistence_notice.rb +1 -1
- data/lib/hecks/{cli → tools}/present.rb +1 -1
- data/lib/hecks/{cli → tools}/project_cli/launcher_source.rb +32 -22
- data/lib/hecks/{cli → tools}/project_cli/templates.rb +22 -15
- data/lib/hecks/{cli → tools}/project_cli.rb +11 -7
- data/lib/hecks/{cli → tools}/project_diagrams.rb +3 -3
- data/lib/hecks/{cli → tools}/project_glossary.rb +2 -2
- data/lib/hecks/{cli → tools}/reference.rb +2 -2
- data/lib/hecks/{cli → tools}/refresh_projections.rb +1 -1
- data/lib/hecks/{cli → tools}/refresh_rspec_runtime_baseline.rb +1 -1
- data/lib/hecks/tools/regeneration_run/pool.rb +148 -0
- data/lib/hecks/tools/regeneration_run/scratch.rb +76 -0
- data/lib/hecks/tools/regeneration_run.rb +125 -103
- data/lib/hecks/{cli → tools}/release.rb +1 -1
- data/lib/hecks/{cli → tools}/release_gem.rb +1 -1
- data/lib/hecks/{cli → tools}/rspec_io_parallel_files.rb +1 -1
- data/lib/hecks/{cli → tools}/rspec_shard_files.rb +1 -1
- data/lib/hecks/{cli → tools}/run.rb +9 -2
- data/lib/hecks/{cli → tools}/run_expectations.rb +1 -1
- data/lib/hecks/{cli → tools}/seed_semantics_corpus.rb +4 -4
- data/lib/hecks/{cli → tools}/serve_query_ir_mcp.rb +1 -1
- data/lib/hecks/{cli → tools}/shape.rb +3 -2
- data/lib/hecks/{cli → tools}/smoke_http/checks.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_http/settings.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_http/transport.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_http.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_test.rb +1 -1
- data/lib/hecks/{cli → tools}/spec_example.rb +1 -1
- data/lib/hecks/tools/stage_progress.rb +54 -0
- data/lib/hecks/{cli → tools}/statements.rb +1 -1
- data/lib/hecks/{cli → tools}/stores.rb +1 -1
- data/lib/hecks/{cli → tools}/stress_concurrency_specs/reporting.rb +1 -1
- data/lib/hecks/{cli → tools}/stress_concurrency_specs/usage.rb +4 -4
- data/lib/hecks/{cli → tools}/stress_concurrency_specs.rb +3 -3
- data/lib/hecks/tools/tenant_provisioning.rb +23 -0
- data/lib/hecks/tools/tools_doc.rb +10 -8
- data/lib/hecks/tools/translation_audit/edges.rb +21 -16
- data/lib/hecks/tools/translation_audit/verdicts.rb +1 -1
- data/lib/hecks/tools/translation_audit.rb +1 -1
- data/lib/hecks/tools/translation_scaffold.rb +1 -1
- data/lib/hecks/tools.rb +4 -1
- data/lib/hecks/version.rb +1 -1
- data/lib/hecks/vocabulary.rb +61 -31
- data/lib/hecks/workflow_pagination/judge.rb +48 -0
- data/lib/hecks/workflow_pagination/statement.rb +50 -0
- data/lib/hecks/workflow_pagination.rb +58 -0
- data/lib/hecks.rb +2 -0
- data/lib/rubocop/cop/hecks/bare_event_and_query_names.rb +58 -0
- data/lib/rubocop/cop/hecks/correlates_by_aggregate.rb +39 -0
- data/lib/rubocop/cop/hecks/creating_command_sets.rb +75 -0
- data/lib/rubocop/cop/hecks/invariant_expression_language.rb +47 -0
- data/lib/rubocop/cop/hecks/lifecycle_needs_attribute.rb +58 -0
- data/lib/rubocop/cop/hecks/no_id_string_attribute.rb +49 -0
- data/lib/rubocop/cop/hecks/one_terminal_mark_per_lifecycle.rb +47 -0
- data/lib/rubocop/cop/hecks/value_object_shorthand.rb +56 -0
- data/prebuilt/13c04bdc5970295b310f0a980d397ba722232c8da99cc1a0cdb383249921e871.marshal +0 -0
- data/prebuilt/e3857b77f47d9ecc1787b2e1f5136364f3cb3444ef4aea5479f3b98167affea2.marshal +0 -0
- data/qa/settings.yml +23 -0
- data/rust/.gitignore +0 -6
- data/rust/Cargo.toml +2 -1
- data/rust/build/Cargo.toml +1 -1
- data/rust/build/src/binding_pass.rs +57 -4
- data/rust/build/src/pipeline.rs +6 -4
- data/rust/build/src/resolve.rs +1 -0
- data/rust/codegen/Cargo.toml +1 -1
- data/rust/codegen/src/domain_generator.rs +3 -0
- data/rust/codegen/src/json_codec.rs +182 -23
- data/rust/codegen/src/one_of_references.rs +1 -0
- data/rust/codegen/src/queries.rs +20 -2
- data/rust/codegen/src/registry.rs +21 -5
- data/rust/expr/Cargo.toml +1 -1
- data/rust/host/Cargo.toml +1 -1
- data/rust/host/HECKS_RELEASE +1 -1
- data/rust/host/core/Cargo.toml +1 -1
- data/rust/host/src/bin/mint_harness.rs +1 -0
- data/rust/host/src/boot.rs +1 -0
- data/rust/host/src/store/mint.rs +40 -6
- data/rust/lsp/Cargo.toml +1 -1
- data/rust/parser/Cargo.toml +1 -1
- data/rust/parser/src/build/correlation_keys.rs +125 -0
- data/rust/parser/src/build/mod.rs +1 -0
- data/rust/parser/src/emit.rs +55 -3
- data/rust/parser/src/ir.rs +33 -1
- data/rust/parser/src/keywords.rs +289 -1
- data/rust/parser/src/main.rs +2 -0
- data/rust/parser/src/parse/aggregate.rs +10 -1
- data/rust/parser/src/parse/audience.rs +65 -0
- data/rust/parser/src/parse/command.rs +14 -0
- data/rust/parser/src/parse/declaration.rs +97 -0
- data/rust/parser/src/parse/domain_port.rs +6 -0
- data/rust/parser/src/parse/mod.rs +1 -0
- data/rust/parser/src/parse/process_manager.rs +17 -10
- data/rust/parser/src/parse/world.rs +12 -8
- data/rust/parser/src/render_ruby.rs +9 -0
- data/rust/parser/src/sentence/format.rs +3 -0
- data/rust/parser/src/sentence/process.rs +6 -2
- data/rust/src/exemplar/json.rs +17 -0
- data/rust/src/kernel/cli.rs +27 -3
- data/rust/src/kernel/dispatch.rs +4 -2
- data/rust/src/kernel/json.rs +62 -0
- data/rust/src/kernel/orchestrate.rs +28 -3
- data/rust/src/kernel/orchestrate_guard_tests.rs +12 -12
- data/rust/web/Cargo.toml +1 -1
- metadata +389 -96
- data/lib/hecks/cli/command_table.rb +0 -72
- data/lib/hecks/cli/launcher_words.rb +0 -168
- data/lib/hecks/cli.rb +0 -133
- data/lib/hecks/hecks/agents.bluebook +0 -246
- data/lib/hecks/hecks/codebase.bluebook +0 -3209
- data/lib/hecks/hecks/custodian.bluebook +0 -1300
- data/lib/hecks/hecks/ledger.bluebook +0 -190
- data/lib/hecks/hecks/rehearsal.bluebook +0 -437
- data/lib/hecks/hecks/tooling.bluebook +0 -1234
- data/lib/hecks/hecks/translations/2-148748.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-15a2e4.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-1b447c.bluebook +0 -5
- data/lib/hecks/hecks/translations/2-240474.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-44446d.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-46ca26.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-473eab.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-75cc28.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-781c07.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-84c18b.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-aa5fff.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-bfdb48.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-cd96d8.bluebook +0 -10
- data/lib/hecks/hecks/translations/2-d43f71.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-eea577.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-f53248.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-fbb677.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-ffdf12.bluebook +0 -6
- data/lib/hecks/quality_control/adapters/clearance_recorder.rb +0 -36
- data/lib/hecks/quality_control/adapters/github_ci_webhook.rb +0 -56
- data/prebuilt/31cf81e12f16236ad26249be590cfea3799c9db67432e6a4ef54b801c355b6ae.marshal +0 -0
- data/prebuilt/68ecb2bd3abb1a221007db4f2b0375834c13aaccac8f2b99778e8517f11aa113.marshal +0 -0
- data/prebuilt/verdicts-0328c2403383837d780ad5ed81d1da351c56436b894cf9015b5d56b8f1f1bf10.json +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Hecks.behaviors "Codebase" do
|
|
2
2
|
vision "A request to work on this repository is recorded, the tree is examined, and only a hecks checkout lets it through."
|
|
3
3
|
|
|
4
|
-
loads "hecks.bluebook", "
|
|
4
|
+
loads "hecks.bluebook", "context_map.hecksagon", "hecks.hecksagon", "environments/memory.world", modules: :all
|
|
5
5
|
|
|
6
6
|
test "ProjectModel reports what the language projects, and keeps the answer" do
|
|
7
7
|
tests "ProjectModel", on: "LanguageRun"
|
|
@@ -79,12 +79,56 @@ Hecks.behaviors "Codebase" do
|
|
|
79
79
|
expect refused: "must match"
|
|
80
80
|
end
|
|
81
81
|
|
|
82
|
+
test "RegenerateCorpus refuses a list of domains that is not one" do
|
|
83
|
+
tests "RegenerateCorpus", on: "RegenerationRun"
|
|
84
|
+
input run: { value: "domains" }, domains: { value: "Lease Clock" }
|
|
85
|
+
expect refused: "must match"
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
test "RegenerateCorpus refuses a count of zero workers" do
|
|
89
|
+
tests "RegenerateCorpus", on: "RegenerationRun"
|
|
90
|
+
input run: { value: "no_workers" }, workers: { value: 0 }
|
|
91
|
+
expect refused: "a count is positive"
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
test "RegenerateCorpus keeps a domain that is not there as a faulted request" do
|
|
95
|
+
tests "RegenerateCorpus", on: "RegenerationRun"
|
|
96
|
+
input run: { value: "unknown_domain" }, domains: { value: "no_such_domain" }
|
|
97
|
+
expect emits: %w[RegenerateCorpusRequested RegenerationExamined RegenerationAccepted RegenerationRefused
|
|
98
|
+
RegenerationFaulted]
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
test "RegenerateCorpus checks only the domains it is named, and keeps the answer" do
|
|
102
|
+
tests "RegenerateCorpus", on: "RegenerationRun"
|
|
103
|
+
input run: { value: "some_domains" }, domains: { value: "lease_clock,nested_pieces" }, check: { value: true }
|
|
104
|
+
expect emits: %w[RegenerateCorpusRequested RegenerationExamined RegenerationAccepted RegenerationAnswered
|
|
105
|
+
RegenerationCompleted]
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
test "GeneratedKey refuses a list of domains that is not one" do
|
|
109
|
+
tests "GeneratedKey", on: "CorpusRun", kind: :query
|
|
110
|
+
input domains: { value: "lease clock" }
|
|
111
|
+
expect refused: "must match"
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
test "GeneratedKey answers one document for the named domains" do
|
|
115
|
+
tests "GeneratedKey", on: "CorpusRun", kind: :query
|
|
116
|
+
input domains: { value: "lease_clock,nested_pieces" }
|
|
117
|
+
expect count: 1
|
|
118
|
+
end
|
|
119
|
+
|
|
82
120
|
test "ProjectCiGates refuses a run that is not named" do
|
|
83
121
|
tests "ProjectCiGates", on: "RegenerationRun"
|
|
84
122
|
input run: { value: "" }
|
|
85
123
|
expect refused: "must match"
|
|
86
124
|
end
|
|
87
125
|
|
|
126
|
+
test "ProjectCiPipeline refuses a run that is not named" do
|
|
127
|
+
tests "ProjectCiPipeline", on: "RegenerationRun"
|
|
128
|
+
input run: { value: "" }
|
|
129
|
+
expect refused: "must match"
|
|
130
|
+
end
|
|
131
|
+
|
|
88
132
|
test "ProjectToolsDoc refuses a run that is not named" do
|
|
89
133
|
tests "ProjectToolsDoc", on: "RegenerationRun"
|
|
90
134
|
input run: { value: "" }
|
|
@@ -139,6 +183,18 @@ Hecks.behaviors "Codebase" do
|
|
|
139
183
|
expect emits: %w[RunSpecExampleRequested TestSuiteExamined TestSuiteAccepted TestSuiteRefused TestSuiteFaulted]
|
|
140
184
|
end
|
|
141
185
|
|
|
186
|
+
test "RunSpecFiles refuses an isolation that is neither process nor shared" do
|
|
187
|
+
tests "RunSpecFiles", on: "TestSuiteRun"
|
|
188
|
+
input files: { value: "spec/a_spec.rb" }, isolation: { value: "fork" }, run: { value: "files" }
|
|
189
|
+
expect refused: "must match"
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
test "RunImpactedSpecs refuses a cap of zero files" do
|
|
193
|
+
tests "RunImpactedSpecs", on: "TestSuiteRun"
|
|
194
|
+
input cap: { value: 0 }, run: { value: "impacted" }
|
|
195
|
+
expect refused: "a count is positive"
|
|
196
|
+
end
|
|
197
|
+
|
|
142
198
|
test "StressConcurrency refuses a count of zero runs" do
|
|
143
199
|
tests "StressConcurrency", on: "TestSuiteRun"
|
|
144
200
|
input runs: { value: 0 }, run: { value: "stress" }
|
|
@@ -171,25 +227,25 @@ Hecks.behaviors "Codebase" do
|
|
|
171
227
|
end
|
|
172
228
|
|
|
173
229
|
test "Present refuses a port that is not one" do
|
|
174
|
-
tests "Present", on: "
|
|
230
|
+
tests "Present", on: "Server"
|
|
175
231
|
input port: { value: 70_000 }, run: { value: "present" }
|
|
176
232
|
expect refused: "a port is 1 to 65535"
|
|
177
233
|
end
|
|
178
234
|
|
|
179
235
|
test "Compose refuses a port that is not one" do
|
|
180
|
-
tests "Compose", on: "
|
|
236
|
+
tests "Compose", on: "Server"
|
|
181
237
|
input port: { value: 70_000 }, run: { value: "compose" }
|
|
182
238
|
expect refused: "a port is 1 to 65535"
|
|
183
239
|
end
|
|
184
240
|
|
|
185
241
|
test "Preview refuses a port that is not one" do
|
|
186
|
-
tests "Preview", on: "
|
|
242
|
+
tests "Preview", on: "Server"
|
|
187
243
|
input directory: { value: "site" }, port: { value: 70_000 }, run: { value: "preview" }
|
|
188
244
|
expect refused: "a port is 1 to 65535"
|
|
189
245
|
end
|
|
190
246
|
|
|
191
247
|
test "ServeQueryIrMcp refuses a run that is not named" do
|
|
192
|
-
tests "ServeQueryIrMcp", on: "
|
|
248
|
+
tests "ServeQueryIrMcp", on: "Server"
|
|
193
249
|
input run: { value: "" }
|
|
194
250
|
expect refused: "must match"
|
|
195
251
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Hecks.behaviors "Composer" do
|
|
2
2
|
vision "A draft is opened, revised, judged by its check and talked about with an agent, one recorded step at a time."
|
|
3
3
|
|
|
4
|
-
loads "hecks.bluebook", "
|
|
4
|
+
loads "hecks.bluebook", "context_map.hecksagon", "hecks.hecksagon", "environments/memory.world", modules: :all
|
|
5
5
|
|
|
6
6
|
test "Begin opens a bluebook for editing" do
|
|
7
7
|
tests "Begin", on: "Draft"
|
|
@@ -9,6 +9,6 @@ end
|
|
|
9
9
|
# The attached bluebooks (hecks.hecksagon `attaches`): each is a bounded context whose store is the
|
|
10
10
|
# one the Hecks domain's own `persisted_by` gives it, so a copy that opts the Hecks bluebook in
|
|
11
11
|
# opts them all in.
|
|
12
|
-
%w[Bluebook Hecksagon World Adapter Port Translation Expression Tenancy Deploy Site Tickets Composer QualityControl].each do |bluebook|
|
|
12
|
+
%w[Bluebook Hecksagon World Adapter Port Translation Expression Tenancy Deploy Site Tickets Composer QualityControl Coder Fixer].each do |bluebook|
|
|
13
13
|
Hecks.hecksagon(bluebook) { attaches "Governance" }
|
|
14
14
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Hecks.behaviors "Custodian" do
|
|
2
2
|
vision "A check and an operation are recorded as requested before anything outside is asked."
|
|
3
3
|
|
|
4
|
-
loads "hecks.bluebook", "
|
|
4
|
+
loads "hecks.bluebook", "context_map.hecksagon", "hecks.hecksagon", "environments/memory.world", modules: :all
|
|
5
5
|
|
|
6
6
|
test "ModelCheck records the request, runs the analysis and keeps a clean verdict" do
|
|
7
7
|
tests "ModelCheck", on: "ModelCheckRun"
|
|
@@ -64,20 +64,40 @@ Hecks.behaviors "Custodian" do
|
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
test "Board keeps a checkout that is not there as a faulted push" do
|
|
67
|
-
tests "Board", on: "
|
|
68
|
-
input run: { value: "evening" }, checkout: { value: "/tmp/hecks-behaviors-absent/checkout" }
|
|
67
|
+
tests "Board", on: "SendTrain"
|
|
68
|
+
input run: { value: "evening" }, checkout: { value: "/tmp/hecks-behaviors-absent/checkout" }, confirm: { value: true }
|
|
69
69
|
expect emits: %w[BoardingRequested TrainRefused PushFaulted]
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
test "Land keeps a checkout that is not there as a refused landing" do
|
|
73
73
|
tests "Land", on: "Landing"
|
|
74
|
-
input run: { value: "evening" }, checkout: { value: "/tmp/hecks-behaviors-absent/checkout" }
|
|
74
|
+
input run: { value: "evening" }, checkout: { value: "/tmp/hecks-behaviors-absent/checkout" }, confirm: { value: true }
|
|
75
75
|
expect emits: %w[LandingRequested MergeRefused LandingRefused]
|
|
76
76
|
end
|
|
77
77
|
|
|
78
|
+
test "Rehearse keeps a checkout that is not there as a declined rehearsal" do
|
|
79
|
+
tests "Rehearse", on: "PushRehearsal"
|
|
80
|
+
input run: { value: "evening" }, checkout: { value: "/tmp/hecks-behaviors-absent/checkout" }
|
|
81
|
+
expect emits: %w[PushRehearsalRequested PushRehearsalRefused PushRehearsalDeclined]
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
test "Make keeps a checkout that is not there as a declined commit" do
|
|
85
|
+
tests "Make", on: "Revision"
|
|
86
|
+
input run: { value: "evening" }, checkout: { value: "/tmp/hecks-behaviors-absent/checkout" },
|
|
87
|
+
message: { value: "say ok" }
|
|
88
|
+
expect emits: %w[CommitRequested CommitRefused CommitDeclined]
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
test "Make refuses a commit that says nothing" do
|
|
92
|
+
tests "Make", on: "Revision"
|
|
93
|
+
input run: { value: "evening" }, checkout: { value: "/tmp/hecks-behaviors-absent/checkout" },
|
|
94
|
+
message: { value: " " }
|
|
95
|
+
expect refused: "a commit says what it commits"
|
|
96
|
+
end
|
|
97
|
+
|
|
78
98
|
test "Retire keeps a checkout that is not there as a declined retirement" do
|
|
79
99
|
tests "Retire", on: "Landing"
|
|
80
|
-
input run: { value: "evening" }, checkout: { value: "/tmp/hecks-behaviors-absent/checkout" }
|
|
100
|
+
input run: { value: "evening" }, checkout: { value: "/tmp/hecks-behaviors-absent/checkout" }, confirm: { value: true }
|
|
81
101
|
expect emits: %w[RetirementRequested RemovalRefused RetirementDeclined]
|
|
82
102
|
end
|
|
83
103
|
|
|
@@ -143,8 +163,8 @@ Hecks.behaviors "Custodian" do
|
|
|
143
163
|
expect emits: %w[RailsRequested LaunchRefused LaunchStopped]
|
|
144
164
|
end
|
|
145
165
|
|
|
146
|
-
test "ServeMcp refuses a
|
|
147
|
-
tests "ServeMcp", on: "
|
|
166
|
+
test "ServeMcp refuses a server run that is not named" do
|
|
167
|
+
tests "ServeMcp", on: "Server"
|
|
148
168
|
input run: { value: "" }
|
|
149
169
|
expect refused: "must match"
|
|
150
170
|
end
|
|
@@ -245,6 +265,12 @@ Hecks.behaviors "Custodian" do
|
|
|
245
265
|
expect refused: "must match"
|
|
246
266
|
end
|
|
247
267
|
|
|
268
|
+
test "BuildParser refuses a build that is not named" do
|
|
269
|
+
tests "BuildParser", on: "Build"
|
|
270
|
+
input run: { value: "" }
|
|
271
|
+
expect refused: "must match"
|
|
272
|
+
end
|
|
273
|
+
|
|
248
274
|
test "BuildHost refuses a target that is not a triple" do
|
|
249
275
|
tests "BuildHost", on: "Build"
|
|
250
276
|
input domain: { value: "examples/pizzas" }, run: { value: "host" }, target: { value: "arm64" }
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
Hecks.bluebook "Hecks" do
|
|
2
|
+
domain_module "Delegate" do
|
|
3
|
+
vision "Hand work to a background session."
|
|
4
|
+
|
|
5
|
+
# Agents: handing one brief to a background Claude session (ADR 0141). A dispatch is a run like
|
|
6
|
+
# the Custodian `*Run`s: it is requested, the outside is asked, and what came back is judged by
|
|
7
|
+
# the givens and reactions below.
|
|
8
|
+
#
|
|
9
|
+
# The bluebook decides everything: a brief must say something, an agent name cannot be mistaken
|
|
10
|
+
# for a flag, the directory must be one the `Agents` port finds, and a session that reports
|
|
11
|
+
# `done` or `stopped` has finished while `busy` and `idle` have not. The port only looks and
|
|
12
|
+
# starts: it finds a directory, starts the session, and reports the state the session is in.
|
|
13
|
+
|
|
14
|
+
aggregate "AgentRun" do
|
|
15
|
+
description "One brief handed to a background Claude session: started and tracked, or refused with the reason."
|
|
16
|
+
|
|
17
|
+
attribute :run, RunKey
|
|
18
|
+
attribute :repo, Path
|
|
19
|
+
attribute :brief, Brief
|
|
20
|
+
attribute :agent, AgentName, optional: true
|
|
21
|
+
attribute :session, SessionId, optional: true
|
|
22
|
+
attribute :condition, Condition, optional: true
|
|
23
|
+
attribute :refusal, Report, optional: true
|
|
24
|
+
attribute :tidied_at, Moment, optional: true
|
|
25
|
+
identified_by :run
|
|
26
|
+
|
|
27
|
+
value_object "RunKey" do
|
|
28
|
+
attribute :value, String, matches: :present
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# The directory the session works in.
|
|
32
|
+
value_object "Path" do
|
|
33
|
+
attribute :value, String, matches: :not_empty
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# What the session is asked to do. It may span lines; the dispatch refuses one that is blank.
|
|
37
|
+
value_object "Brief" do
|
|
38
|
+
attribute :value, String
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# A custom agent's name. It starts with a letter or digit, so it cannot be taken for a flag.
|
|
42
|
+
value_object "AgentName" do
|
|
43
|
+
attribute :value, String, pattern: '\A[A-Za-z0-9][A-Za-z0-9._-]*\z'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
value_object "SessionId" do
|
|
47
|
+
attribute :value, String, matches: :present
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# What a session reported about itself the last time it was asked.
|
|
51
|
+
value_object "Condition" do
|
|
52
|
+
attribute :value, String
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
value_object "Report" do
|
|
56
|
+
attribute :value, String
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# When the outside removed a session, as the port reports it.
|
|
60
|
+
value_object "Moment" do
|
|
61
|
+
attribute :value, String
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
lifecycle :status, default: "requested" do
|
|
65
|
+
mark :failure, "refused"
|
|
66
|
+
transition "Begin" => "started", from: "requested"
|
|
67
|
+
transition "Decline" => "refused", from: "requested"
|
|
68
|
+
transition "Finish" => "finished", from: "started"
|
|
69
|
+
transition "Tidied" => "tidied", from: "finished"
|
|
70
|
+
mark :terminal, "tidied", "refused"
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
command "Dispatch" do
|
|
74
|
+
role "Operator"
|
|
75
|
+
goal "Hand one brief to a background Claude session working in a directory"
|
|
76
|
+
|
|
77
|
+
attribute :run, RunKey, sets: true
|
|
78
|
+
attribute :repo, Path, sets: true
|
|
79
|
+
attribute :brief, Brief, sets: true
|
|
80
|
+
attribute :agent, AgentName, optional: true, sets: true
|
|
81
|
+
|
|
82
|
+
given("a brief says something") { !brief.value.to_s.strip.empty? }
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
emits AgentRunRequested
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
command "Begin" do
|
|
89
|
+
role "System"
|
|
90
|
+
goal "Record the session the directory's agent started"
|
|
91
|
+
|
|
92
|
+
reference_to AgentRun
|
|
93
|
+
attribute :session, SessionId, sets: true
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
emits AgentRunStarted
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
command "Decline" do
|
|
100
|
+
role "System"
|
|
101
|
+
goal "Record why no session was started"
|
|
102
|
+
|
|
103
|
+
reference_to AgentRun
|
|
104
|
+
attribute :refusal, Report, sets: true
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
emits AgentRunDeclined
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
command "Check", from: "started" do
|
|
111
|
+
role "Operator"
|
|
112
|
+
goal "Ask whether a started session is still working"
|
|
113
|
+
|
|
114
|
+
reference_to AgentRun
|
|
115
|
+
|
|
116
|
+
emits AgentCheckRequested
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
command "Finish" do
|
|
120
|
+
role "System"
|
|
121
|
+
goal "Record that the session has ended, and how it ended"
|
|
122
|
+
|
|
123
|
+
reference_to AgentRun
|
|
124
|
+
attribute :condition, Condition, sets: true
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
emits AgentRunFinished
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# A finished run's session is removed only when it ended `done`; a session still `working`,
|
|
131
|
+
# `blocked` or `stopped` is kept, and so is one a person has taken over (the port says so).
|
|
132
|
+
command "Tidy", from: "finished" do
|
|
133
|
+
role "Operator"
|
|
134
|
+
goal "Remove the finished session of one run, unless it is unfinished or a person took it over"
|
|
135
|
+
|
|
136
|
+
reference_to AgentRun
|
|
137
|
+
|
|
138
|
+
given("the session ended done: a working, blocked or stopped session is kept") { condition.value == "done" }
|
|
139
|
+
|
|
140
|
+
emits TidyRequested
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
command "Tidied" do
|
|
144
|
+
role "System"
|
|
145
|
+
goal "Record that the session was removed, and when"
|
|
146
|
+
|
|
147
|
+
reference_to AgentRun
|
|
148
|
+
attribute :tidied_at, Moment, sets: true
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
emits AgentRunTidied
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
command "Retain" do
|
|
155
|
+
role "System"
|
|
156
|
+
goal "Record why a finished session was kept"
|
|
157
|
+
|
|
158
|
+
reference_to AgentRun
|
|
159
|
+
attribute :refusal, Report, sets: true
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
emits AgentRunRetained
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
query "Tidyable" do
|
|
166
|
+
description "Every finished run, oldest key first; `Tidy` keeps those that did not end done."
|
|
167
|
+
where(status: "finished")
|
|
168
|
+
order_by :run
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
query "Running" do
|
|
172
|
+
description "Every run whose session was started and is not known to have ended, oldest key first."
|
|
173
|
+
where(status: "started")
|
|
174
|
+
order_by :run
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
query "Declined" do
|
|
178
|
+
description "Every run that no session was started for, with the reason."
|
|
179
|
+
where(status: "refused")
|
|
180
|
+
order_by :run
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# Filling the Work queue is one run too: the Work rows that may start a session now are chosen
|
|
185
|
+
# from the queue, the machine's load and the freeze, and without `confirm` that is all it does.
|
|
186
|
+
# The choosing and the starting are the port's; whether a start is allowed stays with `Work`.
|
|
187
|
+
aggregate "Dispatch" do
|
|
188
|
+
description "One filling of the Work queue: the planned rows that start a session now, and why each other waits."
|
|
189
|
+
|
|
190
|
+
attribute :run, DispatchKey
|
|
191
|
+
attribute :repo, Directory
|
|
192
|
+
attribute :confirm, Switch, optional: true
|
|
193
|
+
attribute :budget_minutes, Minutes, optional: true
|
|
194
|
+
attribute :report, Outcome, optional: true
|
|
195
|
+
attribute :refusal, Outcome, optional: true
|
|
196
|
+
identified_by :run
|
|
197
|
+
|
|
198
|
+
value_object "DispatchKey" do
|
|
199
|
+
attribute :value, String, matches: :present
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
value_object "Directory" do
|
|
203
|
+
attribute :value, String, matches: :not_empty
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
value_object "Switch" do
|
|
207
|
+
attribute :value, Boolean
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
value_object "Minutes" do
|
|
211
|
+
attribute :value, Integer
|
|
212
|
+
invariant("a time budget is positive") { value.positive? }
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
value_object "Outcome" do
|
|
216
|
+
attribute :value, String
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
lifecycle :status, default: "requested" do
|
|
220
|
+
mark :failure, "refused"
|
|
221
|
+
transition "Record" => "answered", from: "requested"
|
|
222
|
+
transition "Decline" => "refused", from: "requested"
|
|
223
|
+
mark :terminal, "answered", "refused"
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
command "Fill" do
|
|
227
|
+
role "Operator"
|
|
228
|
+
goal "Choose the planned Work rows that start a session now and, with confirm, start them; without it, say what would start"
|
|
229
|
+
|
|
230
|
+
attribute :run, DispatchKey, sets: true
|
|
231
|
+
attribute :repo, Directory, sets: true
|
|
232
|
+
attribute :budget_minutes, Minutes, optional: true, sets: true
|
|
233
|
+
attribute :confirm, Switch, optional: true, sets: true
|
|
234
|
+
|
|
235
|
+
emits FillRequested
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
command "Settle" do
|
|
239
|
+
role "Operator"
|
|
240
|
+
goal "Check the started sessions and finish the row of each that is done, or yield the row of one that stopped"
|
|
241
|
+
|
|
242
|
+
attribute :run, DispatchKey, sets: true
|
|
243
|
+
attribute :repo, Directory, sets: true
|
|
244
|
+
|
|
245
|
+
emits SettleRequested
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
command "Record" do
|
|
249
|
+
role "System"
|
|
250
|
+
goal "Record what the filling or settling did"
|
|
251
|
+
|
|
252
|
+
reference_to Dispatch
|
|
253
|
+
attribute :report, Outcome, sets: true
|
|
254
|
+
|
|
255
|
+
emits DispatchAnswered
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
command "Decline" do
|
|
259
|
+
role "System"
|
|
260
|
+
goal "Record why the queue could not be read"
|
|
261
|
+
|
|
262
|
+
reference_to Dispatch
|
|
263
|
+
attribute :refusal, Outcome, sets: true
|
|
264
|
+
|
|
265
|
+
emits DispatchDeclined
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
policy "ChooseWhenFilling" do
|
|
270
|
+
on "Dispatch.FillRequested"
|
|
271
|
+
ask :choose, with: { run: :run }
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
policy "ConcludeWhenSettling" do
|
|
275
|
+
on "Dispatch.SettleRequested"
|
|
276
|
+
ask :conclude, with: { run: :run }
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
policy "RecordTheDispatch" do
|
|
280
|
+
on "Dispatch.DispatchReported"
|
|
281
|
+
trigger Dispatch::Record, with: { report: :report }
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
policy "RecordTheDeclinedDispatch" do
|
|
285
|
+
on "Dispatch.DispatchRefused"
|
|
286
|
+
trigger Dispatch::Decline, with: { refusal: :refusal }
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
# The directory is looked for first, so a brief is never handed to a session that has nowhere to work.
|
|
290
|
+
policy "LocateTheRepo" do
|
|
291
|
+
on "AgentRun.AgentRunRequested"
|
|
292
|
+
ask :locate, with: { run: :run }
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
policy "StartWhenTheRepoIsThere" do
|
|
296
|
+
on "AgentRun.RepoLocated"
|
|
297
|
+
ask :start, with: { run: :run }
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
policy "RecordTheSession" do
|
|
301
|
+
on "AgentRun.AgentStarted"
|
|
302
|
+
trigger AgentRun::Begin, with: { session: :session }
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
policy "RecordTheMissingRepo" do
|
|
306
|
+
on "AgentRun.RepoMissing"
|
|
307
|
+
trigger AgentRun::Decline, with: { refusal: :refusal }
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
policy "RecordTheRefusedStart" do
|
|
311
|
+
on "AgentRun.StartRefused"
|
|
312
|
+
trigger AgentRun::Decline, with: { refusal: :refusal }
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
policy "AskTheSession" do
|
|
316
|
+
on "AgentRun.AgentCheckRequested"
|
|
317
|
+
ask :examine, with: { run: :run }
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
# The session is looked at before it is removed; the port says whether a person took it over.
|
|
321
|
+
policy "ReviewBeforeTidy" do
|
|
322
|
+
on "AgentRun.TidyRequested"
|
|
323
|
+
ask :review, with: { run: :run }
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
policy "RemoveWhenNobodyTookOver" do
|
|
327
|
+
on "AgentRun.SessionReviewed"
|
|
328
|
+
where { taken_over == false }
|
|
329
|
+
ask :remove, with: { run: :run }
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
policy "KeepWhenAPersonTookOver" do
|
|
333
|
+
on "AgentRun.SessionReviewed"
|
|
334
|
+
where { taken_over != false }
|
|
335
|
+
trigger AgentRun::Retain, with: { refusal: :note }
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
policy "RecordTheRemoval" do
|
|
339
|
+
on "AgentRun.SessionRemoved"
|
|
340
|
+
trigger AgentRun::Tidied, with: { tidied_at: :removed_at }
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
policy "RecordTheKeptSession" do
|
|
344
|
+
on "AgentRun.RemoveRefused"
|
|
345
|
+
trigger AgentRun::Retain, with: { refusal: :refusal }
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
# `done` and `stopped` are a session's two ways of ending; `busy` and `idle` are not.
|
|
349
|
+
policy "FinishWhenTheSessionEnded" do
|
|
350
|
+
on "AgentRun.SessionChecked"
|
|
351
|
+
where { condition == "done" || condition == "stopped" }
|
|
352
|
+
trigger AgentRun::Finish, with: { condition: :condition }
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
end
|