Repository navigation
ROCMAI-834: remove the unused dash-tui skills subsystem and its list_skills and skill_plan agent tools - #882
Conversation
…gent tools The two tools exposed a compiled-in registry whose plans nothing in this repository executes. skill_plan install-lemonade told the model to curl the GitHub releases API and tar an archive into a per-user directory, which is not how Lemonade is installed (that is `rocm engines install lemonade`, behind its approval flow), and the auto-config-endpoint plan described config writes that nothing applies. Telling the model to run invented shell commands is the opposite of the assistant policy in docs/llm-tool-use.md. Remove ListSkillsTool, SkillPlanTool and SkillPlanArgs, their registration in register_telemetry_tools, and their entries in SKILL_NAMES (six names become four). The tests that pinned them go with them; the registry-size pin in clients.rs drops from six to four, and both the tool-name tables and the request actually sent to the model now assert that list_skills and skill_plan are absent. skills.rs itself is untouched here and is removed in the next commit. Signed-off-by: Jussi Elo <jussi.elo@amd.com>
With list_skills and skill_plan gone, skills.rs is plan-only code: two compiled-in TOML manifests, a plan builder, the embeddable-archive asset picker and the auto-config mapping. Nothing in this repository executes any of it (the apply_install_lemonade function and the `rocm skill run` command its comments cite exist nowhere here), and what the manifests describe is not how Lemonade is installed (`rocm engines install lemonade`). Executing the plans would duplicate that command and bypass its approval flow, so the module is removed rather than given an executor. Removed: skills.rs, the lemonade_release_latest.json fixture only its tests used, and the LEMONADE_PORT, VLLM_PORT and ROCM_SERVE_PORT constants that nothing but that code read. Kept: LEMONADE_ENDPOINT, VLLM_ENDPOINT and ROCM_SERVE_ENDPOINT, which the local endpoint probe in llm.rs uses. They move into llm.rs unchanged in value and become private, since llm.rs is their only user, and the test that pins the probe order keeps its name. The module's only use of rocm-deps was a re-export and the embeddable-archive helpers, so the rocm-deps dependency of rocm-dash-tui goes too, together with its entry in the crate-edge allowlist (the check fails on an allowlist entry with no matching edge) and the Cargo.lock line. The toml dependency stays: the chat endpoint persistence in app/chat.rs still serializes the config with it. Signed-off-by: Jussi Elo <jussi.elo@amd.com>
…ill run` The xtask ASCII-contract doc comment cited dash-tui's skills.rs as its example of a production file that embeds a fixture from inside its test module. That file is gone; point at the remote doctor module, which does the same with tests/remote-ssh/examination.json (pure ASCII, and walked by the every_embedded_data_file_is_ascii scan). The ignored live Lemonade scrape test in the dash collectors told the reader to start a server with `rocm skill run install-lemonade --apply`, a command that does not exist. Name the supported install command instead. Signed-off-by: Jussi Elo <jussi.elo@amd.com>
The wire-level registry test only checked that every canonical tool name was present and that two retired names were absent, so a new tool registered outside the name tables would pass unnoticed. Compare the set of tool names in the request with the union of SKILL_NAMES, ROCM_READ_TOOL_NAMES and ROCM_MUTATING_TOOL_NAMES instead, which also covers the retired skill-registry tools. Re-registering a list_skills tool turns it red. Also correct the register_telemetry_tools call-site comment, which still described a skill registry. Signed-off-by: Jussi Elo <jussi.elo@amd.com>
There was a problem hiding this comment.
🟢 Approval recommended
No active review issues block approval of the unused skills subsystem removal.
No open issues 🎉
What changed in this PR
Removes the dashboard assistant’s unused, plan-only skills subsystem so it no longer advertises installation recipes that diverge from the supported engine-install flow. Existing telemetry and ROCm tools remain available.
Changes:
- Removes
list_skills,skill_plan, their implementations, and the unused manifest/planning subsystem. - Preserves local endpoint detection by moving its constants into
llm.rs, and removes the unused dependency. - Strengthens tool-registry regression checks and corrects stale comments.
| File | Description |
|---|---|
xtask/src/crate_edges.rs |
Removes the obsolete dash-TUI → rocm-deps allowlist entry. |
xtask/src/ascii_output_contract.rs |
Updates a comment to cite a surviving fixture example. |
crates/rocm-dash-tui/tests/fixtures/lemonade_release_latest.json |
Deletes the retired subsystem’s release fixture. |
crates/rocm-dash-tui/src/skills.rs |
Deletes unused manifests, planning helpers, and associated tests. |
crates/rocm-dash-tui/src/llm.rs |
Keeps endpoint constants locally with unchanged values and probe order. |
crates/rocm-dash-tui/src/lib.rs |
Removes the skills module export. |
crates/rocm-dash-tui/src/agent/tools.rs |
Removes retired tools and adds assertions against their advertisement. |
crates/rocm-dash-tui/src/agent/mod.rs |
Removes retired tool re-exports. |
crates/rocm-dash-tui/src/agent/clients.rs |
Checks that advertised tool names exactly match the remaining registry. |
crates/rocm-dash-tui/Cargo.toml |
Drops rocm-deps and clarifies why toml remains. |
crates/rocm-dash-collectors/src/lemonade.rs |
Corrects installation guidance in a live-test comment. |
Cargo.lock |
Removes dash-TUI’s rocm-deps dependency entry. |
Review effort: Balanced
juhovainio
left a comment
There was a problem hiding this comment.
Looks good. The removal is clean: I found no leftover references to list_skills, skill_plan, rocm skill run or the deleted module in the code, README, docs/ or skills/, and the rocm-deps dependency removal is consistent across Cargo.toml, Cargo.lock and the crate-edges allowlist. The wire-level test now asserts the exact set of tools sent to the model, which is a nice tightening. The scope matches ROCMAI-834.
One small non-blocking naming nit is inline. Also, retired_skill_registry_tools_are_not_advertised is now largely redundant with the exact-set assertion, so it could be dropped if you like.
This is based on reading the diff only; build/test CI jobs were still pending when I looked.
|
|
||
| /// All Skill names, for definition/uniqueness checks and docs. | ||
| pub const SKILL_NAMES: [&str; 6] = [ | ||
| pub const SKILL_NAMES: [&str; 4] = [ |
There was a problem hiding this comment.
Non-blocking: SKILL_NAMES (and its doc comment above, "All Skill names") now holds only the four telemetry tools, so the name is misleading with the skills subsystem gone. Consider TELEMETRY_TOOL_NAMES in a follow-up; docs/architecture.md also still refers to "Skill" wrappers.
There was a problem hiding this comment.
Agreed, the name no longer fits now that the skills subsystem is gone. I kept this PR to the removal and filed the rename plus the remaining "Skill" wording in the docs and comments as ROCMAI-864, so it can go in as one focused change.
On dropping retired_skill_registry_tools_are_not_advertised: I would keep it for now. The wire-level assertion compares what the model receives against the name tables, so if someone re-registered a retired tool and added its name to SKILL_NAMES in the same change, the exact-set check would still pass. The unit test pins the retired names out of the tables themselves. I am happy to fold it into the exact-set check as part of the rename if you would rather have a single assertion.
nowycondro
left a comment
There was a problem hiding this comment.
🤖 Automated review (Claude Code) · b61f9b7
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 (merge-base 872515423a9f … head b61f9b76406744fab1a2b33c212ad8775a6f754a).
Implements ROCMAI-834 in full: every scope item the ticket lists (remove list_skills/skill_plan and the skills.rs module behind them, keep the three endpoint constants, fix the two stale comments, drop the now-unused rocm-deps dependency and its crate_edges.rs allowlist entry) and every acceptance criterion, including the two items absorbed from ROCMAI-760, are satisfied. The PR's own "Completes ROCMAI-834" claim holds up against the ticket text.
Blocking
- A self-hosted E2E hardware lane fails at this exact head commit —
E2E tests (Strix Halo, Ubuntu, release, current)andE2E tests (Strix Halo, Ubuntu, nightly, current)(workflow run 41836355803, jobs 126596324987 and 126596325108) each reportReconciliation: 7 xfail (failed as expected), 0 XPASS, 1 unexpected failure(s). FAIL: 'serve-stop-leaves-no-background-helper' was expected to pass on this host but FAILED — a regression.Two sibling lanes in the same workflow (Strix Halo Windows, Strix Halo WSL2) and the non-GPU build/test/clippy jobs are green; two more hardware lanes (MI300X, W7900) were still queued as of this review. Confidence 100 (read directly from both jobs' own logs). This scenario exercisesrocm serve --stop/ background-helper process cleanup, which has no connection to anything in this diff — the diff only touches the dash-TUI assistant's agent-tool registry and the now-deletedskills.rs— so it is very likely a pre-existing or infra-level issue this change doesn't cause. It is reported as blocking per CI-at-face-value policy (and this repo's ownAGENTS.md§12: "A red check means 'not ready' until resolved... handle infrastructure flakes by rerun or maintainer escalation with evidence"). Fix: confirm whether this scenario also fails onorigin/main's own latest CI (or rerun the job) before merging; if it's a pre-existing/infra flake unrelated to this change, resolve per §12 rather than let it block silently.
Non-blocking
None
Decisions for the author
None
Positive signals
- The four-commit structure is unusually reviewer-friendly: each commit (tool removal, module deletion, stale-comment fixes, test tightening) compiles and passes standalone, in an order that lets each be read as a self-contained step rather than one undifferentiated diff.
- Every quantitative claim in the PR description checked out independently: the "13
skills::tests::*+ 2agent::tools::testsremoved, 1 added" nets to exactly the claimed 1180→1166 test count, and repo-wide greps confirmed zero remaining references torocm skill run,list_skills,skill_plan,crate::skills::, and the three retired port constants — not just within the touched files. - The wire-level test in
agent/clients.rswas tightened from a one-directional "contains" check to exactBTreeSetequality against the three canonical tool-name tables, closing a real gap (a stray tool registered outside the tables would previously have gone undetected), and was shown to actually fail against a reintroducedlist_skillstool.
Deployment notes
- User-visible change: the dashboard assistant no longer offers
list_skillsorskill_planto the underlying model. No Gherkin scenario pinned the old tool set, so none needed updating (verified againsttests/e2e-cucumber/features). - No migration or config change; the three local-endpoint-detection constants moved into
llm.rswith byte-identical values, sodetect_local_endpoint()behaviour is unchanged.
What this covered
Every file in the diff read completely (Cargo.lock, crates/rocm-dash-collectors/src/lemonade.rs, crates/rocm-dash-tui/Cargo.toml, crates/rocm-dash-tui/src/agent/{clients,mod,tools}.rs, crates/rocm-dash-tui/src/lib.rs, crates/rocm-dash-tui/src/llm.rs, crates/rocm-dash-tui/src/skills.rs (deleted — read in full at its last live commit), tests/fixtures/lemonade_release_latest.json (deleted), xtask/src/ascii_output_contract.rs, xtask/src/crate_edges.rs), plus surrounding code needed to judge them in place (app/chat.rs, apps/rocm/src/remote/doctor.rs and its fixture, the engines install command, docs/architecture.md, docs/llm-tool-use.md, skills/rocm-cli-assistant/SKILL.md, this repo's AGENTS.md), plus repo-wide greps for every removed symbol/string. Fetched read-only via refs/pull/882/head, never checked out.
Fan-out: one independent worker reviewed agent/tools.rs + agent/mod.rs + agent/clients.rs and returned no findings. Two further groups (the skills.rs/llm.rs/lib.rs/Cargo.toml/Cargo.lock cluster, and the xtask/lemonade.rs comment-fix cluster) could not be spawned as independent workers — the shared environment's concurrent-subagent limit was hit on both the first attempt and one retry each — so those two were reviewed in this same driver context instead, which is a weaker guarantee than the first group's result; stating that explicitly rather than presenting all three as equally independent.
Did not run: a deep "prior changes" pass (no earlier independent review round on this diff exists to compare against); cargo check/clippy/test locally (no Rust toolchain available in this environment) — relied on the PR's own CI results instead, read directly from the Actions API. Ticket ROCMAI-834 was retrieved directly from Jira and its scope/acceptance criteria compared point-by-point against the diff. The PR's two existing GitHub reviews were read only to confirm no duplicate automated review already existed at this head; their content was not used to derive or steer any finding above, and this report is not reconciled against their comments.
🤖 Generated with Claude Code
Summary
The dashboard assistant advertised two agent tools,
list_skillsandskill_plan, that gave the model install recipes nothing in this repository can run and that do not match how the product installs anything.skill_plan install-lemonadereturned steps tocurlthe GitHub releases API andtaran archive into a per-user directory, but Lemonade is installed withrocm engines install lemonade, which also keeps its llama.cpp backend pins aligned and goes through the approval flow. Theauto-config-endpointplan described config writes that nothing ever applies. The helper that was meant to execute the plans (apply_install_lemonade) and therocm skill runcommand that the comments cite do not exist in this repository, socrates/rocm-dash-tui/src/skills.rshas been plan-only since the dashboard was merged in. Handing the model invented shell commands is also exactly what the assistant policy indocs/llm-tool-use.mdrules out.This removes the two tools and then the whole subsystem behind them, rather than building an executor: an executor would duplicate
rocm engines install lemonadeand bypass its approval flow.Completes ROCMAI-834.
What moved
Nothing moved except the three endpoint constants; everything else is deleted.
ListSkillsTool,SkillPlanTool,SkillPlanArgs(agent/tools.rs), their re-exports inagent/mod.rs, their registration inregister_telemetry_tools, their two entries inSKILL_NAMES(now four names)skills.rs(manifest types and parser,builtin_skills,build_plan, the two TOML manifests, the embeddable-artifact chain,auto_config_change,AutoConfigPlan,auto_config_plan,ConfigChange) andtests/fixtures/lemonade_release_latest.jsonLEMONADE_PORT,VLLM_PORT,ROCM_SERVE_PORTLEMONADE_ENDPOINT,VLLM_ENDPOINT,ROCM_SERVE_ENDPOINTllm.rs, same values, now private (their only user is the local endpoint probe there)rocm-depsdependency ofrocm-dash-tuiCargo.tomlandCargo.lock;skills.rswas its only user. The("rocm-dash-tui", "rocm-deps")entry in thecrate_edges.rsallowlist goes too, because that check fails on an allowlist entry with no matching edgeskills.rs/rocm skill runxtask/src/ascii_output_contract.rsnow citesapps/rocm/src/remote/doctor.rs(which embeds the ASCII-onlytests/remote-ssh/examination.jsonfrom its test module) as the example; the ignored live scrape test incrates/rocm-dash-collectors/src/lemonade.rsnamesrocm engines install lemonadetomlstays as a dependency ofrocm-dash-tuibecauseapp/chat.rsstill uses it to persist the chat endpoint; only its Cargo.toml comment changed.Verification
Ran:
cargo fmt --all --check;cargo clippy -p rocm-dash-tui -p rocm-dash-collectors -p xtask --all-targets --locked -- -D warnings;cargo test -p rocm-dash-tui -p rocm-dash-collectors --no-fail-fast --locked(all green);cargo test -p xtask asciiandcargo test -p xtask crate_edges(green;every_embedded_data_file_is_asciiincluded);cargo xtask manifest --checkandcargo xtask check-crate-edges(exit 0).Test inventory against
origin/main(leaf names of dash-tui and dash-collectors tests): 1180 before, 1166 after. Removed are the 13skills::tests::*tests and the twoagent::tools::teststests that pinned the retired tools (skill_tools_expose_both_demo_skills,skill_tool_names_registered_in_skill_names); added isagent::tools::tests::retired_skill_registry_tools_are_not_advertised. Inagent::clients::tests::run_agent_request_registers_tool_sets_and_enforces_turn_limitthe registry-size pin drops from six to four and the set of tool names in the request actually sent to the model is asserted equal to the union of the three name tables (which rules outlist_skillsandskill_planand any tool registered outside the tables). Both new assertions were shown to fail: renamingTokensPerWattTool::NAMEtolist_skillsturned the tools test red, and temporarily registering a stand-inlist_skillstool turned the wire-level test red; both edits were reverted.Coverage:
cargo xtask coveragemeasures the whole workspace, which I did not run; instead I measuredcargo llvm-cov -p rocm-dash-tuionorigin/mainand on this branch with the same flags the xtask uses. dash-tui line coverage was 91.89% before and 91.82% after (26728/29086 vs 26404/28755 lines), against a committed floor of 89.33% with a 0.2pp tolerance, so no re-bless. The workspace-wide check is left to CI.Not run:
cargo clippy -p rocm-dash-tui --target x86_64-pc-windows-msvc. The cross-check fails in theaws-lc-sysbuild script (it needs a Windows C toolchain that is not installed here), before reaching this crate; nothing in the diff iscfg(windows)-gated, andskills.rswas not gated either. The Windows CI job covers it. Also not run:cargo xtask e2eand the full workspace gate, which CI carries.User-visible behaviour
The set of tools the assistant advertises to the model changes:
list_skillsandskill_planare gone, leaving the four telemetry tools plus the existing ROCm read and mutating tools. No Gherkin scenario applies. I searchedtests/e2e-cucumber/featuresand the step definitions: nothing pins the dashboard assistant's tool set. Scenario chat-06 (@id:chat-tool-definitions-accepted) attaches a client-suppliedgpu_statusdefinition to a request for a served model and checks that such a request is accepted; it does not see the dashboard's registry. Thedash.featurechat scenarios (for example dash-02) run against the CLI's--chat-mockoffline assistant, which does not build the Rig tool list. The advertised set is only observable in the request sent to a model, and that is asserted in the unit test above, which uses a recording mock completion model and checks the tool definitions on the wire.docs/llm-tool-use.md,skills/rocm-cli-assistant/SKILL.mdanddocs/architecture.mddo not mention either tool orskills.rs, so no text in them needed to change.Notes for reviewers
Read the commits in order. The first removes the two tools from the agent (registry, registration, tests) and compiles and passes on its own with
skills.rsstill present. The second deletesskills.rsand the fixture, moves the endpoint constants intollm.rs, and drops the now-unusedrocm-depsdependency with its allowlist entry and lockfile line. The third fixes the two stale comments. The fourth tightens the wire-level registry test inagent/clients.rsto compare the exact set of tool names sent to the model withSKILL_NAMESplus the read and mutating ROCm name tables (re-registering alist_skillstool turns it red), and corrects one call-site comment.The ticket also asked for the
docs/architecture.mdentries that mention the module to be updated; there are none (the module was never listed there), so that file is untouched. The"Skill" wrapperswording foragent/tools.rsthere is still accurate for the four telemetry tools that remain.Other open pull requests touching the same files: #801 (approved) rewrites
run_rocm_read_toolinagent/tools.rsand adds tests near the end of its test module, away from the code removed here, so I expect it to merge cleanly. #881 edits a comment inagent/tools.rsdirectly afterSKILL_NAMESand the module doc ofagent/mod.rs; the first hunk sits right next to the array this change shrinks, so a trivial conflict is possible. #855 (draft) only changes example version strings in doc comments ofskills.rs(11.5.1to2026.44.1in three places); if this lands first, that hunk is moot and the file simply stays deleted, and the pin itself lives inrocm-deps, which this change does not touch. #631 edits the header and imports ofcrates/rocm-dash-collectors/src/lemonade.rsand keeps the same comment this change rewrites in its context, so check that file if it conflicts. #447 and #563 edit neighbouring lines ofcrate_edges.rsand the dev-dependencies ofrocm-dash-tui/Cargo.toml, #817 and #521 other entries of the ASCII-contract tables, none overlapping.