Skip to content

feat(examine): show the AMD driver version on Windows and flag old drivers - #680

Open
volen-silo wants to merge 1 commit into
mainfrom
feat/examine-windows-driver-version
Open

volen-silo wants to merge 1 commit into
mainfrom
feat/examine-windows-driver-version

Conversation

@volen-silo

@volen-silo volen-silo commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

On Windows, rocm examine showed the AMD display driver as a name only, with no version or date. A laptop with a 2021 driver raised no warning in rocm examine or rocm diagnose, and rocm install driver only said to run rocm examine.

Cause

The inventory lists the adapter through pnputil, which has no driver version. The video controller query ran only when that list was empty. check_14 needs a HIP SDK and a failing hipInfo or a symptom, and it never compares dates.

Change

  • rocm examine, rocm diagnose and rocm install driver read the driver version and date from one Windows device inventory and one adapter choice. rocm examine prints driver_version, driver_date and driver_age. With --json, it adds adrenalin_date and an optional summary.driver.windows, both additive. A Microsoft Basic Display Adapter is treated as "no AMD driver".
  • A driver dated before 2023-07-27, the release of the first HIP SDK for Windows, gets advice only. The new print-only entry is fix-22-display-driver-old. It needs no HIP SDK, scores below the match threshold, and never sets has_match. Slot 20 belongs to info-20-gpu-no-rocm-support, so this entry uses 22. The catalog now has 29 entries.
  • On Windows, rocm install driver prints the version, date, an outdated: yes/no/unknown verdict and the fix id. It installs nothing, with or without --yes. The chat and freeform planners now match this on Windows: read-only, no --yes, and no "disruptive" wording. Linux and WSL are unchanged.
  • The date is only a floor. It cannot judge newer GPUs such as gfx120X, gfx1150 and gfx1151, which may need newer drivers. The docs and the advice text say so.
  • The logic is in windows_driver.rs. Startup paths skip the extra video controller query.

What "old" means

AMD documents no minimum driver version for the HIP SDK for Windows or for the Lemonade Vulkan backend. The check compares the driver date only with the release date of the first HIP SDK for Windows. The text says the minimum is not established and never says the driver is broken. Advice is AMD's support page and a restart. rocm-cli installs no drivers on Windows.

Tests

  • Unit tests cover date parsing and comparison (the boundary day, missing and unparsable values, non-Windows, current driver), the fallback driver, adapter choice, the fix-22 plan drift guards, the planner text next to what the command does on each platform, and the Windows host check, which is a pure function called with several OS names.
  • Scenarios for the Windows GPU lane: examine-29, diagnose-41, driver-install-04 and driver-install-05. The two install steps refuse any host that is not native Windows before they run the CLI.
  • Only the old-driver branch (a driver dated before 2023-07-27) has no end-to-end scenario, because it needs such a machine.
  • reference.md and the catalog are updated. contract_version is unchanged because this is an addition.
  • Run locally on Linux: cargo fmt, workspace clippy -D warnings, e2e clippy, focused tests, and cargo xtask catalog --check.

Not verified

  • Nothing ran on Windows. The Windows scenarios run on the Windows lane in CI. The cfg(windows) code is compiled by the Windows CI job only.
  • The Basic Display Adapter case follows from how Windows names the fallback driver. It was not observed on a machine.
  • The Vulkan driver version is not read. No reliable read-only source was found.
  • The full workspace test run was not repeated on the latest head. One xtask test (lychee) cannot run in the local sandbox.

Merge order

The verify-command fix (#677) is still open and touches the same files (the fix recipes, the catalog, reference.md and the fix counts). Whichever merges second needs a rebase and a recount.

@volen-silo
volen-silo requested a review from a team as a code owner October 14, 2026 12:25
@volen-silo
volen-silo requested a review from juhovainio October 14, 2026 12:25

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

Reviewed the whole diff end to end. This is a well-built addition: the CalendarDate/DriverAge comparison logic in the new windows_driver.rs module is correct and thoroughly tested (including the cutoff-day boundary and Windows' own "unset date" placeholders like 0001-01-01/1601-01-01), the fix-20 score is deliberately kept below the match threshold so it only ever shows as advice, and the catalog/fix.rs/doctor-catalog.json/reference.md/README entries are all mutually consistent. docs/testing.md also does the right thing by explicitly explaining why there's no e2e scenario here, rather than leaving the gap silent. The PR description already flags the merge-order coordination with #677/#679, so no need to repeat that.

Requesting changes on one real, non-blocking-in-the-common-case but inaccurate claim in the new module's own doc comment, left as an inline comment below: it says rocm examine and rocm diagnose "read the verdict from here, so the two cannot disagree" - that's true of the comparison logic, but not of the underlying facts. The two callers get their driver version/date from two separate PowerShell probes with different adapter-selection logic, so on a machine with more than one AMD display adapter they can disagree about which adapter's driver they're even looking at.

Comment thread crates/rocm-core/src/windows_driver.rs Outdated
//!
//! Two callers need the same answer. `rocm examine` prints it, and
//! `rocm diagnose` raises [`DISPLAY_DRIVER_OLD_FIX_ID`] from it. Both read
//! the verdict from here, so the two cannot disagree.

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.

This guarantee only holds for the comparison logic in this module, not for the facts fed into it. rocm diagnose's check_20 reads Examination.adrenalin_version/adrenalin_date, populated by examine.rs's probe_adrenalin_windows via WIN_ADRENALIN_SCRIPT - a single CIM query that does Where-Object { PNPDeviceID -match 'VEN_1002' -or Name -match 'AMD|Radeon|Instinct' } | Select-Object -First 1, i.e. whichever matching adapter CIM happens to enumerate first.

rocm examine's rendering and rocm install driver's plan text instead read ExamineSummary.driver.windows, populated by host_gpu.rs's detect_driver_summary_with_windows_inventory -> a pnputil-first, video-controller-fallback pipeline that then picks the adapter via WindowsExamineInventory::preferred_amd_display(), which explicitly ranks a ROCm-supported discrete GPU above a recognized-but-unsupported iGPU (the comment there says this is so a gfx90c iGPU "cannot hide a discrete card").

These are two independently-run probes with two different selection algorithms. On exactly the multi-adapter machine preferred_amd_display() is designed to handle (an AMD iGPU plus a discrete AMD GPU), the two pipelines can pick different physical adapters and report different driver versions/dates for what a user perceives as one driver - which is the opposite of "cannot disagree." Worth either having rocm diagnose's check reuse the same inventory-based selection rocm examine uses, or softening this doc comment to describe what's actually guaranteed (shared comparison logic, not shared facts).

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

🔴 Automated review · pr-review-watcher · e7aac6b

This automation never files a GitHub approval, so no approving review will appear here whatever the outcome — the merge decision stays with a human reviewer.

Review — needs work

Full review of the whole change (one commit, 0cde0aa3…e7aac6bf).
No ticket named; the description notes this needs a rebase and recount after #677 and #679.

Blocking

Five findings, each posted as an inline comment on its first cited line:

  1. rocm diagnose reads the driver from a different probe than rocm examine and rocm install driver, so they can disagree, though the code says they cannot.
  2. The new video-controller query runs on every Windows inventory call, including the rocm serve, default-engine and chat pre-draw paths, and its comment says the opposite.
  3. No Gherkin scenario covers the new Windows output, and the stated reason (no Windows lane) does not hold.
  4. The wiring that puts driver facts into the examine summary, and the date-only re-query branch, are untested.
  5. The two copies of the fix-20 plan already differ, and the drift guards were not extended to fix-20.

Non-blocking

  • The Microsoft Basic Display Adapter would likely be reported as an "old AMD driver" — host_gpu.rs:36, examine.rs:3052
    With no AMD driver loaded, Windows falls back to the basic display driver. That adapter keeps PCI\VEN_1002, so both probes select it. I believe it reports DriverVersion 10.0.<build> with a placeholder DriverDate of 2006-06-21, which the year-before-2000 guard does not catch. This has not been checked on a Windows machine. If it holds, the user is told to update an AMD driver that is not installed. Suggest treating a 10.0. version or a Microsoft provider as "no AMD driver", not fix-20.

  • An advice-only row replaces diagnose's upstream escalation in text output — diagnose.rs:2729-2737, :2815-2823, :2039
    fix-20 ignores the symptom, so on an old-driver host matched is never empty. The text report then drops "no known misconfiguration matched … file upstream" and ends with "run rocm fix fix-20-display-driver-old (the highest-scoring match)", whatever the user reported. JSON output is unaffected.

  • The documented focused test commands miss 8 of the new tests — docs/testing.md:1163-1167
    The windows_driver, display_driver and windows_install_driver filters miss:

    • the three probe-output tests in examine.rs;
    • four host_gpu.rs tests (examine_prints_no_driver_age_lines_when_no_version_was_read, the_inventory_parser_reads_the_driver_date_and_drops_a_bad_one, an_adapter_missing_its_version_asks_for_a_second_query, a_version_less_adapter_gives_no_driver_info_and_is_filled_from_the_video_controller);
    • the_fix_id_the_install_text_names_is_the_one_diagnose_raises in the bin.

    The filters also pick up an unrelated diagnose test. Confirmed for the rocm-core filters with cargo test -p rocm-core <filter> -- --list.

  • The docs give the cutoff as "before July 2023", but the code uses 2023-07-27 — docs/manual-testing.md:275, :279, :287; docs/testing.md:1172
    FIRST_HIP_SDK_FOR_WINDOWS governs. A driver dated 2023-07-01 to 07-26 is flagged, while a tester following the doc would expect no flag.

  • The README paragraph sits under the install sdk text — README.md:367-371
    "Driver installation" (README.md:440-443) still mentions Linux only.

  • The rocm-doctor skill has no rule for advice-only entries — skills/rocm-doctor/SKILL.md step 1, reference.md:125
    The skill acts on has_match, which fix-20 never sets, so an agent following it silently drops advice that examine and the README present. Say whether to relay it.

  • A stale count in a comment — fix.rs:2868
    "the other 23 fix-ids" should now be 26. It was already wrong before this change.

Decisions for the author

  • A date cutoff reaches only some of the supported hardware — tradeoff
    The cutoff itself is right: AMD's ROCm 5.5.1 Windows Quick Start is dated 2023-07-27 (https://rocm.docs.amd.com/en/docs-5.5.1/deploy/windows/quick_start.html). That page also answers "Not verified: the cutoff date comes from press and discussion posts". The "no published minimum" claim also holds; AMD's pages only name the driver the HIP SDK installer bundles.
    The limit is reach. The check can never fire on gfx120X, gfx1150 or gfx1151, which all launched after mid-2023. It also misses the one driver issue AMD does document: lower performance on Strix Halo with 26.10-branch drivers. It still applies to RDNA2 and early RDNA3. Please confirm that reach is what you intend.
  • Store the date as Option<CalendarDate> — non-blocking-improvement
    Today it is a String re-parsed by every age() call (windows_driver.rs:96-102, :134-139). The pub field allows a value that silently reads as Unknown.
  • --json carries the version and date but not the verdict — non-blocking-improvement
    A consumer has to re-implement the cutoff itself.

Positive signals

  • The install text is computed from the same WindowsDriverInfo as the verdict, and a test enforces the "minimum is not established" caveat in every statement.
  • Years before 2000 are rejected, so the unset-date placeholder reads as unknown rather than "very old". Dates are formatted with InvariantCulture.
  • fix-20's score is asserted below MIN_SCORE_FOR_MATCH, and its recipe is print-only, so it cannot flip has_match or the unattended install.
  • The report redaction sweep gained sentinels for the new driver version and date.

Deployment notes

  • rocm examine --json gains adrenalin_date and an optional summary.driver.windows. Both are additive; serde(default) keeps older consumers working.
  • On Windows, rocm serve, chat and examine pay one extra PowerShell spawn (blocking finding 2).
  • doctor-catalog.json grows to 27 entries. The downstream rocm-doctor skill copy needs its hand-sync (AGENTS.md §7).

What this covered

  • Read: every file in the change, completely, at 0cde0aa3…e7aac6bf. Also the callers on the serve, chat and default-engine paths, the e2e workflows and feature files, and AGENTS.md.
  • Passes: history, earlier review comments on these files, impact analysis, and a check of AMD's public docs.
  • Ran: cargo test -p rocm-core --lib on this head (687 passed, 0 failed).
  • Not run: nothing on Windows. The PowerShell paths and their timing are argued from the code. E2E tests (MI300X) had no result at review time.
  • Not reconciled: this review was not reconciled against the PR's existing discussion.

Comment thread crates/rocm-core/src/windows_driver.rs Outdated
//! The AMD display driver on Windows: what version and date it has, and
//! whether it is old.
//!
//! Two callers need the same answer. `rocm examine` prints it, and

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.

Blocking — rocm diagnose reads the driver from a different probe than rocm examine and rocm install driver, so they can disagree, though this comment says they cannot.

Locations: crates/rocm-core/src/windows_driver.rs:8-10, apps/rocm/src/driver_install.rs:827-828, crates/rocm-core/src/examine.rs:3052, crates/rocm-core/src/host_gpu.rs:1687-1693

  • Two probes:
    • examine and install driver go through ExamineSummary::gather → preferred_amd_display(). That ranks adapters, putting a ROCm-capable discrete GPU above a gfx90c iGPU.
    • diagnose uses WIN_ADRENALIN_SCRIPT. It takes Select-Object -First 1 in WMI order, has no AdapterCompatibility clause, and uses an 8 s timeout instead of 5 s.
    • Only the verdict function is shared, not the facts it is given.
  • How they disagree:
    • On an APU plus dGPU machine whose two drivers carry different dates, examine can print "run rocm diagnose (fix-20-display-driver-old)" while diagnose raises nothing, or the reverse.
    • If the inventory's video-controller query times out, install driver says the version "could not be read" while diagnose still raises fix-20.
  • The rule: AGENTS.md §3 requires that a command named in remediation advice "actually clear the condition that printed it".
  • The test can't catch it: the_fix_id_the_install_text_names_is_the_one_diagnose_raises builds Examination by hand and never renders the install text. It passes with the driver_install.rs change reverted.

Suggested fix: fill diagnose's adrenalin_* from the same inventory and preferred_amd_display selection. Then rename that test, or make it build both outputs from one probe result.

Comment thread crates/rocm-core/src/host_gpu.rs Outdated
{
inventory.merge_missing_from(pnp);
}
// `pnputil` lists the adapter but not its driver version or date, so an

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.

Blocking — this second query runs on every Windows inventory call, including the startup paths, and the comment says the opposite.

Locations: crates/rocm-core/src/host_gpu.rs:2503-2511, :2727

  • Why it always runs: push_windows_pnputil_display always sets driver_date: None, and pnputil is the first and normal source. So preferred_amd_display_misses_driver_facts() is true on every AMD host, and another PowerShell/CIM process (5 s timeout) starts each time. "A complete inventory costs nothing" never applies in practice.
  • Who pays: detect_windows_examine_inventory is shared, so the cost lands on callers that never use the date:
    • detect_host_gpu_summary_fast (:3056, :3072), behind rocm serve and default-engine resolution;
    • chat_host_facts, whose header (apps/rocm/src/chat_host_facts.rs:15-19) says it must stay cheap because it runs before the dashboard draws;
    • detect_local_windows_host_driver (:509).

Suggested fix: fetch DriverDate only on the driver-summary path (gather / detect_driver_summary_with_windows_inventory), or add it to a query that already runs. Correct the comment either way.

Comment thread docs/testing.md Outdated
reconcile path is also non-privileged. It refreshes passive checks and persists
the `total`/`present`/`missing` check summary without running DKMS commands.

Windows display driver checks (`fix-20-display-driver-old`) are covered by unit

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.

Blocking — no Gherkin scenario covers the new Windows output, and the reason given here does not hold.

Locations: docs/testing.md:1160-1172, docs/manual-testing.md:285-287, the "Tests" section of the description; nothing changed under tests/e2e-cucumber/features/

  • What needs a scenario: AGENTS.md §3 asks for one when command output changes. This change adds:
    • three rocm examine lines;
    • a fix-20 row in rocm diagnose;
    • Windows install driver text promising "no driver is installed or changed". §3 names that kind of promise specifically.
  • The Windows lane already exists:
    • e2e-gpu-strix-windows in .github/workflows/e2e-selfhosted.yml:650, whose path filter includes crates/rocm-core/** and apps/rocm/**;
    • it passed on this head;
    • @requires-os:windows scenarios already run on it (install_lifecycle.feature:136).
  • What it can check today: only the "older" branch needs a machine with an old driver. The "not older" verdict, the three examine lines, and installs-nothing / no-execution-commands can all be asserted on that lane now.

Suggested fix:

  • Add @requires-os:windows scenarios for examine and for install driver, both with and without --yes.
  • Correct this paragraph, the one in docs/manual-testing.md, and the description, so that only the old-driver branch is named as the gap.

Comment thread crates/rocm-core/src/host_gpu.rs Outdated
}
});
return windows_driver_summary(detail);
let info = windows_inventory.and_then(WindowsExamineInventory::amd_display_driver_info);

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.

Blocking — two pieces of the new wiring have no test: the code that puts driver facts into the examine summary, and the date-only re-query branch.

Locations: crates/rocm-core/src/host_gpu.rs:2331-2332, :1699-1700

  • The summary wiring:
    • Every new examine test builds the summary through windows_driver_summary(…, info) directly.
    • This amd_display_driver_info call sits behind the runtime runtime_is_windows() check.
    • Replace it with None and every test stays green, while examine and install driver silently lose the version, date and age.
  • The date-only branch:
    • an_adapter_missing_its_version_asks_for_a_second_query covers "no version" and "both present".
    • Delete || d.driver_date.is_none() and it stays green, yet that is the branch the pnputil path actually takes.

Suggested fix: extract a pure "driver summary from Option<&WindowsExamineInventory>" function, test it on every platform, and add a version-present / date-missing case.

needs_reboot: true,
fix_id: id.to_owned(),
verify: "powershell -NoProfile -Command \"Get-CimInstance Win32_VideoController | Where-Object { $_.Name -like '*AMD*' -or $_.Name -like '*Radeon*' } | Select-Object Name,DriverVersion,DriverDate\"".to_owned(),
notes: vec![

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.

Blocking — the two copies of the fix-20 plan already differ, and the drift guards built for this were not extended to fix-20.

Locations: crates/rocm-core/src/diagnose.rs:2064-2066, crates/rocm-core/src/fix.rs:877-880

  • The notes differ: this note adds "AMD publishes no minimum driver version for the HIP SDK or the Lemonade Vulkan backend." The catalog note in fix.rs stops after the first sentence, so rocm diagnose and rocm fix fix-20-display-driver-old print different notes for the same entry.
  • The URL is duplicated: fix.rs hard-codes https://www.amd.com/en/support twice instead of using windows_driver::AMD_SUPPORT_URL.
  • The guards skip fix-20: diagnosis_remediation_matches_the_fix_catalog_for_shared_fix_ids and assert_plan_matches_the_catalog_copy exist for exactly this drift. Neither covers fix-20.

Suggested fix: make the notes identical, use the constant, and add fix-20 to both guards.

@volen-silo
volen-silo force-pushed the feat/examine-windows-driver-version branch 4 times, most recently from dc6c223 to 9fe6e07 Compare October 16, 2026 12:00

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

Automated review · pr-review-watcher · 9fe6e07

This automation never files a GitHub approval, so no approving review will appear here whatever the outcome — the merge decision stays with a human reviewer.

Review — needs work

Full review of the whole change at 9fe6e07c (one commit on fcc646e9). e7aac6bf, the commit my last review covered, is no longer on the branch, so this is not a diff against it.

Two blocking findings, posted as inline comments: diagnose-41 passes with the change reverted, and the check_22 placement. The third blocking point is in the body:

Blocking

  • The description no longer matches the change — PR body, "Change" and "Tests"
    It names fix-20-display-driver-old; the code, catalog, README, skill reference, docs and tests use fix-22-display-driver-old. "No end-to-end scenario covers this" is no longer true: the change adds examine-29, diagnose-41, driver-install-04/-05, a Windows guard test and step files. "Needs a rebase and a recount" describes work that is already done. Fix: update the description; say only the old-driver branch lacks an end-to-end scenario.

Non-blocking

  • docs/testing.md:1170 says "four modules"; the listed filters match five (diagnose, examine, fix, host_gpu, windows_driver). Say "five" or drop the number.
  • Two comments narrate the replaced code — the doc comment on probe_adrenalin_windows in examine.rs, and windows_driver.rs:17-19. State only the current contract.

Decisions for the author

  • A date cutoff reaches only some of the supported hardware — tradeoff (unchanged since last round). The 2023-07-27 cutoff can never fire on gfx120X, gfx1150 or gfx1151, which launched later, and it misses the one driver problem AMD documents (Strix Halo with 26.10-branch drivers). Please confirm that reach is intended.
  • The new SKILL.md advice-only bullet does not say whether it overrides step 2 — non-blocking-improvement. skills/rocm-doctor/SKILL.md:121-125 says to relay a sub-threshold fix-22 entry; :166-169 says a lower cause may be mentioned "only if it also clears min_score_for_match". Add a pointer from step 2.
  • On Windows the chat and freeform planners still frame install driver as a disruptive install — non-blocking-improvement. apps/rocm/src/main.rs:6984-6991 and :12320-12345 title it "Install driver", inject --yes and say "privileged or disruptive"; on Windows the command now only reports.
  • driver_host_guard.rs greps step source text rather than testing behaviour, so it would pass if the helper's assertion were inverted.

Positive signals

  • The Microsoft Basic Display Adapter is treated as "no AMD driver" (is_microsoft_fallback_driver), with tests.
  • InventoryScope (FAST/SUMMARY/DRIVER_ONLY) and the WindowsInventorySources trait keep startup paths free of the extra query and let tests count queries on any platform.
  • examine, install driver and diagnose read the driver through one function, amd_display_driver_info(); the fix-22 plan and URL are shared and both drift guards cover it.

Deployment notes

  • rocm examine --json gains adrenalin_date and an optional summary.driver.windows; both are additive.
  • doctor-catalog.json grows to 29 entries; the downstream rocm-doctor skill copy needs its hand-sync (AGENTS.md §7).
  • Every ExamineSummary::gather() caller on Windows (including rocmd) can now start one extra PowerShell/CIM query; I did not check whether any is a hot path.
  • windows-build-and-test, build-and-test, Test (affected crates), Build Linux PR binaries and Analyze (rust) had no conclusion when I read the checks; the cfg(windows) code was not compiled by anything I could see.

What this covered

  • Read: windows_driver.rs, driver_install.rs and main.rs completely; for host_gpu.rs, examine.rs, diagnose.rs, fix.rs, report.rs, lib.rs and doctor-catalog.json the full diff and surrounding code, not every line; every hunk of the e2e files, docs, README and skills. Range fcc646e9…9fe6e07c.
  • Ran (Linux only): cargo test -p rocm-core --lib on the touched modules (445 passed, 1 ignored), clippy clean, the e2e-cucumber guard/naming tests, cargo check of the e2e binary, and the five rocm bin tests for the install text.
  • Did not run: anything on Windows; mutation/revert runs (revert verdicts are traced from the code); the history and prior-changes passes.
  • Last round: all five earlier blocking objections are answered by the new code (one shared driver read, InventoryScope, pure tested summary wiring, shared plan with drift guards, four new scenarios). That was checked against my earlier wording after the findings were final.
  • Not reconciled against the PR's existing discussion.

# (advice present). The old-driver branch needs such a machine and is not
# exercised here.
@id:diagnose-windows-display-driver-advice-follows-the-inspection @requires-os:windows @requires-gpu
Scenario: diagnose-41 - On Windows the old display driver advice appears only for an old driver

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.

Blocking — diagnose-41 passes with the change reverted, and its name overclaims.

Locations: tests/e2e-cucumber/features/diagnose.feature:627, tests/e2e-cucumber/tests/e2e/diagnose_steps.rs:2772 (assert_old_driver_advice_follows_the_inspection)

  • The step computes old from windows_driver_record(&examine)… == Some("predates_first_hip_sdk"). Reverted, examine --json has no /summary/driver/windows, so old is false.
  • Reverted, diagnose --json has no fix-22 row either, so assert_eq!(row.is_some(), old) is false == false and the scenario passes.
  • On a current-driver lane, the only kind the feature comment says exists, old is never true, so it only checks that the advice is absent for a current driver.
  • examine-29 does this correctly: it panics when the record is missing.

Confidence 85 · logic · Fix: have the step require the record as examine-29 does, so a reverted CLI fails it (if the record can legitimately be absent when no version was read, require it whenever examine's own text shows a driver_version: line). Keep the untested old-driver branch documented.

Comment thread crates/rocm-core/src/diagnose.rs Outdated
/// HIP SDK and a failing `hipInfo` or a symptom. This one needs neither, so it
/// also covers a machine that only runs the Vulkan backend. Only evidence is
/// read: the driver date from the examination, never the symptom text.
fn check_22_display_driver_old(e: &Examination, _symptom: &str) -> Diagnosis {

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.

Non-blocking — check_22 and its recipe sit against the repo's placement rule.

Locations: crates/rocm-core/src/diagnose.rs:2207-2246, crates/rocm-core/src/fix.rs (the fix-22 recipe), doctor-catalog.json:399 and :413

The comment at diagnose.rs:650 says: "A new checker goes at the END of this section, next to where its CHECKERS entry was appended." Here check_22 sits before check_21 (:2215 vs :2248), while CHECKERS appends it after. The recipe and catalog entry also precede fix-21, the reverse of the id order.

Confidence 85 · mechanical · Fix: move the constant and function after check_21, reorder the recipe and catalog to match, and re-run cargo xtask catalog --check.

@volen-silo
volen-silo force-pushed the feat/examine-windows-driver-version branch from 9fe6e07 to 7772b1f Compare October 16, 2026 13:43
@volen-silo

Copy link
Copy Markdown
Collaborator Author

Addressed in 7772b1f.

  • diagnose-41 now fails when the CLI change is reverted. The step requires the Windows driver record, as examine-29 does. The old-driver branch itself is still untested end to end, and the docs say so.
  • check_22, the fix-22 recipe and the catalog entry now follow the -21 entries. cargo xtask catalog --check passes.
  • The PR description now describes the current change: fix-22, the four new scenarios, and that only the old-driver branch has no end-to-end scenario.
  • docs/testing.md says five modules. The two comments that narrated replaced code now state the current contract. Step 2 of SKILL.md points to the advice-only fix-22 entry.
  • driver_host_guard.rs now calls the host check with several OS names (windows passes; linux, macos and an empty name are refused), so an inverted check fails it. It still checks that the guard runs before the CLI call in both install steps, with CRLF-safe matching.

On the decisions:

  • Date cutoff: it stays as it is. The docs, the doc comments and the advice text now say it is only a floor and cannot judge newer GPUs such as gfx120X, gfx1150 and gfx1151. A check for the Strix Halo 26.10 driver problem needs a verified source, so I left it for a follow-up.
  • Planner wording: on Windows, the chat and freeform planners now treat install driver as read-only with no --yes and no "disruptive" wording, matching the command. A test asserts the planner text together with what the command does on each platform.

Not verified: nothing ran on Windows. The Windows scenarios and the cfg(windows) code run in CI.

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

Automated review · pr-review-watcher · 7772b1f

This automation never files a GitHub approval, so no approving review will appear here whatever the outcome — the merge decision stays with a human reviewer.

Review — needs work

Full review of the whole change at 7772b1f0 (one commit on 2d2dfc78). 9fe6e07c, the commit my last review covered, is no longer on the branch, so this is not a diff against it. Last round's description mismatch, the "four modules" count, the narrating comments and the planner wording are answered by this head; the recipe/catalog reordering from last round's placement point is done, which is what exposes blocker 1. Nothing was built or run locally; one finding is backed by CI, the rest are argued from the code.

Blocking

Three are inline: the catalog order (diagnose_steps.rs:130, CI-confirmed), the NoAmdDisplay regression (host_gpu.rs:511, traced by reading, not run), and the untested planner wiring (main.rs:8763). The fourth is here:

  • chat_install_driver_action returns Result but can never fail, and part of it is dead — apps/rocm/src/driver_install.rs. It is always Ok; the !arg.starts_with("--yes=") clause cannot match, because --yes is a bool flag (main.rs:~798). Confidence 75 · mechanical · Fix: return the action directly and drop the clause.

Non-blocking

  • The WSL probe skips the Microsoft-fallback exclusion the module docs say lives in one place — host_gpu.rs:540-556. amd_display_driver_info rejects 10.0.* / "Microsoft Basic Display"; detect_wsl_host_driver still returns Version("10.0.26100.1"), so check_wsl_6 can say "host AMD display driver 10.0.26100.1 is installed" when rocminfo sees no GPU. Confidence 70 · Fix: route the probe through amd_display_driver_info.
  • The Windows install plan labels its checks post_reboot_checks: for a command that installs nothing — driver_install.rs:~893, render at :1592-1680. The plan keeps reboot_required: true, and the render code's own comment says that label would "tell the user to reboot for nothing". Confidence 70 · Fix: reboot_required: false on the validate-only plan.
  • Provider-assisted planning still treats Windows install driver as approval-required — main.rs near 9360 (provider_planner_args_require_approval). Conservative, not unsafe, but the comments say every planner derives its flags from host_install_driver_only_reports. Route it through the helper or narrow the comment.
  • rocm-doctor rationale is inaccurate — skills/rocm-doctor/reference.md:39-40, SKILL.md:121-125 say the advice-only entry "is shown to the user by rocm examine and the README"; examine prints only a driver_age line and an agent cannot see the README. Say "relay the entry's title and evidence as advice".
  • docs/testing.md filters claim "and nothing else" — the new cross-platform planner test matches none of the listed fragments, while display_driver / driver_fact also match the startup-path tests (names grepped, --list not run).
  • diagnose-41 — raised last round, still open. The title ("appears only for an old driver") overclaims: on a current-driver host the step only proves the advice is absent. Separately, the score check at diagnose_steps.rs:~2796 compares Option<i64> < Option<i64>, so a missing score passes. Retitle and expect both values.
  • The old-driver branch has no end-to-end seam — examine-29, diagnose-41 and driver-install-04 run against whatever driver the lane has, so breaking assess_date, the Predates arm or the cutoff stays green; only the windows_driver.rs unit tests cover it. The description discloses this.
  • driver_host_guard.rs:12-35 — raised last round, unchanged. It matches the literal require_native_windows(); in step source, so a comment satisfies it.
  • CalendarDate::parse is looser than its doc — 2021-+1-+4 and 2023-02-31 parse. The cutoff ordering is unaffected.

Decisions for the author

  • A PowerShell query on every ExamineSummary::gather call — tradeoff. Callers (main.rs:2081, :2714, :2839, :5003; chat.rs:3320; driver_install.rs:49, :84, :147) now pay up to the 5 s WINDOWS_INVENTORY_QUERY_TIMEOUT on AMD Windows hosts, and examine --json runs the inventory twice. One shared source of truth against startup/snapshot paths that don't print the driver; gathering once per run or giving gather a scope would do both. I did not check how often the codex bridge snapshot runs.
  • The PR bundles several changes — non-blocking-improvement. Catalog entry, WindowsInventorySources refactor, three scopes, the WSL probe change and the is_advice_only text rule; the last two are outside the stated scope (AGENTS.md §11).
  • is_advice_only and the platform decision are stringly-typed — non-blocking-improvement. A hard-coded id and an os == "windows" shared by three sites, with the plan builder on examine.os and the planners on the compile-time host OS; they agree today.

Deployment notes

  • Adds print-only fix-22-display-driver-old (29 catalog entries); contract_version unchanged; JSON additions are adrenalin_date and summary.driver.windows.
  • #677 touches the same files; whichever merges second needs a rebase and recount, including the CATALOG_FIX_IDS order.

What this covered

  • Read: every changed file at pr/680, completely, except host_gpu.rs (diff, parser, merge, preferred-adapter, pnputil/video and WSL code, not all ~5,000 lines), main.rs (every changed or driver-related region and consumers), and diagnose_steps.rs / driver_steps.rs (changed regions and neighbours). Range 2d2dfc78…7772b1f0.
  • CI when read: E2E tests and E2E tests (Strix Halo, WSL2) failing (the second not opened); Windows and two Ubuntu Strix Halo lanes in progress; MI300X and W7900 queued; the rest passed.
  • Did not run: anything locally; mutation/revert runs; a full history pass.
  • Not reconciled against the PR's existing discussion beyond removing points already raised.

"fix-wsl-7-wsl1",
"fix-18-comgr-conflict",
"fix-19-shm-too-small",
"fix-22-display-driver-old",

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.

Blocking — CATALOG_FIX_IDS is in the wrong order, so diagnose-34 fails on every platform.

RECIPES (fix.rs) and doctor-catalog.json put fix-21-msvc-redist-outdated before fix-22-display-driver-old (the reorder from last round), and rocm fix --json emits that order. The assert at diagnose_steps.rs:2506 is an ordered assert_eq!, so the swapped pair fails. The scenario has no platform tag. CI confirms it: https://github.com/ROCm/rocm-cli/actions/runs/38910065163/job/117006436496 — "Then the catalog names every entry and what the CLI does with each … the published catalog and the documented one disagree". The listing step (assert_catalog_complete) is order-insensitive, so it hides this.

Confidence 100 (CI) · mechanical · Fix: put fix-21-msvc-redist-outdated first, then fix-22-display-driver-old.

Comment thread crates/rocm-core/src/host_gpu.rs Outdated
let Some(inventory) = detect_windows_examine_inventory() else {
// This one reads the driver version, which `pnputil` never reports, so it
// asks for the driver facts. It is not a startup path.
let Some(inventory) = detect_windows_driver_inventory() else {

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.

Blocking — detect_local_windows_host_driver can no longer answer NoAmdDisplay. Traced by reading the code and origin/main; not run.

The call moved from the FAST inventory to DRIVER_ONLY (host_gpu.rs:2577), which sets system: false. On a Windows host with no AMD adapter no display source returns anything and no CPU/RAM is fetched, so is_empty() (:1651) is true, assemble_windows_inventory returns None (:2612-2653) and this returns Unreachable. On main, the CPU/RAM data made the inventory non-empty and the probe returned NoAmdDisplay. check_wsl_6_host_driver_too_old abstains when the host is unreachable, so its "host reports no AMD display adapter" branch can no longer fire. No test calls this function; the DRIVER_ONLY test uses a host that has an adapter.

Confidence 85 · logic · Fix: make assemble_windows_inventory distinguish "all sources failed" from "sources answered, no adapters", or keep the system query for this caller.

Comment thread apps/rocm/src/main.rs Outdated
return plan_driver_request(
trimmed,
&lower,
driver_install::host_install_driver_only_reports(),

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.

Blocking — the planner wiring that decides read-only vs. approval on Windows is untested.

This call and chat.rs:2525-2528 pass host_install_driver_only_reports(), but planners_describe_install_driver_as_the_command_behaves_on_each_platform calls the helpers directly with an only_reports value it computes itself, and hybrid_planner_driver_action_includes_yes_for_approved_execution now calls plan_driver_request(.., false) instead of build_freeform_plan("install the linux driver…"). Hard-coding false in either caller, or comparing the wrong OS in the helper, stays green. The same gap covers the cfg(windows) scope wiring in host_gpu.rs (gather, detect_windows_amd_driver_info, probe_adrenalin_windows): nothing asserts which scope each passes. On Windows the chat and freeform planners now drop the approval wording and --yes on this one decision (AGENTS.md §3, §7).

Confidence 85 · logic · Fix: put the OS and the inventory sources behind a parameter or trait so the callers can be tested.

@volen-silo
volen-silo force-pushed the feat/examine-windows-driver-version branch from 7772b1f to 1302127 Compare October 16, 2026 14:52

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

Automated review · pr-review-watcher · 1302127

This automation never files a GitHub approval, so no approving review will appear here whatever the outcome — the merge decision stays with a human reviewer.

Review: needs a rebase, otherwise answered

All four blocking points from my last review are fixed, and so are almost all the non-blocking ones. One new blocking point: this PR's tests no longer compile on current main, and git does not report it as a conflict.

Blocking

  • The PR's new tests don't compile on current main. File: apps/rocm/src/driver_install.rs, five calls at roughly lines 3026, 3145, 3184, 3199 and 3218 of the merged file.
    • #705 (4cd89639, merged to main on 10-19) removed the test-only build_driver_install_plan wrapper. This PR's new tests call it five times.
    • The textual merge is clean, so neither the GitHub UI nor git merge-tree shows a conflict.
    • On a trial merge with main, cargo test -p rocm --bin rocm fails with 5 × E0425 cannot find function build_driver_install_plan. Plain cargo build succeeds.
    • Fix: rebase and call build_driver_install_plan_at(&examine, "/etc/os-release", "", true, …). I made exactly that change in a scratch tree and all 10 focused rocm binary tests passed.
    • The rebase also clears the one red check (see CI below).

What my last review raised, and where it stands

Blocking:

  • CATALOG_FIX_IDS order: fixed. fix-21 now comes before fix-22, and diagnose-34 passes on every lane, including Windows.
  • NoAmdDisplay regression: fixed.
    • detect_local_windows_host_driver uses the full inventory (InventoryScope::SUMMARY) again, so the CPU/RAM answer keeps a host with no AMD adapter from reading as unreachable.
    • The mapping moved into a pure function, local_windows_host_driver_probe. A new test covers no adapter, no answer at all, and an adapter present, and it pins that the driver-only inventory reads as empty.
  • Untested planner wiring: fixed for the planners.
    • build_freeform_plan_on takes the platform decision as a parameter.
    • the_production_planner_… and the_chat_entry_point_… go through the real entry points and assert results that differ by host OS. A hard-coded value would fail on Linux or Windows CI, and the Windows job (cargo test --workspace --all-targets) ran both and passed.
    • The cfg(windows) scope choice is still unasserted per caller. See non-blocking.
  • chat_install_driver_action returned a Result that could never fail: fixed. It returns the action directly, and the dead --yes= clause is gone.

Non-blocking:

  • WSL probe skipped the Microsoft-fallback exclusion: fixed. Both host-driver probes now read amd_display_driver_version(), which applies is_microsoft_fallback_driver, and the Basic Display test asserts it.
  • reboot_required on the Windows plan: fixed. It is false, the label reads post_install_checks:, and the test asserts that post_reboot is absent.
  • Provider-assisted planning: fixed. provider_planner_args_require_approval makes Windows install driver read-only, with a test.
  • rocm-doctor rationale: fixed. The skill now says to relay the entry's title and evidence. It also notes that step 2's threshold rule does not apply to this entry.
  • docs/testing.md "nothing else" claim: fixed. The text now admits neighbouring tests match, and the filter list includes the new tests.
  • diagnose-41: fixed. It is retitled ("agrees with the inspection"), and a missing score or threshold now fails the check.
  • driver_host_guard.rs: fixed for whole-line comments. A trailing comment (foo(); // require_native_windows();) would still satisfy it. That is a nit; I'm not asking for a change.
  • CalendarDate::parse too loose: fixed. It accepts digits only and checks days per month, including the leap-year century rule, with tests.
  • No end-to-end test of the old-driver branch: unchanged, and the description says so.

Non-blocking (new or remaining)

  • Nothing asserts which inventory scope each cfg(windows) caller passes. This is the rest of last round's blocker 3.
    • Each scope is now one named one-line wrapper (…_with_driver_facts / detect_windows_driver_inventory / detect_windows_examine_inventory), and the new test documents why the local probe needs SUMMARY.
    • Changing detect_local_windows_host_driver back to the driver-only wrapper would still stay green, because those wrappers compile only on Windows and no test calls them.
    • I accept this as is.
  • NoAmdDisplay still depends on the CPU/RAM query succeeding. If pnputil answers with no AMD adapter but that query fails, the result is still Unreachable. check_wsl_6 then abstains, which is the safe direction.
  • An --apply exclusion that matches nothing. provider_planner_args_require_approval skips the read-only path when --apply is present, but I found no --apply flag on install driver. It is the same kind of dead clause as the --yes= one removed this round. Drop it, or say what it guards.

Decisions from last round with no reply

None of these block the merge:

  • An extra PowerShell query on every ExamineSummary::gather call, and the inventory running twice under examine --json.
  • The PR bundles the WSL-probe change and the is_advice_only rule with the feature.
  • The platform decision and is_advice_only are compared as strings.

CI at 13021270

  • Failing: E2E tests (Strix Halo, Windows, current). 149 scenarios: 145 passed, 3 were expected failures (xfail), and 1 failed unexpectedly: diagnose-38.
    • The step asserts that setx must not appear, but the base's fix-6 recipe still prints setx PATH ….
    • This PR doesn't touch fix-6. #710 (0acf698d) fixed it on main, and main's Windows lane passes diagnose-38 since then (runs 39244601953 and 39389535923).
    • The rebase above clears it.
  • Passing on the Windows lane: the new scenarios (examine-29, diagnose-41, driver-install-04, driver-install-05) and diagnose-34.
  • Every other check passes: windows-build-and-test, build-and-test, MI300X, W7900, WSL2 and both Ubuntu Strix Halo lanes.

Deployment notes

  • Unchanged from last round:
    • adds the print-only fix-22-display-driver-old (29 catalog entries);
    • contract_version is unchanged;
    • the JSON additions are adrenalin_date and summary.driver.windows.
  • #677 is still open and touches the same files. Whichever merges second needs a rebase and a recount.

What this covered

  • Read: the range-diff 7772b1f0 → 13021270, every hunk; the inventory-scope code in host_gpu.rs; the Windows CI job logs for the unit tests and the e2e suite; main's Windows lane history for diagnose-38.
  • Ran, on a trial merge of the PR head into current main:
    • the rocm-core filters from docs/testing.md, plus local_host_driver_probe and calendar: 39 passed;
    • cargo test -p e2e-cucumber --test driver_host_guard: 2 passed;
    • the rocm binary tests failed to compile (the blocker above). After the one-line-per-call fix, the 10 focused binary tests passed.
  • Not run: anything on Windows (the Windows results above are from CI), the full workspace suite, and mutation runs.

@volen-silo
volen-silo force-pushed the feat/examine-windows-driver-version branch from 1302127 to 04bfbdb Compare October 22, 2026 07:44
@volen-silo

Copy link
Copy Markdown
Collaborator Author

Addressed in 04bfbdb, rebased on current main.

  • The new tests compile again: the five calls now use build_driver_install_plan_at. The rebase also picks up the main change that fixes diagnose-38 on the Windows lane.
  • The dead --apply exclusion in provider_planner_args_require_approval is removed. install driver has no such flag.
  • Resolving the rebase conflict in chat.rs: the chat action enum and chat_rocm_command_action_from_args are pub(crate) again so the tests can reach them.

On the Windows lane for the previous head, examine-29, diagnose-41, driver-install-04 and driver-install-05 passed.

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

Review: needs work — two real new bugs survived a full rewrite; everything from the last round is fixed.

Reviewed the whole diff fresh (not just the rebase delta) since the branch was rewritten. All three points from my last review (5591397855) are resolved: the five tests compile again with build_driver_install_plan_at, and the rebase cleared the one red CI check — everything is green on 04bfbdb5.

Three new blocking issues, each small and fixable:

  1. Chat can no longer run install driver on Windows at all. chat_install_driver_action now correctly returns a read-only action there, but the in-process dispatcher it's routed through (run_rocm_read_only_in_process) has no case for install driver — only install sdk --dry-run — so it errors with "unsupported in-process read-only rocm command" instead of reporting. (chat.rs:2435, :3440, :3649)
  2. The Microsoft Basic Display Adapter case still reads as "detected." The new driver_version/date/age fields correctly treat it as no AMD driver, but the older driver_status/driver_detail fields (still read by rocm examine and install driver's reconciliation output) don't apply the same exclusion, so they still say amd_display_driver_detected. (host_gpu.rs:1702, :1722, :2538; driver_install.rs:210)
  3. A new advice line has no test. "Advice about this host follows... nothing in it is applied automatically" (diagnose.rs:3005) isn't asserted anywhere — exactly the kind of CLI-behavior promise AGENTS.md §3 asks to be tested alongside the behavior.

One non-blocking nit: the long "no documented minimum" note is copy-pasted in fix.rs:926/diagnose.rs:2302 instead of hoisted to a shared constant like its neighbor FLOOR_NOTE — a drift-guard test already protects against this diverging, so low risk.

Everything else holds up well: the date-comparison logic, the platform-decision plumbing, and the Windows e2e message+state coupling are all solid. No action needed on the cutoff-reach tradeoff from earlier rounds — still the same open, accepted decision.

@volen-silo
volen-silo force-pushed the feat/examine-windows-driver-version branch from 04bfbdb to 80f4a25 Compare October 22, 2026 13:08
@volen-silo

Copy link
Copy Markdown
Collaborator Author

Addressed in 80f4a25.

  • Chat install driver on Windows: the in-process read-only dispatcher now handles install driver (with --dkms only). It runs as a dry run that never executes anything. install_driver_read_only_call_runs_in_process covers it, and a flag it does not know is still refused.
  • Microsoft Basic Display Adapter: driver_status and driver_detail now apply the same exclusion as the new fields, so they read not_detected, and the reconciliation output follows. The existing fallback test asserts it.
  • The advice line is now asserted together with its promise: every command in the advice is a printed comment, in the same test.
  • The "no documented minimum" note is one shared constant used by the fix recipe and the diagnose copy.

Not verified: the changes are checked on Linux; the Windows lane will exercise them.

Read the AMD display driver version and date through the preferred adapter in the shared Windows inventory. Examine, diagnose and driver installation use the same selection; independent probe failures can still differ. Startup and engine selection avoid the supplementary driver-fact query.

Show date-based advice for drivers older than the first HIP SDK for Windows release on 2023-07-27. No minimum compatible version is established. The new fix-22 entry is print-only and below the match threshold, and advice alone preserves upstream escalation. Windows driver installation remains non-mutating with or without approval.

Cover inventory wiring, optional dates, fallback drivers, adapter choice, recipe drift and advice-only reports with unit tests. Add Windows scenarios examine-29, diagnose-41, driver-install-04 and driver-install-05, including version/date assertions and installer-state checks. The two install steps refuse any host that is not native Windows before they run the CLI, because explicit cucumber filters bypass platform tags; a unit test pins that order without running an installer. Update the catalog, skill and behavior docs.

Verified on Linux: fmt, workspace clippy and e2e-target clippy with warnings denied, serial workspace tests (the only failure is an xtask lychee test that cannot execute lychee here), crate edges, catalog, local smoke, and focused core and CLI tests. The Windows scenarios were not run: Windows GPU behavior and the old-driver hardware branch remain unverified locally.

Signed-off-by: Eugene Volen <Eugene.Volen@amd.com>
@volen-silo
volen-silo force-pushed the feat/examine-windows-driver-version branch from 80f4a25 to deee2cb Compare October 23, 2026 15:33
@volen-silo
volen-silo dismissed stale reviews from juhovainio and tomastola October 23, 2026 15:53

Addressed in deee2cb. The module comment now says what is guaranteed (one comparison function, and one device inventory and adapter choice for examine, install driver and diagnose), and what is not (separate queries can fail differently). rocm examine now takes the driver facts from the same inventory selection as the other two commands.

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.

3 participants