Skip to content

refactor(orchestrator): pass phase, kernel, knowledge and loop inputs as typed objects instead of parallel keywords - #1977

Merged
chaojhou merged 35 commits into
mainfrom
refactor/args-orch-rest
Oct 19, 2026
Merged

chaojhou merged 35 commits into
mainfrom
refactor/args-orch-rest

Conversation

@lishuoshuo-amd

@lishuoshuo-amd lishuoshuo-amd commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator
  • Description: what and why

    Brings the rest of src/hyperloom/orchestrator (outside actions/, state/, trace_analysis/, which refactor(orchestrator): pass actions, state and trace-analysis inputs as typed objects instead of parallel keywords #1972 covered) under the parameter-count limit (function-args > 5). Many of these functions were helpers extracted from large phase, kernel and knowledge functions that took the caller's locals, or took the fields of one record, request or launch as separate keywords. Each now takes the object the values belong to:

    • loop: CoordinatorSettings, AdvisoryServices, RunOptions, HeldLeases, RunnerLinks.
    • phases: CloseArtifact, ProposalStep, AuthoredAttempt, ProgressStamp, AuthoringRetry, PhaseFlags, HistoryEntry, PhaseClock, LifecycleMark.
    • kernel: KernelPatchRequest, PodPatchApply, ResultsLocation, ConcCurveOptions, MergeLabels, ConflictQuery, LandingContext and private rung / arm records for the conc sweep.
    • knowledge: FrameworkOutcome, FactRecord, RemoteRecipeAudit, RecipeFilters; write_if_better takes the KBSelectionProfile its caller already holds.
    • enablement, bringup, specialists, prompts, scoring, rehearsal (GenerationScan lives in its own enablement/generation_scan.py so build.py does not import revalidation.py): LaneEnd, RoundSettlement, KeepEvidence, SetupExecution, GenerationScan, ProbeTarget, BootStreams, ReconcileStores / ReconcileLinks / ReconcileLimits, ClassifiedFailure, RebenchBenchmark, RebenchServer, RunOutcome, RunHarvest, SpecialistSpawn, ReapWatch, SessionContext, PromptCycle, PromptAssets, ScorerCallKeys.
    • The rehearsal stand-in ScriptedSpecialist.run takes the same SpecialistSpawn as the dispatcher it replaces, and a test pins the two signatures together.
    • Existing types are reused where they are the same concept: CriticIteration in critic_agent, PhaseBudget in the predictor (its definition moves from predictor/pump.py to predictor/payload.py, the module that takes it, so the two do not import each other), KBSelectionProfile in the remote recipe store, ServingTarget for the setting script.
    • Parameters no caller passes, or that the body never read, are deleted, and canonical_id_from_components (a pass-through to recipe_canonical_id with one internal caller) is removed (evidence below).

    No **kwargs, untyped dict, compatibility shim or new fallback branch is added; every call site is updated. Coordinator collaborator properties, ACTION_CATALOGUE and KERNEL_REQUEST_HANDLERS entries keep their names and call shapes.

    Scope: 81 functions over the limit outside the ten orchestrator files other open PRs are restructuring (none of which is touched); 70 are done. 11 keep their signatures: check_server_argv, integrate_controller_patches, _geak_revalidation_decision, PatchKB.stage_provenance, LocalRecipeStore.put_recipe, record_lifecycle_event and snapshot_source_layer because a caller lives in one of those ten files; ScriptedLaunchBackend.run because it stands in for run_with_session_kill, which those files call by keyword; KBStoreClient.put_knowledge / put_file / put_dir because _vendor/kb_store_client.py is a byte-identical upstream copy.

    Gate count of functions over the parameter limit (function-args entries in scripts/code_metrics_baseline.txt): 165 on main -> 95 (-70); the cyclomatic-complexity entries and the broad-except count are unchanged.

  • Linked issue(s): none.

  • Tests: added/updated? commands run?

    • Tests changed only where a signature changed; assertions are kept. Tests that bind run_task_registered, _finalize and _reap_loop directly are updated to the new signatures.
    • Base-vs-head output on the same inputs is identical (wall-clock floats and tmp-path hashes normalised) for: 260 orchestration-prompt variants and the conflict-resolver prompt; machine_state decisions and rows; kb_writeback, setup-ledger and remote-recipe audit rows; the setting script; the predictor payload; recipe-KB search and audit events; apply_kernel_patch results and manifests; the attempt summary and scorer traces.
    • Every changed production module imports under python:3.10-slim and python:3.11-slim.
    • Locally, per test file with PYTHONPATH=src (never the full suite): every test file under orchestrator/{bringup,enablement,loop,phases,rehearsal,kernel,actions/executors}, 259 inference_optimizer test files that import a changed module, and 3 kernelforge test files. All pass except 4 TraceLens-dependent tests that fail identically on the base here (TraceLens is not installed locally).
    • A whole-tree sweep for calls to every changed signature (including inspect.signature(...).bind contract tests and monkeypatch fakes) is clean.
    • ruff check / ruff format --check on the changed files; python scripts/code_metrics.py --base-ref origin/main: parameter count -70, duplication and design checks 0; the remaining findings are the length items below.
  • Size/complexity triggers crossed: split, or why the shape is right:

    • Diff budget: 3870 production Python lines changed (+2005 / -1865 in 51 production .py files). One concern (parameter count of the remaining orchestrator modules and their call sites). Each commit touches at most 5 production files and is grouped by module.
    • baseline-raise: 21 length findings, each in a function or module already over its limit at the base. The lines this PR adds come from wrapping keyword arguments into a record constructor at existing call sites (an opening and closing line per record) and, for modules, from the record types defined in the module that owns them. Lines added relative to the base: functions cli/__init__.py::_run_optimize +6, integrate_patch.py::_enablement_keep_records +2 and _maybe_write_framework_kb_record +3, enablement/build.py::_enqueue_build_launch_probe +2, enablement/lane.py::maybe_rearm_enablement +4, conc_sweep.py::_sweep_one_arm_single_server +10, controller_patch_integration.py::integrate_controller_patches +2, recipe_journal.py::_record_fact_per_variant +2, framework.py::_maybe_rearm_authored_lane +1, _submit_framework_agent_candidate_for_review +1, maybe_reauthor_from_critic_feedback +2; modules cli/__init__.py +10, integrate_patch.py +7, conc_sweep.py +21, recipe_journal.py +13, loop/coordinator.py +19, loop/dispatcher.py +7, phases/framework.py +23, phases/machine_state.py +4, specialists/runner.py +5, specialists/subprocess_.py +23. The alternatives are formatting tricks, which this PR does not use.
  • If this simplifies or refactors: which mechanism was removed, which contract was preserved, and the tests that show it:
    Removed: the parallel keyword lists and the canonical_id_from_components pass-through. Preserved: persisted state, KB, journal and ledger rows, prompts, and the name-resolved wiring, shown by the base-vs-head comparisons above.

    Deleted parameters (checked across src, scripts and tests): never passed: Coordinator(sub_agent_runner=, bus_class=), run_conc_sweep(num_prompts_factor=), invoke_runtime_cli(stderr_truncate=), MockRowScanBackend(dedup_key=); never read: write_framework_record(session_dir=), LocalRecipeStore.search(prefer=) (the body did del prefer).

  • Observable effect: what an operator will now see, and what the old behaviour cost them (if none, why the change is unobservable):
    None: no output file, state.json field, KB record, prompt, CLI flag or log line changes.

  • Breaking changes: yes, for Python callers only: the refactored functions take their typed objects, and canonical_id_from_components is no longer exported from hyperloom.orchestrator.knowledge.recipe_kb (use recipe_canonical_id). Every in-tree caller is updated.

  • PR addresses single concern: yes (parameter count of the remaining orchestrator modules).

  • Root cause is upstream (Magpie/TraceLens/GEAK/IntelliKit/AgentKernelArena), ticket filed: n/a.

@lishuoshuo-amd
lishuoshuo-amd requested a review from a team as a code owner October 19, 2026 05:06
@lishuoshuo-amd lishuoshuo-amd added size-exception Waives the PR diff budget; added by a maintainer with a reason in the PR description baseline-raise Waives new, worse and baseline-growth code-metrics findings; reason required in the PR description labels Oct 19, 2026
@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Code metrics gate: PASSED with waived findings (baseline-raise)

Judged: the 134 files this change touches. Files it does not touch never fail it; anything found there is listed under Outside this change for information.

Dimension Limit New Worse Baseline out of date Baseline entries vs base
Cyclomatic complexity fails > 20 0 0 0 69 +0
Cognitive complexity fails > 30 0 0 0 275 +0
Function length (lines) fails > 80 0 11 0 414 -2
Nested block depth fails > 5 0 0 0 26 +0
Parameter count fails > 5 0 0 0 95 -70
Module length (lines) warns > 800, fails > 1200 0 10 0 51 +0
Duplicated lines per file fails > 0 0 0 0 97 -1
Dead code (vulture) fails > 0 0 0 0 2 +0
Check Findings Effect
Comments 0
English only 0
Production code imports test code 0
Repeated literals 0
A1 Private name of another package 0
A8 Flag argument 0
A9 Tuple return 0
A10 Raw vocabulary comparison 0
A11 Hidden global write 0
A12 Pure forwarder 0
A12 Single-implementation abstraction 0

Worse than the baseline (waived by the baseline-raise label): 21

Unit Dimension Baseline Now
src/hyperloom/inference_optimizer/cli/__init__.py:2483 _run_optimize Function length (lines) 273 279
src/hyperloom/orchestrator/actions/executors/integrate_patch.py:3249 IntegratePatchExecutor._enablement_keep_records Function length (lines) 211 213
src/hyperloom/orchestrator/actions/executors/integrate_patch.py:4240 IntegratePatchExecutor._maybe_write_framework_kb_record Function length (lines) 114 117
src/hyperloom/orchestrator/enablement/build.py:386 EnablementBuild._enqueue_build_launch_probe Function length (lines) 84 86
src/hyperloom/orchestrator/enablement/lane.py:516 EnablementLane.maybe_rearm_enablement Function length (lines) 104 108
src/hyperloom/orchestrator/kernel/conc_sweep.py:716 _sweep_one_arm_single_server Function length (lines) 328 338
src/hyperloom/orchestrator/kernel/controller_patch_integration.py:243 integrate_controller_patches Function length (lines) 257 259
src/hyperloom/orchestrator/knowledge/recipe_journal.py:745 RecipeJournalCollaborator._record_fact_per_variant Function length (lines) 114 116
src/hyperloom/orchestrator/phases/framework.py:1250 FrameworkPhase._maybe_rearm_authored_lane Function length (lines) 103 104
src/hyperloom/orchestrator/phases/framework.py:1962 FrameworkPhase._submit_framework_agent_candidate_for_review Function length (lines) 97 98
src/hyperloom/orchestrator/phases/framework.py:2206 FrameworkPhase.maybe_reauthor_from_critic_feedback Function length (lines) 131 133
src/hyperloom/inference_optimizer/cli/__init__.py:1 Module length (lines) 2569 2815
src/hyperloom/orchestrator/actions/executors/integrate_patch.py:1 Module length (lines) 4741 4748
src/hyperloom/orchestrator/kernel/conc_sweep.py:1 Module length (lines) 1429 1450
src/hyperloom/orchestrator/knowledge/recipe_journal.py:1 Module length (lines) 1785 1800
src/hyperloom/orchestrator/loop/coordinator.py:1 Module length (lines) 1423 1442
src/hyperloom/orchestrator/loop/dispatcher.py:1 Module length (lines) 1503 1557
src/hyperloom/orchestrator/phases/framework.py:1 Module length (lines) 3139 3167
src/hyperloom/orchestrator/phases/machine_state.py:1 Module length (lines) 2189 2198
src/hyperloom/orchestrator/specialists/runner.py:1 Module length (lines) 1520 1525
src/hyperloom/orchestrator/specialists/subprocess_.py:1 Module length (lines) 1747 1770

How to fix

  • New or worse: split the unit (extract a function, a class, a module) until it is back under the limit, or no worse than its recorded value. The baseline cannot absorb a new violation: CI refuses any baseline entry added or raised relative to the base branch.
  • Baseline out of date: something improved. Run python scripts/code_metrics.py --update-baseline and commit scripts/code_metrics_baseline.txt; the command only lowers or removes entries.
  • Override: the baseline-raise PR label waives new, worse and baseline-growth findings and the failing design checks (they stay listed here). Use it only with the reason in the PR description; it waives nothing else.
  • Tools for a local run: pip install ruff==0.16.2 complexipy==8.0.1 vulture==2.16 and npm install -g jscpd@5.4.1 (or point CODE_METRICS_JSCPD at another jscpd command, such as npx --yes jscpd@<version>).

Module length warning: over 800 lines, within the 1200-line failure limit (not failing): 4

Module Lines Limit
src/hyperloom/orchestrator/enablement/lane.py 892 warns > 800
src/hyperloom/orchestrator/kernel/attempt_summary.py 1008 warns > 800
src/hyperloom/orchestrator/phases/close.py 1010 warns > 800
src/hyperloom/orchestrator/specialists/dispatch.py 1055 warns > 800

Already over at the base (backlog, not this change's): 11

Unit Dimension Base Now
src/hyperloom/inference_optimizer/cli/__init__.py:1814 _reexport_session_environment Function length (lines) 111 111
src/hyperloom/inference_optimizer/cli/__init__.py:2376 _resolve_agent_lineup Function length (lines) 89 89
src/hyperloom/inference_optimizer/cli/__init__.py:2271 _resolve_run_topology Function length (lines) 92 92
src/hyperloom/inference_optimizer/cli/__init__.py:1927 _resume_session Function length (lines) 170 170
src/hyperloom/inference_optimizer/cli/__init__.py:2099 _seed_fresh_session Function length (lines) 170 170
src/hyperloom/orchestrator/enablement/lane.py:91 EnablementLane._maybe_enqueue_enablement_specialist Function length (lines) 94 94
src/hyperloom/orchestrator/kernel/conc_sweep.py:1187 run_conc_sweep Function length (lines) 251 249
src/hyperloom/orchestrator/knowledge/recipe_journal.py:143 _record_config_attempts Function length (lines) 142 142
src/hyperloom/orchestrator/prompts/prompt_builder.py:616 _section_decision_framework Function length (lines) 104 104
src/hyperloom/orchestrator/specialists/runner.py:559 SpecialistRunner._prepare Function length (lines) 199 199
src/hyperloom/orchestrator/prompts/prompt_builder.py:1 Module length (lines) 1217 1212
70 findings in files this change does not touch

Outside this change (informational): 70

Unit Dimension Baseline Now
src/hyperloom/orchestrator/enablement/recipe/projections.py project_launch_evidence Cognitive complexity absent 36
src/hyperloom/orchestrator/state/shared_state.py resolve_graded_comparison Cognitive complexity absent 34
src/hyperloom_kb/collect/mapping.py _experience Cognitive complexity absent 31
src/hyperloom_kb/schema.py FieldDeclaration.__post_init__ Cognitive complexity absent 32
src/kernelforge/cli/forge_loop_command.py _prepare_measurement_driver Cognitive complexity absent 36
src/kernelforge/cli/forge_loop_command.py _read_kb_warm_start Cognitive complexity absent 40
src/kernelforge/loop/runner.py IterationLoop._collect_session_candidate Cognitive complexity absent 44
src/kernelforge/loop/runner.py IterationLoop._rule_on_attempt Cognitive complexity absent 38
src/hyperloom/inference_optimizer/multi_node/cli.py _restart_multinode Function length (lines) absent 107
src/hyperloom/inference_optimizer/multi_node/scripts/launch_multinode.py _build_parser Function length (lines) absent 84
src/hyperloom/inference_optimizer/multi_node/scripts/launch_multinode.py _spawn_rank_actors Function length (lines) absent 84
src/hyperloom_kb/sync.py GlobalSync.pull Function length (lines) absent 84
src/kernelforge/cli/forge_loop_command.py _RunReporter.build_result Function length (lines) absent 91
src/kernelforge/cli/forge_loop_command.py _prepare_measurement_driver Function length (lines) absent 136
src/kernelforge/cli/forge_loop_command.py _read_kb_warm_start Function length (lines) absent 149
src/kernelforge/loop/runner.py IterationLoop._close_iteration Function length (lines) absent 117
src/kernelforge/loop/runner.py IterationLoop._collect_session_candidate Function length (lines) absent 184
src/kernelforge/loop/runner.py IterationLoop._implementer_history Function length (lines) absent 112
src/kernelforge/loop/runner.py IterationLoop._rule_on_attempt Function length (lines) absent 102
src/kernelforge/loop/runner.py IterationLoop._run_supervisor_review Function length (lines) absent 88
src/kernelforge/loop/runner.py IterationLoop._source_attempt Function length (lines) absent 173
src/hyperloom_kb/http_service.py Module length (lines) absent 1525
src/kernelforge/cli/forge_loop_command.py Module length (lines) absent 2063
src/hyperloom/orchestrator/actions/executors/_geak_sweep.py sweep_via_geak Cognitive complexity 67 70
src/hyperloom/orchestrator/actions/executors/explore.py ExploreExecutor.__call__ Cognitive complexity 369 374

...and 45 more; the job log lists every row.

Verdict computed by the gate scripts in /home/runner/work/_temp/code-metrics-gate, not by this tree's copy.

Thresholds and sources: [tool.hyperloom.code_metrics] in pyproject.toml. Tools: complexipy 8.0.1, jscpd 5.4.1, ruff 0.16.2, vulture 2.16.

Comment thread src/hyperloom/orchestrator/predictor/payload.py Fixed
Comment thread src/hyperloom/orchestrator/enablement/build.py Fixed
…and close the lane from LaneEnd and RoundSettlement
…Server, and drop the unused num_prompts_factor parameter
…emote publish audit from one RemoteRecipeAudit
…Request, and drop the pass-through canonical_id_from_components
…gs and AdvisoryServices and drop the unused sub_agent_runner and bus_class
@lishuoshuo-amd
lishuoshuo-amd force-pushed the refactor/args-orch-rest branch from 96da298 to 0302478 Compare October 19, 2026 05:54
@lishuoshuo-amd

Copy link
Copy Markdown
Collaborator Author

PR #1977 -- refactor(orchestrator): pass phase, kernel, knowledge and loop inputs as typed objects instead of parallel keywords

What it does: Replaces the long keyword lists of 70 src/hyperloom/orchestrator helpers (loop, phases, kernel, knowledge, enablement, bringup, specialists, prompts, scoring) with frozen typed objects built at the call site, so the function-args gate count drops 165 -> 95; it also deletes six parameters nobody passed or read and the canonical_id_from_components pass-through. At head f2cb120 the persisted rows, prompts and name-resolved Coordinator wiring are unchanged, and the rehearsal stand-in ScriptedSpecialist.run now takes the same SpecialistSpawn as the dispatcher it replaces.

Blocking issues: none

deferred: none

Step 7 independent reader: a second reader re-ran the ScriptedSpecialist pin test against the pre-fix stand-in (fails) and the fixed head (passes), and re-swept the tree for other stand-ins mirroring a changed signature.
SKIPPED: V4 -- openprs.txt "# PARTIAL: #1032 changes 1075 files, only its first 100 were compared", overlap there unchecked
SKIPPED: V4 -- openprs.txt "# PARTIAL: #1154 changes 1232 files, only its first 100 were compared", overlap there unchecked
SKIPPED: V4 -- openprs.txt "# PARTIAL: #1276 changes 1311 files, only its first 100 were compared", overlap there unchecked
SKIPPED: V4 -- openprs.txt "# PARTIAL: #1869 changes 441 files, only its first 100 were compared", overlap there unchecked
SKIPPED: V4 -- openprs.txt "# PARTIAL: #1962 changes 205 files, only its first 100 were compared", overlap there unchecked

Checked: new commit f2cb120 (rehearsal/specialist.py:101, test_scripted_backends.py, test_bringup_round_scenario.py); earlier finding re-verified fixed (signatures of ScriptedSpecialist.run and SpecialistSubprocessDispatcher.run both (self, request: SpecialistSpawn), done-file lands in the worktree when one is given); second tree-wide sweep for stand-ins and fakes mirroring a changed signature (every def in src matched by name and parameters against the 72 changed signatures, non-test Scripted/Mock/Fake/Stub/NoOp/Null classes, monkeypatch.setattr targets and dotted-string patch paths, **_ignored/**_kwargs catch-alls in non-test code, CLI Coordinator fakes): no other mirror; tree-wide AST check of all changed defs and constructors against every call in src/scripts/examples/docs (0 stale); Coordinator/dispatcher/machine_state/write_if_better/build_request/canonical_id_from_components checks from the first pass unchanged; whole updated description re-read against the diff (51 production files, +2005/-1865 = 3870, 165 -> 95, per-module deltas, 35 commits, new ScriptedSpecialist bullet); import-edge scan base vs head (no new cycle; the new commit adds no edge) | Ran: ruff F821/F822/F823/F401/F841/F811/F632 over the 134 changed paths (clean); import of all 51 changed production modules under python:3.10-slim and python:3.11-slim (0 failures); PYTHONPATH=src pytest per file: rehearsal/test_scripted_backends (21 passed) and test_bringup_round_scenario (6 passed); the new pin test against the 0302478 stand-in in a /tmp copy (fails, as intended); first-pass files test_machine_state, test_phase_state_machine, test_dispatcher_execution_shutdown, test_coordinator_sync_helpers_coverage_unit, test_conc_sweep, test_specialist_subprocess, test_local_recipe_store, test_predictor_payload, test_patch_conflict_merge, test_apply_kernel_patch_multinode, bringup/test_reconcile (all pass, code unchanged); /tmp/rv/repro_scripted.py and a direct ScriptedSpecialist.run(SpecialistSpawn) call (no TypeError) | Base: a40eec4 | Head: f2cb120

LGTM

@chaojhou chaojhou left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #1977 -- refactor(orchestrator): pass phase, kernel, knowledge and loop inputs as typed objects instead of parallel keywords

What it does: brings the rest of src/hyperloom/orchestrator (loop, phases, kernel, knowledge, enablement, bringup, specialists, prompts, scoring, rehearsal) under the parameter-count limit. 70 functions now take the record their values belong to (CoordinatorSettings / RunOptions, PhaseFlags, KernelPatchRequest, FactRecord, SpecialistSpawn and others), existing types are reused where they are the same concept (CriticIteration, PhaseBudget, KBSelectionProfile, ServingTarget), six parameters nobody passed or read and the canonical_id_from_components pass-through are deleted, and the rehearsal ScriptedSpecialist.run is pinned to the dispatcher's signature. Prompts, persisted state, KB and journal rows and CLI argv are unchanged.

Blocking issues: none

Non-blocking:

  • Records that only exist to pass the gate: PhaseFlags is built from the same three getters in three places in machine.py and once in close.py, and a phase_flags() query beside that state would make it one decision. rehearsal/launch.py _LaunchRequest repeats RecordedLaunch's fields, LaneEnd mostly repeats LaneTerminal, and ScorerCallKeys carries three of LLMCallSite's join keys and is copied into one field by field.
  • Parameters kept only for tests: GenerationScan.attempts = 2 and RecipeFilters are set by no production caller, the same ground on which this PR deletes six other parameters. _SweepRun.num_prompts_factor now always holds DEFAULT_NUM_PROMPTS_FACTOR.
  • The new records that callers in other packages build (CoordinatorSettings / AdvisoryServices / RunOptions, SpecialistSpawn, and RunnerLinks / BootStreams / RecipeFilters) are not in their modules' __all__, while FrameworkOutcome, ConcCurveOptions and the rebench records are.
  • Positional constructions of same-typed neighbours: HistoryEntry(from_phase, to_phase, reason, ...) at machine_state.py:1983 and the ResultsLocation unpack in attempt_summary.py:756; keywords would keep a later field reorder from swapping them silently. NamedTuple and frozen dataclass records are mixed within one package.
  • Docstrings that still name a parameter now inside a record: _record_enablement_round (stop_reason, attempt), build_execution_row (outcome), _reap_loop (progress_cb), apply_kernel_patch (snapshot_dir / patch_path / target_file); SpecialistSpawn.worktree_base describes the diff base, which is worktree_base_commit.
  • The breaking-changes line could name Coordinator(sub_agent_runner=, bus_class=) and the re-exported MockRowScanBackend(dedup_key=) beside canonical_id_from_components.

Checked: every hunk of the 51 production files in six module groups for field-to-keyword mapping, defaults, eager-vs-lazy reads, frozen records holding caller-mutated objects, positional order, and call sites including monkeypatch fakes and getattr dispatch; callers of the six deleted parameters and canonical_id_from_components across src, scripts, examples, docs and SKILL.md; the PhaseBudget and GenerationScan moves (no cycle; import-linter passes); description figures (function-args 165 -> 95 and the per-function and per-module line deltas match the base and head files) | Ran: base vs head on 192+ orchestration prompt variants (identical hash), Coordinator.run in three stop scenarios, 275 machine_state decision and history cases, apply_kernel_patch (dry-run, apply, shell rebuild, missing patch), conc-sweep plans, KB writeback / RecipeKB put-search-get / journal and audit rows, ladder classify and setup-ledger rows (all identical with clocks normalised); an AST sweep of every call to a changed signature against inspect.signature (0 bad keywords); git merge-tree against origin/main and the open #1957-#1965 (all clean); CI green at head. Not run: pytest (not installed here) | Base: a40eec4 | Head: f2cb120

LGTM

@chaojhou
chaojhou merged commit a452748 into main Oct 19, 2026
40 of 44 checks passed
@chaojhou
chaojhou deleted the refactor/args-orch-rest branch October 19, 2026 07:01
siliangchen-amd added a commit that referenced this pull request Oct 19, 2026
…ignature, before and after main's #1977

Main's #1977 (a452748) takes the scope, metric, value and objective as one KBSelectionProfile. PR #1869 tests the merge with main, where the write-back and CLOSE tests failed with a TypeError. Drop the old keywords once main is merged into multibranch-dev past a452748.

Co-authored-by: Cursor <cursoragent@cursor.com>
zoroyihan7 added a commit that referenced this pull request Oct 19, 2026
…ain's #1977 expects

Co-Authored-By: Claude <noreply@anthropic.com>
siliangchen-amd added a commit that referenced this pull request Oct 19, 2026
…ne KBSelectionProfile

multibranch-dev now has main past #1977 (a0181e8), so the old-keyword path dc29173 kept for the merge is gone.

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

baseline-raise Waives new, worse and baseline-growth code-metrics findings; reason required in the PR description size-exception Waives the PR diff budget; added by a maintainer with a reason in the PR description

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants