Skip to content

refactor(enablement, measurement): delete the dead and repeated code in seven over-gate functions - #2076

Merged
chaojhou merged 13 commits into
mainfrom
lean/shafeng/cc20-enablement-pr
Oct 22, 2026
Merged

chaojhou merged 13 commits into
mainfrom
lean/shafeng/cc20-enablement-pr

Conversation

@fengshaoyi-amd

@fengshaoyi-amd fengshaoyi-amd commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

What this does

Seven functions under src/hyperloom/orchestrator/ were over the code-metrics gate: the enablement round archive (snapshot_round), the lane's rearm (maybe_rearm_enablement), the checkpoint weight facts (_derive_checkpoint_weight_facts), the apply-verification verdict (verify_applied), and the AITER, vLLM and SGL targeted-build recipes (run_aiter_build, run_vllm_source_build, run_sgl_kernel_build). This PR deletes what they did twice or what no caller used, and moves the ROCm build setup the three recipes each carried into one _TargetedRecipe base.

Production code: +649 / -828 lines (net -179) in 6 files. Tests: unchanged. Code-metrics baseline: 12 entries retired, none added.

What changes in each module

  • measurement/apply_verification.py: verify_applied reads Forge's apply report as parse_log_file produces it, without the or {} / or 0 / or [] fallbacks, the int() / str() casts and the normalisation of runtime_table_names.
  • enablement/params.py: _layers_by_family groups the offending names and the checkpoint keys by family with one rule, replacing a regex rebuilt for every family, and _checkpoint_weight_map reads the sharded index's weight_map.
  • enablement/artifacts.py: _archive_copy copies one file and records its role, replacing _copy and the copy-then-record block around each call.
  • enablement/lane.py and breakdown/recorder/enablement_event.py: the always-empty RoundSettlement.stop_reason and the stall branch that read it are deleted. A round counts as advanced from its status alone, in the lane and in the breakdown recorder, instead of also reading the advanced flag its only producer writes beside that status. _archive_round takes the archive step out of maybe_rearm_enablement.
  • enablement/runtime/targeted_build.py: _TargetedRecipe holds the setup the AITER, vLLM and SGL recipes each carried: disk and ROCm toolchain preflight, the isolation workspace and ROCm constraints, and installed_versions. _AiterBuild, _VllmBuild and _SglKernelBuild keep only their install and probe steps, and run_aiter_build, run_vllm_source_build and run_sgl_kernel_build keep their signatures and run their recipe. gpu_arch is derived from the action, and each recipe states through gpu_arch_error whether it needs one: vLLM and SGL do, AITER does not. The duplicated block the baseline carried for this file is gone.

Functions brought under the gate

Baseline entries this PR retires, with their values at base:

  • enablement/artifacts.py: snapshot_round (cognitive 38)
  • enablement/lane.py: EnablementLane.maybe_rearm_enablement (lines 104)
  • enablement/params.py: EnablementParams._derive_checkpoint_weight_facts (cognitive 32, lines 117)
  • enablement/runtime/targeted_build.py: run_aiter_build (cognitive 42, cyclomatic 23, lines 218); the module's duplicated lines 80; run_sgl_kernel_build (lines 159); run_vllm_source_build (lines 220)
  • measurement/apply_verification.py: verify_applied (cognitive 32, lines 81)

Observable effect

None for any input the repo's own callers produce: archived files and their roles, setting scripts, settle outcomes and stall counts, round and lane-event rows, log lines, the weight-facts text, apply verdicts and their details, and build results (failure classes, summaries, runtimes, and installed_versions with its key order) are the same.

Inputs that no in-repo caller produces now behave differently:

  • verify_applied. A parser report without apply_verdict, merged_tables or consulted_tables, or with None in their place, raises instead of reading as empty; counts and table names are no longer converted with int() / str(), and runtime_table_names entries are compared as given.
  • _derive_checkpoint_weight_facts. A ~-prefixed model_path whose expansion is not a directory, but whose literal path is, now gives no facts; a shared_state without model_path raises AttributeError; a layer index too long for int() raises ValueError; a checkpoint key containing a literal {N} can count toward a family, and one ending in a newline no longer does.
  • maybe_rearm_enablement. A result that is not a dict is no longer ignored (None raises AttributeError). A result with "advanced": True and a status other than "advanced" is no longer treated as advanced, by the lane or by the breakdown round row; integrate_patch writes "advanced": True only with "status": "advanced". A non-string status whose str() is "kept" or "advanced" is still rearmed but no longer exports a setting script or records an accepted launch config, and an unhashable status also logs "enablement: artifact write failed".
  • run_vllm_source_build. A max_jobs that int() cannot convert raises after the workspace is prepared instead of before; TargetedBuildAction.from_state coerces it.

Checklist

  • Linked issue(s): none.
  • Tests: no test is added, changed or deleted. The existing contract tests cover what this PR touches: test_targeted_build_recipes.py (the AITER, vLLM and SGL recipes' installs, probes, installed_versions and setup-stage failures), test_apply_verification.py, test_artifacts.py, and the weight-facts and rearm tests in test_enablement_coordinator_wiring_unit.py and test_sbd_v6_enablement_wiring.py. Linux CI is green at head dc27317f7.
  • Size/complexity triggers crossed: 1,477 changed production lines, over the 1,000-line limit, so the PR carries size-exception. Most of it is the three targeted-build recipes moving onto _TargetedRecipe together; a base class carrying one recipe would be an abstraction without its second implementation. No function this PR adds or changes crosses a gate limit. Over a review trigger and within the gate, each one ordered pass over its input: _derive_checkpoint_weight_facts (76 lines), verify_applied (74), maybe_rearm_enablement (72) and snapshot_round (65 lines, cyclomatic 12, down from 18). targeted_build.py, lane.py and enablement_event.py are over the 800-line module trigger and under the 1,200-line limit; targeted_build.py is 142 lines shorter and lane.py one line longer.
  • If this simplifies or refactors: the mechanisms removed are listed under What changes in each module; the build entry points, the archive layout, the lane's settle and rearm decisions and every persisted row keep their contract, shown by the contract tests above.
  • Observable effect: none for in-repo callers; see Observable effect for the out-of-contract inputs that now behave differently.
  • Breaking changes: no. The three build entry points keep their signatures. maybe_rearm_enablement narrows its annotation from dict[str, Any] | None to dict[str, Any], which both callers already pass. The removed RoundSettlement.stop_reason field and the moved and is_advanced parameters were used only inside lane.py.
  • PR addresses single concern: yes, bringing seven over-gate functions in orchestrator/enablement/ and orchestrator/measurement/ under the gate.
  • Root cause is upstream: no.

Commits

Squash-merged as 30d1a0fb1 from head dc27317f7.

  • 6a96dbcd8 refactor(measurement): read forge's apply report as it is produced
  • 54283d25a refactor(enablement): group checkpoint keys by the same family rule
  • a736d4215 refactor(enablement): record each archived copy where it is made
  • 9b75e6a08 refactor(enablement): settle a moved round from its status alone
  • 2982b26df refactor(enablement): share the ROCm build preamble between AITER and vLLM
  • b7d116a43 refactor(enablement): retire code-metrics baseline entries now under the gate
  • 58cf18721 refactor(enablement): decide an advanced round from its status alone in the breakdown recorder
  • a4ba1434c refactor(enablement): return a build step's failure instead of storing it on the recipe
  • 30ea99087 refactor(enablement): restore the comments that state constraints
  • 36156b6bb refactor(enablement): share targeted build setup
  • plus 3 merges of origin/main

fengshaoyi-amd and others added 6 commits October 21, 2026 10:46
verify_applied coerced every field of the report kernelforge's
parse_log_file returns: `or {}` / `or 0` / `or []` fallbacks, int() and
str() casts, and a separate list for the consulted tables. parse_log
builds that report on every path (missing or unreadable logs included)
with integer hit/miss counts and sorted string table lists, so the
coercions never changed a value; they are gone, and the consulted and
merged table names feed one set directly.

The runtime table names were stripped, emptied-out and str()-cast, then
re-defaulted with `canonical or set()`. The only production caller
passes values of _AITER_ENV_TO_TABLE, which are fixed, clean file
names, so they are now compared as given. The arrival check's two
outer conditions are one `if`, and the "# 1." / "# 2." step numbering
and a comment restating the branch above it are deleted.

Verdicts, details and the order of checks are unchanged.

Co-authored-by: Cursor <cursoragent@cursor.com>
_derive_checkpoint_weight_facts grouped the offending parameter names
into layer-index-stripped families, then answered "which layers carry
this family in the checkpoint" by turning every family back into a
regex and rescanning every checkpoint key with it. A key matches that
regex exactly when the same folding maps it to the same family, so the
checkpoint keys now go through the one grouping rule
(_layers_by_family) and each family looks its present layers up. The
nested _family/_layer_idx helpers, the single-key {"missing_layers": ...}
wrapper and the per-family regex construction are deleted.

Also deleted:
- the function-local `import glob/json/re` and the second, aliased
  import of Path the module already has;
- the model-path normalisation in front of resolve_local_model_dir
  (getattr default, str/strip, the fallback to the unresolved path and
  the second is_dir check): the resolver already strips, expands and
  checks the directory, and SharedState declares model_path. The
  resolver is imported from its owner, hyperloom.common.model_paths;
- the `if not lines` return, unreachable once `offending` is non-empty,
  and a comment promising a single-file key listing that never existed.

The try now covers only the model resolution and the index read, the
only statements that raise OSError/ValueError. The FACTS text, the
trigger and every "" return are unchanged.

Co-authored-by: Cursor <cursoragent@cursor.com>
snapshot_round followed every copy with the same envelope, seven times:
`if _copy(src, dest): archive.record(role, dest)`. No caller of _copy
used its result for anything but that record, so the copy helper now
records the copy that landed (_archive_copy) and each call site is one
line. The server-log tail keeps its own copier and joins its empty-path
check and its record into one `if`.

The workspace sweep for unapplied patches was three nested loops over
two directories and two patterns; it is now one loop per directory over
`sorted(*.patch) + sorted(*.diff)`, the same files in the same order, so
the archive records land in the order they did. A refused copy still
marks its name seen, and every size limit, destination and role is
unchanged.

Co-authored-by: Cursor <cursoragent@cursor.com>
Delete the always-empty stop_reason / stop_set path and the redundant
advanced flag: every producer that sets advanced=True also sets
status="advanced". Extract the archive + setting-script write into
_archive_round so maybe_rearm_enablement stays under the line budget.

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

Delete the duplicated disk/toolchain/workspace/constraints envelopes from
run_aiter_build and run_vllm_source_build into one _TargetedRecipe owner.
run_sgl_kernel_build is left untouched (#2050). Public recipe entry points
become thin runners; install stays on the recipe classes.

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

All six enablement targets fell within every gate threshold they violated;
drop their baseline rows (and the cleared targeted_build duplicated-lines
entry).

Co-authored-by: Cursor <cursoragent@cursor.com>
@fengshaoyi-amd fengshaoyi-amd added the size-exception Waives the PR diff budget; added by a maintainer with a reason in the PR description label Oct 21, 2026
fengshaoyi-amd and others added 4 commits October 21, 2026 11:36
Co-authored-by: Cursor <cursoragent@cursor.com>
…in the breakdown recorder

AuthoringRound.row marked a round advanced when its status was advanced or when the result carried advanced=True. The lane already decides from the status alone, and the only producer (integrate_patch's advanced result) writes advanced=True only together with status=advanced, so the second rule never changed a row. The row keeps its persisted advanced field.

Co-authored-by: Cursor <cursoragent@cursor.com>
…g it on the recipe

preflight() and prepare() now return the failed BuildResult, or None, and both run methods use the returned value; the recipe no longer carries a result attribute as a second result channel.

Co-authored-by: Cursor <cursoragent@cursor.com>
Brings back the comments that say what the code cannot: why vLLM's build needs CUDA_HOME and 20 GB of disk, that pip install -e is where CMake compiles, why a torch ABI Python mismatch is only an advisory, what the load probe checks, and why model_path is resolved before the sharded-index read (now the docstring of the helper that does that read). Comments that only narrated the code stay deleted.

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

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Code metrics gate: PASSED

Judged: the 7 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 44 -1
Cognitive complexity fails > 30 0 0 0 166 -4
Function length (lines) fails > 80 0 0 0 309 -6
Nested block depth fails > 5 0 0 0 19 +0
Parameter count fails > 5 0 0 0 89 +0
Module length (lines) warns > 800, fails > 1200 0 0 0 47 +0
Duplicated lines per file fails > 0 0 0 0 95 -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

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

Module Lines Limit
src/hyperloom/inference_optimizer/breakdown/recorder/enablement_event.py 851 warns > 800
src/hyperloom/orchestrator/enablement/lane.py 898 warns > 800
src/hyperloom/orchestrator/enablement/runtime/targeted_build.py 873 warns > 800

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

Unit Dimension Base Now
src/hyperloom/orchestrator/enablement/lane.py:95 EnablementLane._maybe_enqueue_enablement_specialist Function length (lines) 94 94
88 findings in files this change does not touch

Outside this change (informational): 88

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/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 107
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/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/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
src/hyperloom_kb/http_service.py Module length (lines) absent 1525
src/kernelforge/cli/forge_loop_command.py Module length (lines) absent 2003
src/hyperloom/orchestrator/actions/executors/_geak_sweep.py sweep_via_geak Cognitive complexity 67 70
src/hyperloom/orchestrator/actions/executors/_grid_runner.py run_grid Cognitive complexity 177 180
src/hyperloom/orchestrator/actions/executors/explore.py ExploreExecutor.__call__ Cognitive complexity 369 383
src/hyperloom/orchestrator/kernel/request_handlers.py _run_forge_gemm_tuning Cognitive complexity 124 125
src/hyperloom/orchestrator/phases/kernel.py KernelPhase._run_geak_kernel_phase Cognitive complexity 122 130
src/hyperloom/orchestrator/phases/prelude.py PreludePhase.maybe_enqueue_warm_replay Cognitive complexity 190 191
src/hyperloom/orchestrator/actions/executors/_grid_runner.py run_grid Cyclomatic complexity 55 56

...and 63 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 21, 2026 06:45
@fengshaoyi-amd
fengshaoyi-amd requested a review from a team as a code owner October 21, 2026 06:45

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

Please reconsider one point before merge.

  1. run_sgl_kernel_build (src/hyperloom/orchestrator/enablement/runtime/targeted_build.py:548-722) is still a third copy of the preamble that the new _TargetedRecipe (:269-403) now owns: _run/_fail, disk preflight, toolchain + torch ABI, gpu_arch check, workspace, constraints, installed_versions, and even the dead if venv_dir else "" branch (:707) this PR removed from vLLM. The reason given (#2050 rewriting it in parallel) no longer holds: #2050 is already in the merge base. AGENTS.md Finish the replacement.
    Action: add _SglKernelBuild(_TargetedRecipe) keeping only the sgl-specific install/probe steps, make run_sgl_kernel_build construct and run it, and drop its baseline entry. A local prototype of this passes the runtime tests and removes another ~99 lines. Consider making the gpu_arch requirement a base-class switch shared by vLLM and sgl.

fengshaoyi-amd and others added 3 commits October 21, 2026 19:19
…blement-pr

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

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

Copy link
Copy Markdown
Contributor Author

Addressed the review.

run_sgl_kernel_build is now _SglKernelBuild(_TargetedRecipe).run(). gpu_arch is a derived property; whether it is required is declared per recipe (SGL and vLLM required, AITER optional), so the base class does not grow a switch. The run_sgl_kernel_build baseline row is removed. Gate passes.

@fengshaoyi-amd
fengshaoyi-amd requested review from ZhengGong-amd and removed request for ZhengGong-amd October 22, 2026 02:18

@xiaofei-zheng xiaofei-zheng 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.

What this PR does

Six functions under src/hyperloom/orchestrator/ sat over the code-metrics gate and carried waiver rows in scripts/code_metrics_baseline.txt. This PR brings each under the limits by deleting what it did twice or what no caller used — the always-empty stop_reason and the dead stall branch that read it, the advanced flag read beside the status its only producer writes with it, the per-family regex rebuilt from the family rule it inverts, the coercion of a Forge report Forge already produces in that shape, seven copy-then-record envelopes in the round archive — and by lifting the shared ROCm build preamble of all three targeted-build recipes into a _TargetedRecipe base with one subclass per recipe. 12 baseline rows go, none is added.

Blocking issues: 1

  1. The description still describes the pre-review head: it says run_sgl_kernel_build is untouched, while the head rewrites it.

    The commit refactor(enablement): share targeted build setup — the 12th on the branch, pushed after the CHANGES_REQUESTED review — replaced the inline sgl recipe with _SglKernelBuild(_TargetedRecipe) plus a 7-line runner (src/hyperloom/orchestrator/enablement/runtime/targeted_build.py:549-631) and removed its 159-line function-lines baseline row. Four statements in the description contradict that head:

    • "run_sgl_kernel_build is not touched: #2050 rewrote it in parallel and has since landed."
    • "run_sgl_kernel_build is byte-identical to base."
    • "run_sgl_kernel_build (:548) is byte-identical to base (:485 at base)."
    • "What is left is outside this work, all on length: run_sgl_kernel_build, …"

    The totals went stale with them:

    • "Production code: +583 / −662 (net −79) across 6 files" — the compare API against the merge base reports +649 / −828 (net −179) over those same six files.
    • "1,245 changed production lines against the merge-base" — it is 1,477 by the body's own definition (added plus deleted lines of non-test .py under src/ and scripts/).
    • "The code-metrics baseline loses 11 entries" — the diff deletes 12 rows; the gate's own comment reports −4 cognitive, −1 cyclomatic, −6 function-length.

    The per-commit table stops at 30ea99087, the gate-numbers table carries no row for the sgl recipe, and the citations in Why the deletions are safe still point at the old head: the driver dispatch is targeted_build.py:822, not :917-922, and the exports are :870, not :969 / :971. The trailing Review response section states the correct fact but leaves all of the above standing, so the two halves of the description disagree with each other.

    Impact: the release cut aggregates these descriptions. A reader is told the third recipe was left alone when it was in fact rewritten, and is given production-line and baseline-entry counts that do not match the diff.

    Action: update the description against the head commit — the opening paragraph, the commit table, the gate-numbers table, the three totals, and the Targeted builds bullet with its line citations — and fold the Review response text into them instead of leaving it as a contradicting appendix.

No other blocking issue: the code changes themselves check out.

Checked: targeted_build.py — all three recipes step by step against base (disk → toolchain → torch ABI → gpu_arch → workspace → constraints → install → probes, installed_versions key order, run_timeout 3600/5400); lane.py — maybe_rearm_enablement, _archive_round, _is_foreign_stall, _answered_round_outcome, _record_enablement_round, _MOVED_ROUND_OUTCOMES, and stop_set at base (lane.py:540 is its only assignment, read at :610/:623, so the removed elif stop_reason branch was dead), with OUTCOME_STALLED keeping its live writer at lane.py:125; both production callers of maybe_rearm_enablement (phases/framework.py:1265-1271 returns for a non-dict, loop/intent_router.py:840 passes a literal dict), so dropping the isinstance guard is safe; integrate_patch.py:3388,3409 — the only writer of "advanced": True always writes "status": "advanced" beside it, and the readers are enablement_event.row:310 → :648 → reporters/_renderers/enablement.py:51,68; params.py — _layers_by_family / _checkpoint_weight_map against common/model_paths.py:72-97; apply_verification.py against kernelforge/gemm_tune/evidence.py:543-556 and :570-577 (apply_verdict.hit/.miss are always ints and merged_tables/consulted_tables always sorted string lists, including for an unreadable log) and its only caller phases/kernel.py:2755-2766 with _AITER_ENV_TO_TABLE at :140-148 (fixed file names, so dropping the strip/drop normalisation of runtime_table_names is safe); artifacts.py — _archive_copy and the evidence sweep.

Ran: a standalone comparison of _layers_by_family against the old per-family regex over realistic weight_map keys — identical present-layer sets; gh api compare/<base>...<head> for the per-file line counts. No local suite: CI is green at this head (all 12 test shards, coverage, code-metrics, pr-hygiene, ruff, mypy, pylint, import-linter, CodeQL).

Base bb2da63 · Head dc27317.

Not checked: #1032, #1154, #1276 and #1869 list more than 100 files each, so only their first 100 were compared for in-flight overlap.

@chaojhou
chaojhou dismissed ZhengGong-amd’s stale review October 22, 2026 03:43

Verified at dc27317: run_sgl_kernel_build is now _SglKernelBuild(_TargetedRecipe) and its baseline row is gone. CI green, merges cleanly with main. xiaofei-zheng's review on this head (description still says the sgl recipe is untouched; stale totals) is a separate open item.

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

Verified at dc27317: run_sgl_kernel_build is now _SglKernelBuild(_TargetedRecipe) and its baseline row is gone. Every review item on the code is fixed, CI is green and the branch merges cleanly with main.

Before or right after merge, please refresh the PR description against this head (line and module counts, commit table, and the statements xiaofei-zheng / ZhengGong-amd listed): the release notes are built from it.

LGTM

@chaojhou
chaojhou merged commit 30d1a0f into main Oct 22, 2026
42 checks passed
@chaojhou
chaojhou deleted the lean/shafeng/cc20-enablement-pr branch October 22, 2026 05:02
@fengshaoyi-amd fengshaoyi-amd changed the title refactor(enablement, measurement): delete the dead and repeated code in six over-gate functions refactor(enablement, measurement): delete the dead and repeated code in seven over-gate functions Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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.

4 participants