Skip to content

refactor(knowledge): delete the dead and repeated code in seven over-gate functions - #2056

Merged
ZhengGong-amd merged 8 commits into
mainfrom
lean/shafeng/cc20-remote-recipe
Oct 21, 2026
Merged

ZhengGong-amd merged 8 commits into
mainfrom
lean/shafeng/cc20-remote-recipe

Conversation

@fengshaoyi-amd

Copy link
Copy Markdown
Contributor

What this does

Seven functions in the remote Recipe knowledge path (orchestrator/knowledge/remote_recipe/) were over the code-metrics gate. This PR brings each one under every limit it broke, mostly by deleting what it re-did: a hand-written copy of the member resolution PatchKB already owns, a union into an argument its only caller passes empty, a fallback for a recipe layout no writer produces, a synthetic index key, a fallback to a derived attempts view, two flags that restate a for … else, two ternaries that a .get default and is not False already express, and a conversion the callee repeats anyway.

Production code: +160 / −227 (net −67) across 3 files. The code-metrics baseline loses 10 entries and gains none; the values.py module-length entry drops from 1,284 to 1,224.

This continues the complexity cleanup of #2024, #2026 and #2052. The seven commits read one at a time, and each commit message lists what it deleted and why that is safe.

Commit Module Production lines Baseline entries removed
742e54e resolve replayed prior overlays through PatchKB remote_recipe/values.py +61 / −85 3
acd51c7 return merged columns instead of unioning into value remote_recipe/values.py +39 / −69 2
f4d6274 drop dead fallbacks from the kernel rewrite builder remote_recipe/values.py +4 / −14 1
71d3460 collapse two ternaries in the warm-recipe projection remote_recipe/values.py +2 / −5 1
345c579 page the remote candidate search with for/else remote_recipe/__init__.py +53 / −53 2
bb9ec3f pass server args to their sanitizer unconverted remote_recipe/sanitize.py +1 / −1 1
54c1cc2 tighten the code-metrics baseline for remote_recipe scripts/code_metrics_baseline.txt — the 10 above, in one place

remote_recipe/ is under src/hyperloom/orchestrator/knowledge/. Every other path cited below is under src/hyperloom/orchestrator/, and every line number is on this PR's head.

Gate numbers per function

Measured with the gate's own tools (ruff C901, complexipy, function lines), base → head. Limits are 20, 30 and 80, and a value fails only above its limit; bold values were over the limit at base.

Function Cyclomatic Cognitive Lines
_adopt_replayed_prior 28 → 14 70 → 30 139 → 75
merge_staged_sections 12 → 10 48 → 26 57 → 45
build_remote_knowledge 8 → 5 30 → 20 107 → 76
build_kernel_rewrite_value 5 → 5 17 → 17 88 → 78
knowledge_to_warm_recipe 11 → 11 32 → 30 57 → 54
RemoteWarmRecipeAdapter.search 20 → 11 49 → 18 104 → 57
_sanitize_value 15 → 15 31 → 30 45 → 45

Across the 3 touched production files: C901 total 297 → 288, cognitive total 617 → 556, decision points 551 → 524, functions 66 → 69 (four added, _is_ref_list deleted). Functions over a gate limit: cyclomatic 1 → 0, cognitive 5 → 0, length 4 → 0.

New names

Numbers are cyclomatic / cognitive / lines.

  • _prior_apply_roots (6 / 12 / 14): the prior record's apply roots keyed by prior overlay ref, lifted unchanged out of _adopt_replayed_prior.
  • _provenance_with_apply_roots (2 / 8 / 22): merges the re-homed apply roots into the provenance row of the replay stack index, creating that row when absent; lifted unchanged.
  • _dropped_staged_sections (2 / 6 / 16): fails while section staging is still owed, otherwise returns the stagings dropped for missing patch sources; the outbox triage that opened build_remote_knowledge.
  • RemoteWarmRecipeAdapter._page_rows (10 / 20 / 46): projects one page of identity hits onto warm rows, fetching and caching each new candidate's view until the scan cap; the per-item loop of search, unchanged.
  • Deleted: _is_ref_list, which only the deleted union called.

Observable effect

Nothing an operator sees changes. Published Recipe records, the warm rows T0 ranks, staged columns, adopted overlay files and log lines are the same for every input the repo's own callers produce. knowledge_to_warm_recipe and _sanitize_value return the same result for every input; for the second, sanitize_publish_server_args applies the same str(value or "") itself (remote_recipe/sanitize.py:173).

The differences below are reachable only by input that no caller in the repo produces:

  • Re-adopting replayed prior overlays at CLOSE (_adopt_replayed_prior). Each replayed ref now resolves through PatchKB.prior_file (knowledge/agent_kb.py:48-73).
    • A replayed ref that PatchKB.prior_file does not resolve fails with the existing "successfully replayed prior overlay is missing: ''". Base had a message per cause: "replayed prior files root must not be a symlink", "successfully replayed prior overlay resolves through a symlink: …", "replayed prior overlay escapes files root: …", and the path-validation error for a ref containing ... A ref outside patch/, which base adopted, now fails the same way.
    • An overlay that exists but cannot be read fails at adoption with "cannot adopt successfully replayed prior overlay '': " instead of "cannot read successfully replayed prior overlay '': ".
    • A ref with a leading / or surrounding whitespace now resolves the way PRELUDE resolved it. Base rejected the first as an invalid artifact path and reported the second missing.
    • Why no caller produces these: PRELUDE resolved every ref it replayed through the same PatchKB.prior_file, and gave up the replay when one did not resolve (phases/prelude.py:1001-1004). The ref travels as the patch entry's patch_file (:1006), which the baseline executor echoes back for each applied overlay (actions/executors/baseline.py:1263, :1455-1460), into warm_replay_outcome["replayed_patch_refs"] (phases/prelude.py:2328-2346, :2449-2450). Only a warm-start tree changed between PRELUDE and CLOSE reaches these paths.
  • A warm-start recipe.json that carries its overlays only under knowledge.value. Base fell back to knowledge.value. Head reads only the top-level value, so such a file fails with "successfully replayed prior overlays are absent from prior knowledge". The only writer, RemoteRecipeClient.read, flattens knowledge into the top level (remote_recipe/client.py:88-105, :350, :418), and PRELUDE reads the overlays from that top-level value too (PatchKB.read_patches at phases/prelude.py:995 reads through KnowledgeSections.read, remote_recipe/_vendor/kb_store_client.py:697-705).
  • Unexpected types on the CLOSE inputs.
    • A warm_replay_outcome["status"] that is not a string but whose str() is "reproduced" no longer counts as reproduced. Every writer assigns a string literal: PRELUDE's replay paths (for example phases/prelude.py:1496 and :2447) and loop/writeback.py:4086-4088.
    • A sections object whose warm_start_dir is a string, or that has no warm_start_dir at all, raises TypeError or AttributeError. Base wrapped the string in a Path, and treated a missing attribute as "no warm-start artifact root". KnowledgeSections stores warm_start_dir as a Path or None (remote_recipe/_vendor/kb_store_client.py:573-576), and production passes KnowledgeSections.from_env() (remote_recipe/__init__.py:91).
  • A dropped staging row whose stack_index is not an integer. Base skipped the row when matching dropped stagings to stack entries; head raises the ValueError or TypeError from int(). The only producer writes int(stack_index) (loop/writeback.py:618), and the drain that moves rows into the dead letter already reads it with a bare int() (loop/writeback.py:678, :696).
  • Non-mapping entries in optimization_stack. Base matched a dropped staging to a stack entry by the entry's position in the raw list. Head uses its position among the mapping entries, the position the replay index and _worked_from_stack already used. The field is typed list[dict[str, Any]] (state/shared_state.py:515), and every reader in this module skips non-mapping entries.
  • merge_staged_sections's interface. It returns {column: knowledge} instead of writing into a value argument and returning the names, it no longer unions ref lists already present on that argument, and only and required are now required keywords. It is listed in values.__all__, but the remote_recipe package does not re-export it and nothing else in the repository imports it. Its one caller, build_remote_knowledge (remote_recipe/values.py:1087), always passed a freshly built empty value.
  • build_kernel_rewrite_value reads only kernel_opt_task_attempts. A state object that carries attempts only under kernel_opt_attempts no longer publishes them. The only production state that reaches the builder is the coordinator's SharedState (knowledge/recipe_journal.py:1382-1386 → remote_recipe/__init__.py:190 → :88 → remote_recipe/values.py:1085 → knowledge/agent_kb.py:425). There, kernel_opt_attempts is a property that re-indexes kernel_opt_task_attempts (state/shared_state.py:1722-1727), and the re-index of an empty ledger is empty (kernel/_kernel_decisions.py:741-753).
  • A RemoteWarmRecipeAdapter.search_page_cap of 0 or less now logs "remote Recipe candidate search stopped after N pages", N being the cap, where base stayed silent. It is a class constant of 10 (remote_recipe/__init__.py:205), and nothing in the repository assigns it; tests assign only search_candidate_cap.

Checklist

  • Description: above.
  • Linked issue(s): none.
  • Tests:
    • One existing test is deleted: test_merge_staged_sections_unions_and_dedups_prior_refs exercised only the union into a prefilled value, which no caller passes. No test is added.
    • On Windows, on this head, the four test files that import these modules (test_column_kb, test_enablement_recipe_steps, test_promote_shared_state_lock and test_remote_recipe_v2) give 347 passed and 15 failed. Each of the 15 also fails on this host without this change, rerun on a main checkout (b4e296a) whose remote_recipe modules are identical to this PR's base. Linux CI on this PR is the authority.
    • Two rewrite-builder tests are among those Windows failures (test_rewrite_writer_accepts_multi_file_patch and test_integrate_stack_is_authoritative_for_rewrite_patch), and no test reaches the page budget or the pagination errors of search. Both changes were therefore also run differentially against the base modules, which main has not changed since, with no difference:
      • build_kernel_rewrite_value: rooted, rootless and padded-root attempts. Rows, staged members and the logged warning are byte-identical.
      • RemoteWarmRecipeAdapter.search: nine scenarios, covering the page budget exhausted and exactly met, the candidate cap mid-page and at a page boundary followed by a second search, cached rows, rejected and missing views, non-advancing and non-integer next_offset, non-list items, and an empty first page. Rows, store calls, view fetches and log records are byte-identical.
    • Diff coverage, measured locally on the same production diff before the rebase onto main: 96.9% of the 65 changed statements that coverage measures ([tool.coverage.run] omits __init__.py files, as in CI). The two uncovered lines are the continues that skip non-mapping provenance rows in _prior_apply_roots.
  • Size/complexity triggers crossed:
    • 387 production Python lines changed (scripts/pr_hygiene.py size), under the 400-line warning; net −67.
    • No added or changed function crosses a gate limit, and the four new helpers stay under the review triggers; the largest, _page_rows, is at cyclomatic 10 and 46 lines.
    • Three changed functions stay over the ~60-line review trigger, each shorter than before: _adopt_replayed_prior (139 → 75), build_remote_knowledge (107 → 76) and build_kernel_rewrite_value (88 → 78). Four stay over the cyclomatic trigger of 10 without gaining a branch: _sanitize_value (15), _adopt_replayed_prior (14), knowledge_to_warm_recipe (11) and search (11).
    • _adopt_replayed_prior, knowledge_to_warm_recipe and _sanitize_value sit at cognitive 30, which the gate allows; each got there by deletion alone.
    • values.py stays over the 1,200-line module limit, but gets shorter: 1,291 → 1,224 lines, and its baseline entry drops from 1,284 to 1,224.
  • If this simplifies or refactors:
    • Mechanisms removed:
      • _adopt_replayed_prior's hand-written copy of PatchKB's member resolution: the files-root and per-part symlink checks, the escape check, the read probe, the path validation and the seen-set.
      • The knowledge.value fallback for the warm-start recipe.json.
      • The per-candidate rewrite of the patch list, the function-local import json, the getattr/Path() re-wrap of warm_start_dir, and the str(… or "") on the replay status.
      • The ref-list union in merge_staged_sections together with _is_ref_list. Its write-into-value output channel became a return value, and its three copies of the qualifier became one.
      • In build_remote_knowledge: the synthetic __stack_index key, the try/except around int(stack_index), and the second filter over pending rows, which every row passes once the blocking check has not raised.
      • In build_kernel_rewrite_value: the kernel_opt_attempts fallback, and patch or 'unavailable', whose patch is never empty past the raise at remote_recipe/values.py:675-679.
      • Two ternaries in knowledge_to_warm_recipe.
      • In search: the identity alias "hardware": "hardware", the pages_scanned and has_more flags, and the per-page re-check of the candidate cap.
      • In _sanitize_value: the duplicated str(value or "").
    • Contract preserved: every in-repo caller and all persisted data.
    • Tests: as above.
  • Observable effect: see the section above.
  • Breaking changes: no. Nothing changes for in-repo callers or persisted data; merge_staged_sections changes its interface (see above), and its only caller moves with it.
  • PR addresses single concern: yes, bringing these seven functions under the gate.
  • Root cause is upstream: not applicable.

Known merge interactions

Gate

scripts/code_metrics.py --base-ref origin/main (5fbbcf3) passes on the 5 touched files: 0 new, 0 worse, 0 out-of-date entries, and every design check (comments, English only, production importing test code, repeated literals, A1, A8–A12) has 0 findings. Baseline: −10 entries, +0, with one module-length entry lowered. ruff check and ruff format --check are clean on the touched files.

fengshaoyi-amd and others added 7 commits October 20, 2026 18:06
_adopt_replayed_prior re-implemented, by hand, the member resolution
PatchKB.prior_file already owns: the files-root symlink check, the
per-part symlink walk, the resolve/relative_to escape check, the is_file
check, a read_bytes probe, validate_relative_path and a seen-set. Every
ref in warm_replay_outcome["replayed_patch_refs"] is a ref PRELUDE
resolved through that same PatchKB.prior_file before it applied it
(prelude.py:1001-1004, refs recorded at :2328-2346 and :2449-2450), so
CLOSE now asks the owner again and raises the existing "is missing"
error when it no longer resolves. An unreadable member fails at
adoption ("cannot adopt ...") instead of at the deleted read probe.

Also deleted:
- the knowledge.value fallback when reading the warm-start recipe.json:
  its only writer, RemoteRecipeClient.read, flattens knowledge into the
  top level (client.py:88-104, :350, :418), and PRELUDE reads overlays
  only from the top-level value;
- the function-local `import json` (the module imports it) and the
  getattr/Path() re-wrap of KnowledgeSections.warm_start_dir, which is
  always a Path or None;
- str(... or "") on warm_replay_outcome["status"], which every writer
  sets to a string;
- the per-candidate rewrite of value["patch"]["patches"]: the adopted
  refs are merged once after the loop, with the same result.

The prior apply-root lookup and the provenance re-home move into
_prior_apply_roots and _provenance_with_apply_roots unchanged.

Co-authored-by: Cursor <cursoragent@cursor.com>
…alue

merge_staged_sections unioned every flat ref list it found already on
`value` with the staged column. Its only production caller,
build_remote_knowledge, has always passed a freshly built
{name: {} for name in RECIPE_SECTIONS}, and the prior record is adopted
only after the merge, so there was never anything to union. Delete the
union and _is_ref_list, and return {column: knowledge} in draft order
instead of writing into an argument and returning the names beside it.
`only` and `required` lose their None defaults: production always
passes both, and the one caller without them was the test of the union.
The "required " qualifier is computed once per column instead of in
each of its three raise sites, and the existing handler re-raises
RemoteRecipeValidationError through its own clause instead of an
isinstance check.

build_remote_knowledge:
- the outbox triage moves into _dropped_staged_sections, which no
  longer re-filters the pending rows: once no row blocks, every pending
  row is a dropped one;
- the try/except around int(row["stack_index"]) goes: the only producer
  writes int(stack_index) (loop/writeback.py:618) and the drain reads it
  with a bare int() (writeback.py:678, :696);
- the synthetic "__stack_index" key copied into every stack entry goes:
  the required-owner check enumerates the mapping stack, the same
  position _adopt_replayed_prior already uses for the replay index.

Deleted test: test_merge_staged_sections_unions_and_dedups_prior_refs,
which only exercised the union with a prefilled value that no caller
passes.

Co-authored-by: Cursor <cursoragent@cursor.com>
build_kernel_rewrite_value read
`kernel_opt_task_attempts or kernel_opt_attempts`. The only production
state that reaches it is the coordinator's SharedState
(recipe_journal.py:1383 -> remote_recipe/__init__.py:190 -> :88 ->
values.py:1085 -> agent_kb.py:425), where kernel_opt_attempts is a
property that re-indexes kernel_opt_task_attempts
(state/shared_state.py:1730-1735). That re-index returns {} for an
empty ledger (kernel/_kernel_decisions.py:741-753), so whenever the
first term is empty the second is too. Read the one owner.

The experience document printed `patch or 'unavailable'`, but `patch`
is the ref files.add returned, and the loop raises a few lines earlier
when that ref is empty. The document is now built from one f-string
with the same bytes, instead of joining a tuple of lines.

A differential run of the builder on base and head, over rooted,
rootless and padded-root attempts, gives byte-identical rows, staged
members and warnings.

Co-authored-by: Cursor <cursoragent@cursor.com>
…tion

knowledge_to_warm_recipe picked the validated gain with
`interactivity_gain if "interactivity_gain_pct" in knowledge else ...`
after computing interactivity_gain up front. `knowledge` is always a
plain dict here, so `knowledge.get("interactivity_gain_pct", fallback)`
selects the same branch for every record, including one that stores
the key with a null value.

`bool(x) if isinstance(x, bool) else True` for view.replayable is
`x is not False` for every input: only the False singleton disables
replay, exactly as before.

Co-authored-by: Cursor <cursoragent@cursor.com>
RemoteWarmRecipeAdapter.search carried two flags, pages_scanned and
has_more, only to decide whether to warn that the scan stopped at its
page budget. The warning fired exactly when every page iteration ran
to completion, which is what a for loop's else clause states, so both
flags go. The while condition also re-checked the candidate cap before
every page, but each iteration that continues has just broken out if
the cap was reached, so the check only matters on entry and is now
made once before the scan.

The label alias table mapped "hardware" to "hardware", which
aliases.get(key, key) already does; that entry goes.

The per-item loop moves unchanged into _page_rows, which projects one
page of identity hits onto warm rows and caches each new candidate's
view until the scan cap.

A differential run on base and head over nine scenarios (page budget
exhausted, exactly ten pages, candidate cap mid-page and at a page
boundary followed by a second search, cached rows, rejected and
missing views, non-advancing and non-integer next_offset, non-list
items, an empty first page) gives byte-identical rows, store calls,
view fetches and log records.

The one input that now behaves differently is search_page_cap <= 0,
which logs "stopped after 0 pages" where it used to stay silent. It is
a class constant of 10 and nothing in the repository assigns it.

Co-authored-by: Cursor <cursoragent@cursor.com>
_sanitize_value handed extra_server_args to sanitize_publish_server_args
as str(value or ""), and that function's first statement tokenizes
str(value or "") again. Converting twice is the same as converting
once, so the caller's copy goes.

Co-authored-by: Cursor <cursoragent@cursor.com>
Remove the ten function entries the remote_recipe rework brought within
the gate (_adopt_replayed_prior cognitive, cyclomatic and length;
merge_staged_sections, knowledge_to_warm_recipe and _sanitize_value
cognitive; RemoteWarmRecipeAdapter.search cognitive and length;
build_kernel_rewrite_value and build_remote_knowledge length) and lower
the values.py module length from 1284 to 1224 lines.

Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions

Copy link
Copy Markdown

Code metrics gate: PASSED

Judged: the 5 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 58 -1
Cognitive complexity fails > 30 0 0 0 240 -5
Function length (lines) fails > 80 0 0 0 387 -4
Nested block depth fails > 5 0 0 0 24 +0
Parameter count fails > 5 0 0 0 95 +0
Module length (lines) warns > 800, fails > 1200 0 0 0 50 +0
Duplicated lines per file fails > 0 0 0 0 97 +0
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
116 findings in files this change does not touch

Outside this change (informational): 116

Unit Dimension Baseline Now
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/cli/forge_loop_command.py forge_loop Cognitive complexity absent 31
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/cli/__init__.py _reexport_session_environment Function length (lines) absent 111
src/hyperloom/inference_optimizer/cli/__init__.py _resolve_agent_lineup Function length (lines) absent 89
src/hyperloom/inference_optimizer/cli/__init__.py _resolve_run_topology Function length (lines) absent 92
src/hyperloom/inference_optimizer/cli/__init__.py _resume_session Function length (lines) absent 170
src/hyperloom/inference_optimizer/cli/__init__.py _seed_fresh_session Function length (lines) absent 170
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 92
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 185
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._source_attempt Function length (lines) absent 175

...and 91 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.

@fengshaoyi-amd
fengshaoyi-amd marked this pull request as ready for review October 20, 2026 11:11
@fengshaoyi-amd
fengshaoyi-amd requested a review from a team as a code owner October 20, 2026 11:11
@fengshaoyi-amd

Copy link
Copy Markdown
Contributor Author

/review

@github-actions

Copy link
Copy Markdown

Automated review started for head 54c1cc2. Progress: https://github.com/AMD-AGI/Hyperloom/actions/runs/39413552911

@github-actions

Copy link
Copy Markdown

Automated review: no verdict applied -- the review job ended with result 'failure'. Comment /review to retry. Run: https://github.com/AMD-AGI/Hyperloom/actions/runs/39413552911

…ote-recipe

Co-authored-by: Cursor <cursoragent@cursor.com>

@ZhengGong-amd ZhengGong-amd 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.

Approved

@ZhengGong-amd
ZhengGong-amd merged commit c817c3b into main Oct 21, 2026
40 checks passed
@ZhengGong-amd
ZhengGong-amd deleted the lean/shafeng/cc20-remote-recipe branch October 21, 2026 03:17
chennyiiis pushed a commit that referenced this pull request Oct 21, 2026
Resolves the code_metrics_baseline.txt ratchet conflict with
resolve_baseline.py. main's #1782 r9700/gfx1201 board test and #2056's
deletion of test_merge_staged_sections_unions_and_dedups_prior_refs both
survive; our restructuring of recipe_kb_t0/_warm_start_match is unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants