Conversation
xsh310
added this pull request to stack #576
September 12, 2026 18:38
xsh310
commented
Sep 12, 2026
xsh310
commented
Sep 12, 2026
xsh310
force-pushed
the
skills-download-remove
branch
from
September 12, 2026 18:53
afbe344 to
0dab5b7
Compare
xsh310
commented
Sep 12, 2026
xsh310
force-pushed
the
skills-download-remove
branch
from
September 12, 2026 19:02
0dab5b7 to
858ef09
Compare
xsh310
marked this pull request as ready for review
September 12, 2026 19:25
xsh310
force-pushed
the
skills-download-remove
branch
from
September 13, 2026 00:22
858ef09 to
3d39669
Compare
xsh310
marked this pull request as draft
September 13, 2026 00:23
xsh310
force-pushed
the
skills-download-remove
branch
from
September 13, 2026 00:46
3d39669 to
3d336ef
Compare
xsh310
force-pushed
the
skills-download-remove
branch
from
September 13, 2026 01:04
3d336ef to
721b50f
Compare
xsh310
marked this pull request as ready for review
September 13, 2026 01:10
xsh310
force-pushed
the
skills-download-remove
branch
from
September 14, 2026 03:08
721b50f to
39ad41b
Compare
xsh310
force-pushed
the
skills-download-remove
branch
from
September 14, 2026 20:09
39ad41b to
c9b26aa
Compare
| if not records: | ||
| return | ||
| for record in records: | ||
| _delete_dirs(record.get("dirs") or []) |
Collaborator
There was a problem hiding this comment.
P2: remove_downloads deletes the on-disk dirs first, then forget() rewrites the manifest. If _save fails after deletion (disk full, etc.), the files are gone but their records remain → phantom entries pointing at deleted dirs on the next run. Also, _delete_dirs uses shutil.rmtree(..., ignore_errors=True), so a dir that's a symlink is silently skipped yet still forget()-ten — the link lingers with no signal. Both are minor; consider forgetting-then-deleting, or at least noting undeletable paths.
xsh310
force-pushed
the
skills-download-remove
branch
from
September 14, 2026 22:32
c9b26aa to
3a7492a
Compare
xsh310
force-pushed
the
skills-download-remove
branch
from
September 14, 2026 23:20
3a7492a to
acf23eb
Compare
xsh310
force-pushed
the
skills-download-remove
branch
from
September 15, 2026 00:53
acf23eb to
fb6c3e8
Compare
xsh310
force-pushed
the
skills-download-remove
branch
2 times, most recently
from
September 15, 2026 01:41
c48fb8f to
3186994
Compare
xsh310
force-pushed
the
skills-download-remove
branch
from
September 15, 2026 03:30
3186994 to
00b0da6
Compare
xsh310
force-pushed
the
skills-download-remove
branch
from
September 15, 2026 03:40
00b0da6 to
98a2cac
Compare
Wire the download side of `ug skill remove`, which until now errored with "not supported yet", mirroring `ug skill add`'s surface: - `ug skill remove --location <catalog.schema>` deletes every skill downloaded from that schema (all bases, or one with `--path`). - `ug skill remove --skills <fqn>[,<fqn>...]` deletes named fully-qualified skills that may span schemas. - Bare `ug skill remove` opens a picker over every downloaded skill across all bases, labeled by scope and base, and flagged `(missing)` when the directory is already gone. Removal is driven entirely by the attribution manifest, so a same-named skill the user authored is never touched. Deletion lives in skills_state.remove_downloads; the CLI and picker live in skills_download alongside the download flows they mirror. Co-authored-by: Isaac <no-reply@databricks.com>
xsh310
force-pushed
the
skills-download-remove
branch
from
September 15, 2026 04:42
98a2cac to
7dbb63c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Wire the download side of
ug skill remove(until now it errored with "notsupported yet"), mirroring
ug skill add's surface. Builds on #584, which recordswhat was downloaded from Unity Catalog.
Why
With the attribution manifest in place, ucode can finally delete downloaded skills
safely: removal is driven entirely by attribution, so a same-named skill the user
authored themselves is never touched. That safety is the reason this could not ship
before the manifest.
Behavior
ug skill remove --location <catalog.schema>deletes every skill downloaded fromthat schema, across all download bases;
--pathlimits it to one base.ug skill remove --skills <fqn>[,<fqn>...]deletes named fully-qualified skillsthat may span schemas (parity with
ug skill add --skills).ug skill removewith none of those opens a picker over every downloaded skill,across all bases, each row labeled
<fqn> (<scope>: <base>).--mcpremoval is unchanged;--agentsremains--mcp-only, and--location/--path/--skillsare rejected with--mcp.Changes
skills_state.remove_downloadsdeletes each record's directories, then forgets it;records_for_fqnslooks records up by fully-qualified name.remove_downloaded_skills_commandand the removal picker live inskills_download,next to the download flows they mirror.
ug skill removegrows--location,--path, and--skills.Testing
uv run ruff check,ruff format --check,ty check src, anduv run pytestallpass (the pre-existing
test_e2e_user_agent/test_claude_smart_routing_v2failures also fail on the base). Added unit coverage for
remove_downloadsandrecords_for_fqns, the by-location / by-name / picker removal paths (including thata user-authored directory is left alone), and the CLI routing and argument validation.
Screen.Recording.2026-09-12.at.12.17.52.PM.mov
Stack
Part of gh stack #576, on top of #584 (
skills-download-attribution).This pull request and its description were written by Isaac.