You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Introduce op-owned contrib source declarations v0, using CUDA Unit Swish -> ScaledSiLU and CausalConvWithState as the first consumers.
This PR targets main; prerequisite #34021 has merged. MoE is separate, dependent #34086. Auto-merge remains disabled.
Each EP's op implementation owns its executable source pattern, qualification guard, replacement, initializer transformation, and numerical scope. The catalog is derived from those declarations, not a second authored support matrix.
Reuse Rule / Pattern / Replacement, PatternRewriter, and existing EP capability callbacks. No new matcher, kernel, provider-bridge API, or independent support registry.
Collect finalized schema registrations under exact (domain, name, since_version) keys. New schemas/versions need an executable declaration or an explicit PendingTodo / Special policy.
Preserve exact-version legacy baselines: 194 inference keys and 101 training keys. New versions cannot inherit an old-version exemption.
Derive Available for an EP/variant from its executable declaration; CUDA still performs typed target-kernel probing before offering a rewrite.
Compile op-associated source companions in the host optimizer, including CPU-only full-contrib builds; exclude them from normal and plugin CUDA provider recursive source lists.
No production kernel changes, expanded pilot matching, numerical-profile changes, priority changes, or default-on enablement are included. Compiled-EP execution and ONNX function expansion are unchanged.
Share non-mutating opset and parsed tensor/attribute-binding validation with PatternRewriter, across every source alternative.
Move executable-body validation into the optimizer. Schema-only builds omit runtime policy recording/registration wrappers and do not acquire common/optimizer link dependencies.
Reject CUDA recipes unsupported by the current single-target adapter, including multi-node replacements, reversed output mappings, and extra target outputs, before probing or graph mutation.
Add focused regressions and a standalone consumer that constructs real ScaledSiLU, CausalConvWithState and policy-authored MoEGroupRouter schemas without linking ORT common or optimizer. Full legacy registration is not this consumer's scope: MatMulFpQ4 already has an unrelated MLAS dependency.
Latest review fixes: addressed both inline findings and the two earlier omissions identified in review 5851551387.
Export schema-only mode to consumers and keep its finalizing helper available with DISABLE_CONTRIB_OPS; both standalone consumer variants enumerate deprecated ONNX schemas.
Reject parsed replacement/source return-count mismatches before discovery, while preserving match-only placeholder compatibility and runtime unknown-operator tests.
Include authored ONNX/ATen registrations in policy-bypass coverage using normalized source-file provenance, without claiming upstream ONNX or derived schemas.
Motivation and Context
Make each EP op implementation's source-replacement intent and qualification explicit and executable, rather than equating registered kernels with source declarations. ONNX function expansion runs in the opposite direction and does not replace runtime source-subgraph matching, guards, boundary mappings, ownership, or numerical qualification.
Upstream integration also provides owned pending policies for MoEGroupRouter, GatherPacked, MatMulPacked, and MoEPacked; it does not claim executable source replacements for those schemas.
Current test-only cleanup (2026-11-11)
Parent: 04f2a6e58cb216fc182b8955b48018d448eed66f; combined stack: b776d13387af86c78036e48262ca8b7cdd05f1f9. Normal commits/merge and fast-forward publication only. The final committed test contents match the validated source overlay byte-for-byte; production code, kernels, matching scope, default-off behavior and numerical gates are unchanged.
Remove owner-policy English-reason coupling and isolate malformed/duplicate registered-schema and legacy-key failures. Complete the other declarations so missing-policy rejection cannot mask schema-key validation.
Validation: passed on the combined source overlay: fresh CPU rebuild and 45/45 targeted host tests, zero failures/errors/skips; actual CUDA test translation-unit compilation with the configured CUDA-build C++ flags; canonical CLANGFORMAT and whitespace checks. The compiled old/new generator comparison passed (96 generated cases versus 88 unique cases, equal distinct configurations). Temporary generator source/executable were removed afterward.
Exact commands and results:
# PASS: rebuild the two changed host test objects and relink
cmake --build /mnt/data/titaiwang/runtime-fusion/moe-fusion-integration-20261109/host/Release --target onnxruntime_test_all --parallel 2
# PASS: 45/45, from the build output directorycd /mnt/data/titaiwang/runtime-fusion/moe-fusion-integration-20261109/host/Release
./onnxruntime_test_all --gtest_filter='MoE*:ContribSourceReplacementPolicyTest.*' --gtest_output=xml:/home/titaiwang/.copilot/session-state/07b6ecde-d659-4b29-aab6-78ba683dbbb3/files/test-cleanup-host.xml
# PASS: actual old/new C++ parameter generators, no GPU use
python /home/titaiwang/.copilot/session-state/07b6ecde-d659-4b29-aab6-78ba683dbbb3/files/validate_test_cleanup_cases.py
Not rerun for this test-only cleanup: GPU numerical execution, full/cross-platform suites, and standalone schema consumers. The older 386-host/98-GPU results below are historical, not reruns on these heads. The 45-test run used the combined stack, not a separate parent-only build. No new-head CI success is claimed.
Previous CI policy validation after syncing main 0b22d27a85 (before test-only cleanup)
Parent: 5362926ba8374fa250943346647c9269212db011; combined stack: e63f8268ea5d7c4113c861ef4d9a1418694ce12a. Normal merges only; no history rewrite.
Upstream #33901 added MatMulNBitsQLoRAMlp-1 and MatMulNBitsQLoRAQkv-1. Both now author PendingTodo beside their schema definitions; neither is added to the frozen legacy baseline or advertised as an executable source. The existing regression covers both exact keys, unqualified variants, CPU/CUDA/WebGPU, rejection of version 2, and rejection after removing either policy. This follow-up does not edit kernels, matching scope or default-off behavior.
Passed: 386/386 CPU-build host tests on the exact clean combined commit, including full inventory and the extended owner-policy regression; 2/2 standalone schema consumers; all 3 disabled-contrib syntax probes (bert_defs.cc, contrib_defs.cc, training_op_defs.cc, with both training macros); canonical CLANGFORMAT and diff whitespace checks. The host/schema builds used the newly pinned Eigen archive (SHA1 18eca78e961ac5e9123ccdff5035ab340dcc5e11), isolated from the earlier Eigen 3.4 cache. At most four compilation jobs. Source-tree identity and artifact hashes were checked before publication.
Exact build/test commands (all passed; tests run from their respective build output directories):
Exclusions for that previous main-sync follow-up: no GPU workload or CUDA kernel rebuild was performed for this metadata-only follow-up. The 98-case CUDA result below belongs to the earlier pre-main-sync tree and is not qualification of the new merged head. Windows/macOS/Android/Web/plugin execution and full upstream integration coverage remain CI responsibilities; new-head CI is not claimed green. The bounded two-file authored diff was reviewed directly; the upstream commit set was not independently re-reviewed.
Previous review-fix validation before the main sync
Parent-only overlay: 358/358 host, 2/2 real CUDA EP, 2/2 standalone schema consumers passed. That run preceded only extraction of an unchanged test DSL literal into a constant.
The final combined stack passed 386/386 host, 98/98 real CUDA EP tests (96 MoE cases / 288 sessions plus the two existing pilots), 2/2 standalone schema consumers, and disabled-contrib syntax probes for bert_defs.cc, contrib_defs.cc, and training_op_defs.cc with both training macros. CUDA execution used idle physical GPU 3, H200/sm90, under the fail-closed guard; zero gtest failures/errors/skips. The newly built task-owned CUDA provider was loader-verified and artifact hashes stayed unchanged during execution. Four build jobs, NVCC threads=1.
Commits were created after validation; their merged tree was verified byte-for-byte against the compiled final source overlay before normal atomic publication. These are source-tree-qualified runs, not a claim that embedded build revision strings were regenerated after committing. The validation tree is clean at the published merge head.
Commands below ran from the existing build-output directories with the existing CUDA/cuDNN loader paths. Each completed successfully:
Canonical lintrunner --take CLANGFORMAT <changed C++ paths> and git diff --check passed in both working trees. Lintrunner used the existing virtual environment plus PYTHONPATH=/usr/lib/python3.12/site-packages; the earlier adapter blockage is resolved without installing dependencies. The task-created driver cache was removed.
Previous exclusions: actual pre-SM80 execution is not qualified on H200; host tests cover metadata validation without materialization/lookup and the actual-device regression was extended for a future pre-SM80 run. Actual Windows/MSVC, full training/plugin suites, other GPU architectures, authentic fixtures and whole-model accuracy/performance were not run locally. No new high-precision kernel-accuracy gate is added. New-head CI is reported separately, not claimed green. The earlier Android comparison below is historical, not a new-head size measurement. No new full-team/model-diversity review coverage is claimed.
Historical validation and CI follow-ups (earlier heads only)
Earlier CUDA validation baseline: 06c0d81720b17bd20ac780bb62a2106799553c7b
Consistent CUDA build: passed, four build jobs and NVCC threads=1.
Targeted host regressions: 356/356 passed, zero failures/errors/skips, including both new declaration/output-mapping regressions.
Targeted provider regressions: 95/95 passed, zero failures/errors/skips, including positive ScaledSiLU/causal CUDA EP placement and typed-kernel checks.
Actual execution used physical GPU 4, H200/sm90, CUDA 13.3. Loader logs verified the newly built task-owned CUDA provider; source cleanliness and artifact hashes were checked.
Standalone schema-library consumer: 1/1 passed, linked without ORT common/optimizer. The real schema CMake module was included in an isolated offline CPU configuration; full-training configuration was blocked by uncached unrelated dependencies and was not claimed.
Changed C++ ranges passed clang-format 18 and git diff --check. Canonical lintrunner was then blocked by missing lintrunner_adapters; no dependencies were installed.
CUDA commands ran from /mnt/data/titaiwang/runtime-fusion/moe-fusion-integration-20261109/cuda/Release, with the virtual environment activated and task-owned CUDA/cuDNN loader paths. Tests used GPU 4 under the fail-closed resource guard (30-second telemetry-query timeout, 30-minute workload budget). Sampling is not an exclusive GPU lease.
Earlier CI portability follow-up: fa608643669a80093616f64d0df34b5767db98ea
Move the four pending-policy builders' preprocessor guards outside schema-macro arguments. The shared runtime helper preserves finalized keys and the exact existing policies; schema-only builds use a translation-unit-local helper that preserves schema finalization while omitting only runtime metadata collection, without runtime linkage dependencies.
CUDA-enabled build passed; 15/15 focused policy tests and the standalone schema consumer 1/1 passed. Build logs confirm both runtime and schema-only recompilation of the two schema files and the policy implementation.
The strengthened standalone consumer checks the policy-authored schema's finalized arity and resolved input types. It was reproduced failing with an empty schema-only helper, then passed after preserving finalization.
2/2 real CUDA EP tests passed, covering Unit Swish and causal-convolution fused dispatch, on physical GPU 4 under the fail-closed guard. Loader logs verify the task-owned CUDA provider; zero failures/errors/skips.
Full-source Clang preprocessing with -Werror=embedded-directive reproduced the old failure and accepted the fix in all four file/build-mode combinations (both schema files, runtime and schema-only). This is a standards-diagnostic regression, not an MSVC run.
Commands for that earlier follow-up used the existing CUDA/cuDNN loader paths and build-output cwd:
Changed C++ ranges match clang-format 18 and pass git diff --check. Canonical lintrunner was attempted for the changed files but was then blocked by missing lintrunner_adapters; no dependencies were installed.
Known upstream Android baseline failure: the exact upstream main commit d7ab0d271b0399d889c6b9540cacf04a84b74333fails the same gate: section total 1,611,530 bytes versus threshold 1,610,778, exceeding it by 752 bytes. #34022's captured earlier CI build reports the same total, on-disk size, and all 27 section sizes. This measured size failure is already present upstream; these fixes do not raise the threshold or claim the gate is green.
Exclusions recorded for that earlier follow-up: new-head Windows/MSVC and broad CI results are pending. The earlier 356-host/95-provider run remains historical evidence, not a rerun of that entire selection for this metadata-only patch. Full ORT/plugin/training suites, other GPU architectures, optional authentic fixtures, whole-model accuracy/performance, and earlier fixed-model review coverage gaps remain unqualified. This follow-up received direct bounded review with no actionable findings, not another whole-team review.
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
The test-schema exclusion misses Windows path separators, allowing GraphTest schemas to be misreported as missing contrib registrations and causing order-dependent test failures.
This PR adds op-owned contrib source declarations on top of the causal-fusion stack. It moves existing CUDA fusion rules into op-associated host companions while preserving kernels, eligibility, numerical guarantees, and default-off behavior.
Normalize test-schema file separators before checking the inventory. Cover Windows, POSIX, mixed and production paths without weakening detection of untracked production schemas.
Signed-off-by: titaiwangms <titaiwang@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Declare owner-local PendingTodo policies for MoEGroupRouter, GatherPacked,
MatMulPacked and MoEPacked without expanding the frozen legacy exemptions.
Cover real registrations, exact versions and declaration removal, and
keep the design inventory description current.
Signed-off-by: titaiwangms <titaiwang@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keeping only {kMSDomain, 1, 1} in the ScaledSiLU declaration’s rule.opsets passes both declaration validators. However, discovery constructs a PatternRewriter , which throws because the Swish pattern’s ONNX-domain requirement is missing. The coverage check therefore accepts a non-executable declaration and defers failure until enabled session initialization.
Validate opset coverage for every pattern/replacement domain, preferably sharing the rewriter’s validation, and add this negative regression case.
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
The schema-library change leaves consumers using its existing dependencies with unresolved Status symbols, while validation gaps admit inapplicable or incorrectly mapped rewrite recipes.
Share non-mutating opset validation with PatternRewriter. Check every source alternative and parsed replacement domain, normalize ONNX aliases, and reject duplicate requirements before discovery. Add negative declaration regressions and alias acceptance coverage.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ma linkage
Separate executable rewrite validation from schema recording, omit runtime recording in the standalone schema library, and add an independent schema-only link regression. Share binding validation with PatternRewriter and reject unsupported CUDA recipes/output mappings before probing or mutation.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Avoid pulling the legacy MatMulFpQ4 MLAS dependency through full contrib registration; independently construct real ScaledSiLU, CausalConvWithState and policy-authored MoEGroupRouter schemas without common or optimizer linkage.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Move pending-policy key finalization and recording to a shared helper. Keep the schema-only no-op translation-unit local so it cannot acquire runtime linkage dependencies.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Retain key and arity/type finalization while omitting only runtime metadata collection. Add a standalone consumer regression, reproduced failing with the empty helper, without ORT common or optimizer dependencies.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
ValidateRule accepts a parsed replacement whose return count differs from the source pattern's output count. Such a declaration passes common validation and can resolve to Available, but every matched rewrite fails in StageReplacement with a return-count error. Check the count for every source alternative here and add a negative regression.
Include ONNX and ATen registrations in policy coverage checks
This bypass check ignores authored ONNX-domain and ATen schemas, although both are covered by the inventory and frozen baselines. A new schema in either domain registered outside the collection wrappers is therefore absent from validation, allowing the coverage test to pass without its required policy. Use schema-file provenance to include contrib/training registrations while excluding standard ONNX and derived schemas, and add regressions for both domains.
Classify the two upstream runtime-adapter schemas at their schema owners without changing fusion eligibility or the frozen legacy inventory. Cover both exact keys across CPU, CUDA and WebGPU.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
It would be nice if there were a compact "TLDR" summary in the documentation that uses a short example to illustrate the key idea, and mentions the key elements that are brought together.
Resolve the MoEGroupRouter shape-inference conflict by keeping main's
multi-output inference and the owner-local pending source policy.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
It would be nice if there were a compact "TLDR" summary in the documentation that uses a short example to illustrate the key idea, and mentions the key elements that are brought together.
Done
This branch has not been deployed
No deployments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Introduce op-owned contrib source declarations v0, using CUDA Unit Swish -> ScaledSiLU and CausalConvWithState as the first consumers.
This PR targets
main; prerequisite #34021 has merged. MoE is separate, dependent #34086. Auto-merge remains disabled.Rule/Pattern/Replacement, PatternRewriter, and existing EP capability callbacks. No new matcher, kernel, provider-bridge API, or independent support registry.(domain, name, since_version)keys. New schemas/versions need an executable declaration or an explicitPendingTodo/Specialpolicy.Availablefor an EP/variant from its executable declaration; CUDA still performs typed target-kernel probing before offering a rewrite.No production kernel changes, expanded pilot matching, numerical-profile changes, priority changes, or default-on enablement are included. Compiled-EP execution and ONNX function expansion are unchanged.
Earlier review follow-ups: the earlier opset-domain report and all four findings in the subsequent Copilot review are addressed:
Latest review fixes: addressed both inline findings and the two earlier omissions identified in review 5851551387.
DISABLE_CONTRIB_OPS; both standalone consumer variants enumerate deprecated ONNX schemas.Motivation and Context
Make each EP op implementation's source-replacement intent and qualification explicit and executable, rather than equating registered kernels with source declarations. ONNX function expansion runs in the opposite direction and does not replace runtime source-subgraph matching, guards, boundary mappings, ownership, or numerical qualification.
Upstream integration also provides owned pending policies for
MoEGroupRouter,GatherPacked,MatMulPacked, andMoEPacked; it does not claim executable source replacements for those schemas.Current test-only cleanup (2026-11-11)
Parent:
04f2a6e58cb216fc182b8955b48018d448eed66f; combined stack:b776d13387af86c78036e48262ca8b7cdd05f1f9. Normal commits/merge and fast-forward publication only. The final committed test contents match the validated source overlay byte-for-byte; production code, kernels, matching scope, default-off behavior and numerical gates are unchanged.Remove owner-policy English-reason coupling and isolate malformed/duplicate registered-schema and legacy-key failures. Complete the other declarations so missing-policy rejection cannot mask schema-key validation.
Validation: passed on the combined source overlay: fresh CPU rebuild and 45/45 targeted host tests, zero failures/errors/skips; actual CUDA test translation-unit compilation with the configured CUDA-build C++ flags; canonical CLANGFORMAT and whitespace checks. The compiled old/new generator comparison passed (96 generated cases versus 88 unique cases, equal distinct configurations). Temporary generator source/executable were removed afterward.
Exact commands and results:
Not rerun for this test-only cleanup: GPU numerical execution, full/cross-platform suites, and standalone schema consumers. The older 386-host/98-GPU results below are historical, not reruns on these heads. The 45-test run used the combined stack, not a separate parent-only build. No new-head CI success is claimed.
Previous CI policy validation after syncing main
0b22d27a85(before test-only cleanup)Parent:
5362926ba8374fa250943346647c9269212db011; combined stack:e63f8268ea5d7c4113c861ef4d9a1418694ce12a. Normal merges only; no history rewrite.Upstream #33901 added
MatMulNBitsQLoRAMlp-1andMatMulNBitsQLoRAQkv-1. Both now authorPendingTodobeside their schema definitions; neither is added to the frozen legacy baseline or advertised as an executable source. The existing regression covers both exact keys, unqualified variants, CPU/CUDA/WebGPU, rejection of version 2, and rejection after removing either policy. This follow-up does not edit kernels, matching scope or default-off behavior.Passed: 386/386 CPU-build host tests on the exact clean combined commit, including full inventory and the extended owner-policy regression; 2/2 standalone schema consumers; all 3 disabled-contrib syntax probes (
bert_defs.cc,contrib_defs.cc,training_op_defs.cc, with both training macros); canonical CLANGFORMAT and diff whitespace checks. The host/schema builds used the newly pinned Eigen archive (SHA118eca78e961ac5e9123ccdff5035ab340dcc5e11), isolated from the earlier Eigen 3.4 cache. At most four compilation jobs. Source-tree identity and artifact hashes were checked before publication.Exact build/test commands (all passed; tests run from their respective build output directories):
Exclusions for that previous main-sync follow-up: no GPU workload or CUDA kernel rebuild was performed for this metadata-only follow-up. The 98-case CUDA result below belongs to the earlier pre-main-sync tree and is not qualification of the new merged head. Windows/macOS/Android/Web/plugin execution and full upstream integration coverage remain CI responsibilities; new-head CI is not claimed green. The bounded two-file authored diff was reviewed directly; the upstream commit set was not independently re-reviewed.
Previous review-fix validation before the main sync
Previous review-fix validation:
ca027638c1e15f596a82081180e73644af999cafParent-only overlay: 358/358 host, 2/2 real CUDA EP, 2/2 standalone schema consumers passed. That run preceded only extraction of an unchanged test DSL literal into a constant.
The final combined stack passed 386/386 host, 98/98 real CUDA EP tests (96 MoE cases / 288 sessions plus the two existing pilots), 2/2 standalone schema consumers, and disabled-contrib syntax probes for
bert_defs.cc,contrib_defs.cc, andtraining_op_defs.ccwith both training macros. CUDA execution used idle physical GPU 3, H200/sm90, under the fail-closed guard; zero gtest failures/errors/skips. The newly built task-owned CUDA provider was loader-verified and artifact hashes stayed unchanged during execution. Four build jobs, NVCC threads=1.Commits were created after validation; their merged tree was verified byte-for-byte against the compiled final source overlay before normal atomic publication. These are source-tree-qualified runs, not a claim that embedded build revision strings were regenerated after committing. The validation tree is clean at the published merge head.
Commands below ran from the existing build-output directories with the existing CUDA/cuDNN loader paths. Each completed successfully:
Canonical
lintrunner --take CLANGFORMAT <changed C++ paths>andgit diff --checkpassed in both working trees. Lintrunner used the existing virtual environment plusPYTHONPATH=/usr/lib/python3.12/site-packages; the earlier adapter blockage is resolved without installing dependencies. The task-created driver cache was removed.Previous exclusions: actual pre-SM80 execution is not qualified on H200; host tests cover metadata validation without materialization/lookup and the actual-device regression was extended for a future pre-SM80 run. Actual Windows/MSVC, full training/plugin suites, other GPU architectures, authentic fixtures and whole-model accuracy/performance were not run locally. No new high-precision kernel-accuracy gate is added. New-head CI is reported separately, not claimed green. The earlier Android comparison below is historical, not a new-head size measurement. No new full-team/model-diversity review coverage is claimed.
Historical validation and CI follow-ups (earlier heads only)
Earlier CUDA validation baseline:
06c0d81720b17bd20ac780bb62a2106799553c7bgit diff --check. Canonical lintrunner was then blocked by missinglintrunner_adapters; no dependencies were installed.CUDA commands ran from
/mnt/data/titaiwang/runtime-fusion/moe-fusion-integration-20261109/cuda/Release, with the virtual environment activated and task-owned CUDA/cuDNN loader paths. Tests used GPU 4 under the fail-closed resource guard (30-second telemetry-query timeout, 30-minute workload budget). Sampling is not an exclusive GPU lease.Earlier CI portability follow-up:
fa608643669a80093616f64d0df34b5767db98eaMove the four pending-policy builders' preprocessor guards outside schema-macro arguments. The shared runtime helper preserves finalized keys and the exact existing policies; schema-only builds use a translation-unit-local helper that preserves schema finalization while omitting only runtime metadata collection, without runtime linkage dependencies.
-Werror=embedded-directivereproduced the old failure and accepted the fix in all four file/build-mode combinations (both schema files, runtime and schema-only). This is a standards-diagnostic regression, not an MSVC run.Commands for that earlier follow-up used the existing CUDA/cuDNN loader paths and build-output cwd:
Changed C++ ranges match clang-format 18 and pass
git diff --check. Canonical lintrunner was attempted for the changed files but was then blocked by missinglintrunner_adapters; no dependencies were installed.Known upstream Android baseline failure: the exact upstream main commit
d7ab0d271b0399d889c6b9540cacf04a84b74333fails the same gate: section total 1,611,530 bytes versus threshold 1,610,778, exceeding it by 752 bytes. #34022's captured earlier CI build reports the same total, on-disk size, and all 27 section sizes. This measured size failure is already present upstream; these fixes do not raise the threshold or claim the gate is green.Exclusions recorded for that earlier follow-up: new-head Windows/MSVC and broad CI results are pending. The earlier 356-host/95-provider run remains historical evidence, not a rerun of that entire selection for this metadata-only patch. Full ORT/plugin/training suites, other GPU architectures, optional authentic fixtures, whole-model accuracy/performance, and earlier fixed-model review coverage gaps remain unqualified. This follow-up received direct bounded review with no actionable findings, not another whole-team review.