Repository navigation
fix(star): self uninstall removes only the extensions it installed - #919
Merged
David-Noble-at-work merged 5 commits intoSep 22, 2026
Merged
Conversation
) The extensions directory is shared -- the loader probes one path, so writ's deployment of the base layer's com.noblefactor.ops.GitHub lives beside star's own. installStarExtensions reported every file in that directory as installed, so star's manifest claimed files it never placed, and the post-uninstall hook then removed the whole directory with RemoveAll, manifest or no manifest. Either one deleted another installer's extensions. The install now lists what it copied, walking the source. The uninstall hook is gone: with an honest manifest the generic uninstall removes exactly star's files, skips any that changed, and prunes the directories that empty. Three tests cover it, and they fail against the old hooks.
David-Noble-at-work
deleted the
fix/917-uninstall-removes-only-what-it
branch
September 22, 2026 21:10
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.
Summary
Lane 14 of NobleFactor/noblefactor-ops#217.
star self uninstallpromises manifest-driven removal -- "removes onlyfiles that have not been modified since installation" -- and its extensions hook broke that promise on both sides of
the manifest.
installStarExtensionsreturnedcli.CollectFiles(prefix, targetExtDir): every file in the shared extensions directory, whoever put it there. Thoseentered star's manifest as star's own.
os.RemoveAllon the whole directory.The directory is shared by design: the loader probes one path, so writ's deployment of the base layer's
com.noblefactor.ops.GitHublives beside star's own extensions. Either defect alone deleted it, leaving writbelieving it had deployed and
star gh issues reportunable to resolve.The fix is mostly deletion. Install now lists what it copied, walking the source. The post-uninstall hook is gone:
with an honest manifest the generic uninstall removes exactly star's files, skips any that changed, and prunes the
directories that empty.
Also here: #903's Phase 3 record, owed since lane 7. The release from
developcarriesstarand its 23extensions in all six archives, and
install.ps1installed it on DANOBLE-WD11-3.star devloreresolves;star gh issues reportdoes not, because the base layer's extension callsshell.exec, which runssh -con a hostthat keeps no
shon PATH -- the rewrite #799 and #801 describe.Next, in lane 15: #918, star's data belongs under
devlore/like writ's. With an honest manifest that movecannot take another installer's extensions with it.
Test plan
cmd/star/star/root_test.go: install records only its own files; a realself installthenself uninstallleaves a foreign extension in place and removes star's; a checkout with no extensions installsand claims nothing
develop'sroot.go-- the manifest claimsshare/star/extensions/com.noblefactor.ops.GitHub/extension.yaml, and the uninstall deletes it -- and passagainst this change
make vet,make lintandmake testpass locally;lintcaught agofmtslip, now formattedPlans: docs/plans/fix/917-uninstall-removes-only-what-it.md, docs/plans/fix/903-dist-packs-every-product.md
Resolves #917
Time
Computed by the algorithm of noblefactor-ops#188 at merge.