Gate example and GPU test lanes on the files they cover, and consolidate the CI gate - #2090
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe PR updates CI change detection, test lane gating, workflow images, secret scanning, GPT-OSS test behavior, and changelog guidance. ChangesCI test gating and workflow consolidation
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant PullRequest
participant PRGate
participant ChangedFiles
participant TestJobs
participant StatusChecks
PullRequest->>PRGate: trigger workflow
PRGate->>ChangedFiles: compare merge base and head with ignored paths
ChangedFiles-->>PRGate: return lane outputs
PRGate->>StatusChecks: wait for Linux status
StatusChecks-->>PRGate: return check status
PRGate->>TestJobs: run matching test lanes
TestJobs-->>PullRequest: report test results
Suggested reviewers: 🚥 Pre-merge checks | ✅ 6✅ Passed checks (6 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
e4b1784 to
11fe220
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #2090 +/- ##
==========================================
- Coverage 78.60% 78.08% -0.52%
==========================================
Files 522 522
Lines 60167 60167
==========================================
- Hits 47294 46982 -312
- Misses 12873 13185 +312
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
11fe220 to
e9d0b72
Compare
e9d0b72 to
9ba5793
Compare
There was a problem hiding this comment.
Warning
CodeRabbit couldn't request changes on this pull request because it doesn't have sufficient GitHub permissions.
Please grant CodeRabbit Pull requests: Read and write permission and re-run the review.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/_example_tests_runner.yml:
- Around line 54-64: Add .github/workflows/example_tests.yml to the watched
paths in .github/workflows/_example_tests_runner.yml (lines 54-64), and add
.github/workflows/gpu_tests.yml to the watched paths in
.github/workflows/_gpu_tests_runner.yml (lines 34-43), so caller workflow
changes trigger the corresponding test gates.
In @.github/workflows/_gpu_tests_runner.yml:
- Line 53: Update the job container image configuration using
inputs.container_image to require an immutable `@sha256` digest reference; either
validate and reject tag-only values before starting the job or ensure callers
provide digest-pinned images, rather than using mutable tags directly.
In @.github/workflows/gpu_tests.yml:
- Around line 33-44: Update the gpu-tests caller watch list in the workflow’s
files block to include .github/workflows/_gpu_tests_runner.yml and the
.github/actions/changed-files-gate/** dependency path, preserving the existing
entries so changes to these reusable GPU runner dependencies allow the gpu-tests
matrix to run.
In @.github/workflows/regression_tests.yml:
- Around line 33-42: Update the path filters in the regression-tests workflow’s
files list to include the full modelopt/** and modelopt_recipes/** trees, and
add tests/_test_utils/**. Preserve the existing regression-specific paths and
ensure changes in all three shared dependency areas trigger every regression
lane.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: fa843867-81ce-4c40-b34e-3e2b9e985854
📒 Files selected for processing (11)
.github/PULL_REQUEST_TEMPLATE.md.github/actions/changed-files-gate/action.yml.github/workflows/_example_tests_runner.yml.github/workflows/_gpu_tests_runner.yml.github/workflows/_pr_gate.yml.github/workflows/_wait_for_checks.yml.github/workflows/example_tests.yml.github/workflows/gpu_tests.yml.github/workflows/regression_tests.yml.github/workflows/unit_tests.ymltests/examples/gpt-oss/test_gpt_oss_qat.py
💤 Files with no reviewable changes (3)
- tests/examples/gpt-oss/test_gpt_oss_qat.py
- .github/workflows/_pr_gate.yml
- .github/workflows/_wait_for_checks.yml
9ba5793 to
a947004
Compare
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
There was a problem hiding this comment.
Warning
CodeRabbit couldn't request changes on this pull request because it doesn't have sufficient GitHub permissions.
Please grant CodeRabbit Pull requests: Read and write permission and re-run the review.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/actions/pr-merge-base/action.yml:
- Line 20: Pin all three GitHub Actions references to their resolved full commit
SHAs and retain the original release reference as a version comment: update
nv-gha-runners/get-pr-info in .github/actions/pr-merge-base/action.yml:20,
step-security/changed-files in .github/workflows/_pr_gate.yml:44, and
poseidon/wait-for-status-checks in .github/workflows/_pr_gate.yml:60. Do not
leave mutable branches or tags in the uses values.
- Line 35: Ensure the merge-base computation in the step writing merge-base to
GITHUB_OUTPUT propagates git merge-base failures instead of returning tee’s
status; configure the pipeline or command structure so a failed git merge-base
causes the action step to fail and prevents emitting an invalid value.
In @.github/workflows/_pr_gate.yml:
- Around line 10-18: Restrict the default files_ignore patterns in the pr-gate
workflow to documentation-specific directories instead of matching every .ipynb,
.png, .md, or .rst file. Update the default block and any affected callers so
notebooks and images under paths such as examples, tests, modelopt, or
modelopt_recipes continue triggering their relevant test lanes; pass broader
ignore patterns only from documentation-specific or GPU workflow callers where
appropriate.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 1fb08572-3664-4c30-8e56-722126b057e4
📒 Files selected for processing (9)
.github/PULL_REQUEST_TEMPLATE.md.github/actions/pr-merge-base/action.yml.github/workflows/_pr_gate.yml.github/workflows/_wait_for_checks.yml.github/workflows/example_tests.yml.github/workflows/gpu_tests.yml.github/workflows/regression_tests.yml.github/workflows/unit_tests.ymltests/examples/gpt-oss/test_gpt_oss_qat.py
💤 Files with no reviewable changes (2)
- .github/workflows/_wait_for_checks.yml
- tests/examples/gpt-oss/test_gpt_oss_qat.py
🚧 Files skipped from review as they are similar to previous changes (2)
- .github/PULL_REQUEST_TEMPLATE.md
- .github/workflows/unit_tests.yml
a947004 to
8c5b219
Compare
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
There was a problem hiding this comment.
Warning
CodeRabbit couldn't request changes on this pull request because it doesn't have sufficient GitHub permissions.
Please grant CodeRabbit Pull requests: Read and write permission and re-run the review.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/example_tests.yml:
- Around line 35-37: Update the actions/checkout step in the gate job to set
persist-credentials to false while preserving fetch-depth: 0, ensuring checkout
does not persist Git credentials.
- Around line 81-85: Update the lane-detection assignments for COMMON, TORCH,
TRTLLM, MEGATRON, and ONNX to use each corresponding
steps.changed.*_any_modified output, or combine *_any_changed with
*_any_deleted, so deletions under modelopt/** still activate the appropriate
example lanes.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 8a3946c4-a16c-4124-a779-a48c553033b2
📒 Files selected for processing (9)
.github/PULL_REQUEST_TEMPLATE.md.github/actions/pr-merge-base/action.yml.github/workflows/_pr_gate.yml.github/workflows/_wait_for_checks.yml.github/workflows/example_tests.yml.github/workflows/gpu_tests.yml.github/workflows/regression_tests.yml.github/workflows/unit_tests.ymltests/examples/gpt-oss/test_gpt_oss_qat.py
💤 Files with no reviewable changes (2)
- tests/examples/gpt-oss/test_gpt_oss_qat.py
- .github/workflows/_wait_for_checks.yml
🚧 Files skipped from review as they are similar to previous changes (5)
- .github/workflows/unit_tests.yml
- .github/PULL_REQUEST_TEMPLATE.md
- .github/actions/pr-merge-base/action.yml
- .github/workflows/gpu_tests.yml
- .github/workflows/_pr_gate.yml
8c5b219 to
af082ef
Compare
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
af082ef to
2e33213
Compare
There was a problem hiding this comment.
Warning
CodeRabbit couldn't request changes on this pull request because it doesn't have sufficient GitHub permissions.
Please grant CodeRabbit Pull requests: Read and write permission and re-run the review.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/example_tests.yml:
- Around line 56-76: Add tests/conftest.py and tests/examples/conftest.py to the
common file patterns in files_yaml, preserving the existing lane configuration.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 73c55664-77e1-45bf-89cd-28d5bafbfc03
📒 Files selected for processing (9)
.github/PULL_REQUEST_TEMPLATE.md.github/actions/pr-merge-base/action.yml.github/workflows/_pr_gate.yml.github/workflows/_wait_for_checks.yml.github/workflows/example_tests.yml.github/workflows/gpu_tests.yml.github/workflows/regression_tests.yml.github/workflows/unit_tests.ymltests/examples/gpt-oss/test_gpt_oss_qat.py
💤 Files with no reviewable changes (2)
- tests/examples/gpt-oss/test_gpt_oss_qat.py
- .github/workflows/_wait_for_checks.yml
🚧 Files skipped from review as they are similar to previous changes (5)
- .github/actions/pr-merge-base/action.yml
- .github/workflows/unit_tests.yml
- .github/workflows/_pr_gate.yml
- .github/PULL_REQUEST_TEMPLATE.md
- .github/workflows/regression_tests.yml
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
2e33213 to
a2c0dfe
Compare
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
There was a problem hiding this comment.
Warning
CodeRabbit couldn't request changes on this pull request because it doesn't have sufficient GitHub permissions.
Please grant CodeRabbit Pull requests: Read and write permission and re-run the review.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/code_quality.yml:
- Around line 27-30: Keep the lob detector enabled by removing lob from the
exclude-detectors value in the workflow’s extra_args. Suppress only the known
false-positive lines with trufflehog:ignore annotations, or configure a narrowly
scoped exclude-paths file without disabling other lob findings.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 02f798f7-fca7-45f7-bfa4-8150049c98e0
📒 Files selected for processing (10)
.github/PULL_REQUEST_TEMPLATE.md.github/actions/pr-merge-base/action.yml.github/workflows/_pr_gate.yml.github/workflows/_wait_for_checks.yml.github/workflows/code_quality.yml.github/workflows/example_tests.yml.github/workflows/gpu_tests.yml.github/workflows/regression_tests.yml.github/workflows/unit_tests.ymltests/examples/gpt-oss/test_gpt_oss_qat.py
💤 Files with no reviewable changes (2)
- tests/examples/gpt-oss/test_gpt_oss_qat.py
- .github/workflows/_wait_for_checks.yml
🚧 Files skipped from review as they are similar to previous changes (6)
- .github/PULL_REQUEST_TEMPLATE.md
- .github/actions/pr-merge-base/action.yml
- .github/workflows/regression_tests.yml
- .github/workflows/unit_tests.yml
- .github/workflows/gpu_tests.yml
- .github/workflows/_pr_gate.yml
A one-line edit to any example started all 12 example lanes. One
changed-files pass now sets a flag per lane, and each lane gates on its own
flag. Lane granularity, not per-example: a job's `if` cannot read `matrix`,
so gating an individual example would need a job per example.
The lane paths use brace expansion so an example is one word, not two
patterns: "{examples,tests/examples}/{llm_qat,...}/**". The extra one-sided
entries (dataset, hf_ptq, onnx_ptq) carry a comment saying which test reaches
into them.
Also:
- Ignore docs-only changes (.md/.rst/.png/.ipynb) in the shared gate, so a
README edit no longer starts GPU jobs in any of its callers.
- Share the PR merge-base steps between the two gates as a composite action,
inline the wait-for-checks step, and delete _wait_for_checks.yml.
- Drop the DCO wait from unit tests: DCO can be marked passing manually, so
blocking the matrix on it only delayed feedback.
- Consolidate the two TensorRT-LLM lanes into one gated like the others, so
llm_eval runs on PRs and not just nightly, and move gpt-oss there since its
deploy step needs tensorrt_llm and silently skipped on the pytorch image.
- Bump the torch and regression lanes to 26.07.
- Detect deletions in every gate: any_changed is ACMR and drops deleted files,
so a delete-only PR ran nothing. Use any_modified (ACMRD).
- Watch the shared conftests: pytest loads tests/conftest.py and
tests/examples/conftest.py for every suite, but no gate matched them, so
editing a shared fixture ran nothing.
- Exclude trufflehog's lob detector, whose (live|test)_[a-zA-Z0-9_]{35} pattern
matches 60 pytest function names and reports them as verified secrets. Only
nightly failed on it: schedule runs scan all history, PRs scan their diff.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Keval Morabia <28916987+kevalmorabia97@users.noreply.github.com>
a2c0dfe to
b043da5
Compare
|
/claude review |
|
### What does this PR do? Type of change: Bug fix (CI) Follow-up to #2090. `files_ignore` does not apply to `files_yaml` groups — the action keys ignores separately through `files_ignore_yaml`. Docs-only PRs therefore still matched a lane: a change to `examples/diffusers/README.md` alone started the onnx lane's three GPU jobs. ```yaml files_ignore_yaml: | common: &docs - "**.ipynb" - "**.md" - "**.png" - "**.rst" torch: *docs trtllm: *docs megatron: *docs onnx: *docs ``` Only `example_tests.yml` is affected. `gpu_tests`, `regression_tests` and `unit_tests` go through `_pr_gate.yml`, which uses the plain `files` + `files_ignore` pair where the ignore does apply. ### Testing Found by a probe PR opened against merged main (a README-only change), which showed `onnx` running when nothing should have. The same probe is re-run against this branch to confirm the fix — see the linked draft PR. ### Before your PR is "*Ready for review*" - Is this change backward compatible?: ✅ - If you copied code from any other sources or added a new PIP dependency, did you follow guidance in `CONTRIBUTING.md`: N/A - Did you write any new necessary tests?: N/A — CI configuration - Did you update [Changelog](https://github.com/NVIDIA/Model-Optimizer/blob/main/CHANGELOG.rst)?: N/A - Did you get Claude approval on this PR?: ❌ — not yet run <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Updated example-test workflow filtering to consistently ignore documentation, image, and notebook-only changes across all test lanes. * Improved pull request gate file matching by using recursive patterns for Markdown, reStructuredText, PNG, and notebook files. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Keval Morabia <28916987+kevalmorabia97@users.noreply.github.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
### What does this PR do? Type of change: CI/CD bug fix Every example lane uploaded coverage under one shared `examples` flag. That was correct while all lanes ran on every PR, but #2090 gates them independently, and **Codecov carryforward only applies to a flag with no upload on the commit**. | scenario | `examples` flag | outcome | |---|---|---| | no lanes run (docs-only) | absent | ✅ carried forward | | all lanes run | complete | ✅ correct | | **one lane runs** (now common) | **present but partial** | ❌ carryforward skipped; full coverage replaced by that lane's subset | The third row is what gating made routine: a PR touching only `examples/diffusers/**` runs the onnx lane, uploads `examples` containing onnx coverage alone, and Codecov reports a drop for code the PR never touched. One flag per example (`examples-<name>`, 12 flags) restores the intent already documented in `.github/codecov.yml`: a skipped lane has no upload for its flag and is carried forward; a lane that ran replaces only its own slice. The config comment is updated to explain why a shared flag defeats carryforward, so this isn't re-introduced. `gpu_tests` deliberately keeps a single `gpu` flag — its five suites are gated at workflow level, so they upload together or not at all. It would need the same change if per-suite gating is ever added. ### Testing Not directly observable on this PR: it changes workflow files, which are in the gate's `common` group, so **all twelve lanes run** and every flag is uploaded — the healthy case either way. The behavior it fixes appears on the next PR that touches a single example, where `codecov/project` should now stay accurate instead of reporting a drop. Worth noting the symptom was never blocking: `codecov/project` is not a required check and the threshold allows a 2% drop. This is about the coverage data being right. ### Before your PR is "*Ready for review*" - Is this change backward compatible?: ✅ — flags are new names; historical data under `examples` is unaffected - If you copied code from any other sources or added a new PIP dependency, did you follow guidance in `CONTRIBUTING.md`: N/A - Did you write any new necessary tests?: N/A — CI configuration - Did you update [Changelog](https://github.com/NVIDIA/Model-Optimizer/blob/main/CHANGELOG.rst)?: N/A - Did you get Claude approval on this PR?: ❌ — not yet run <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Improved coverage reporting by tracking results separately for each test example. * Clarified coverage configuration and documented how skipped uploads are carried forward. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Keval Morabia <28916987+kevalmorabia97@users.noreply.github.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
What does this PR do?
Type of change: CI/CD improvement
Follow-up to #2086, which carried the speculative-decoding fix; this PR is the CI half.
Lanes now run only when their own files change. A one-line edit to any example started all 12 example lanes, and any
modelopt/**change started every GPU suite._example_tests_runner.yml/_gpu_tests_runner.yml, deriving its watch list from the example or suite name it was already given (examples/<name>/**,tests/examples/<name>/**,tests/<suite>/**). Adding a new example stays a one-line matrix entry — no central mapping to update.watch_extranext to the example that needs them:hf_ptq→llm_eval(huggingface_example.shruns lm_eval from../llm_eval),torch_trt→onnx_ptq,speculative_decoding→hf_ptq+dataset,llm_qat/gpt-oss→dataset.gpu_tests.ymlis split into caller + runner to match. This shape is forced, not stylistic: job-levelif:cannot readmatrix, andcontainer:images are pulled before any step runs, so gating inside the job would still pull 10–20 GB and hold a GPU runner for every skipped suite.modelopt/**,modelopt_recipes/**,pyproject.tomlandtests/_test_utils/**still run every lane. The gate now watches the last two, which example tests depend on but it previously ignored.Docs-only changes no longer start GPU jobs. The gate ignores
**.md,**.rst,**.pngand**.ipynbby default, so a README edit short-circuits the whole workflow. Nothing executes notebooks (nonbmake/nbvalin the repo), and.sh/.yaml/.txtstay watched since examples run them.One file holds the gate logic.
.github/actions/changed-files-gateis a composite action doing the merge-base + changed-files comparison and, optionally, the^linux$wait._pr_gate.ymland_wait_for_checks.ymlare both deleted: each top-level workflow keeps a 12-linepr-gatejob that is pure wiring, and the runners use the action as steps so a lane showsgate+run-testrather than three checks. Calling a reusable workflow always materializes all of its jobs, including skipped ones, which is what made the per-lane check list noisy.unit_tests.ymlalso drops its DCO wait: DCO can be marked passing manually, so blocking the matrix on it only delayed feedback. The^linux$wait remains, which is the gate that actually protects GPU runners.Also, from the original lane consolidation:
trtllm-prandtrtllm-non-prmerge into a singletrtllmjob gated like the others, sollm_evalnow runs on PRs, where it was nightly-only.gpt-ossmoves to the TensorRT-LLM image. Its deploy step needstensorrt_llm, whichpytorchdoesn't have, sodeploy_gpt_oss_trtllmsilently skipped in CI. Itsimportorskipis dropped now that the lane guarantees the dependency.26.06/26.01→26.07(torch example lane, regression). Left pinned with their existing in-file reasons: pytorch26.05for the gpu lane (EXPLICIT_BATCHremoved in TensorRT 11), tensorrt26.05for the onnx lane (torch-tensorrtneedslibnvinfer.so.10), vllmv0.20.0(legacy FusedMoE coverage). TensorRT-LLM stays on1.3.0rc20: rc21–rc23 ship aquickstart_multimodal.pyimportingMultimodalConfigbeforetensorrt_llm.llmapiexported it (fixed upstream in [https://nvbugs/6537081][fix] Fix import error TensorRT-LLM#17112, one day after rc23 was cut), which fails thehf_ptqVLM deploy smoke test.Also clarifies the changelog line in the PR template to spell out when an entry is expected.
Two silent-failure fixes found in review:
any_changed, which is ACMR and excludes deletions, so a delete-only PR (removing an example, a test, or library code) ran nothing. Nowany_modified(ACMRD), fixed inexample_tests.yml,_pr_gate.ymlandunit_tests.yml.git merge-basewas piped intotee, so a failure returnedtee's exit status and emitted an empty base, quietly changing which lanes run instead of failing.Nightly secret scanning is fixed.
code_quality.ymlexcludes trufflehog'slobdetector: its(live|test)_[a-zA-Z0-9_]{35}pattern matches any pytest function whose name is exactly 35 characters aftertest_— 60 of them in this repo, e.g.test_all_zero_activation_yields_no_scale— and reports them as verified secrets. This only ever failed nightly because the action scans all history onscheduleand only the PR diff onpull_request.Testing
Workflow YAML validated locally and the selection logic checked by hand across scenarios (
examples/diffusers/**→ onnx lane only;examples/dataset/**→llm_qat,speculative_decoding,gpt-oss;examples/llm_eval/**→hf_ptq+llm_eval;modelopt/**and nightly → everything). Gating behavior itself can only be exercised by a real PR run — the failure mode to watch for is a lane skipping when it should have run.Before your PR is "Ready for review"
CONTRIBUTING.md: N/ASummary by CodeRabbit
CI Improvements
Documentation