Skip to content

Let a project be removed from the launcher - #112

Merged
ntatschner merged 2 commits into
mainfrom
project-remove
Sep 24, 2026
Merged

ntatschner merged 2 commits into
mainfrom
project-remove

Conversation

@ntatschner

Copy link
Copy Markdown
Owner

You couldn't remove a project from the launcher, and loadout project remove didn't really remove one either.

What was wrong

The project list is read from the shared workspace registry. loadout project remove x without --from-workspace only forgets this machine's path, so the project stayed on the list, marked "not on this machine", while the command printed Removed x and exited 0. Reproduced in a sandboxed home:

--- remove
Removed repo (the repository itself was not touched)
exit 0
--- list after
      Project   Agent    Location
      repo      claude   not on this machine

The launcher screen had no remove at all. The teams screen and the manager both have one.

What this changes

  • Launcher: Delete on the project list, or Registry > Remove the selected project…, asks first and then runs project remove <slug> --from-workspace --non-interactive through the same parser as the command line. It removes from the workspace because that's what taking it off the list means. The question says this reaches every machine sharing the workspace, and that the repository, instructions and memory aren't touched. Delete is bound to the list only, so it still deletes characters in the filter. It's also listed on the ? panel.
  • Command line: a removal without --from-workspace now says what actually happened: it forgot where the project is on this machine, the project is still in the shared registry and so still listed, and here's the --from-workspace command. The behaviour hasn't changed; only the report was wrong.

Evidence

  • Full suite on origin/main plus this change: 3338 passed, 0 failed, 22 skipped.
  • LauncherRemoveTests presses the real keys. ProjectRemoveContractTests runs the built CLI and checks project list --json afterwards.
  • Each new test fails under a mutation: removing the binding, ignoring the answer, restoring the old wording.
  • A test checking that Delete in the filter doesn't remove was dropped. The text field consumes Delete before any window binding, so it passed even with the key bound window-wide.

Not verified

  • The confirmation dialog itself. As on the teams screen, a dialog waiting on a keypress can't be driven headlessly; the tests inject the answer.
  • Delete in a real Windows console.

Nigel added 2 commits September 24, 2026 18:50
…removal "Removed"

There was no way to remove a project from the launcher screen, and the
command line's way did not do what it said. The project list is read
from the shared workspace registry (ProjectService.ListAsync), so
'loadout project remove x' without --from-workspace forgets only this
machine's path: the project stays on the list, shown as "not on this
machine", while the command reports "Removed x" and exits 0. Reproduced
in a sandboxed APPDATA/LOCALAPPDATA: add, remove, list - still listed.

The command line: a removal without --from-workspace now says it forgot
where the project is on this machine, that it is still in the shared
registry and so still listed, and gives the --from-workspace command.
Behaviour is unchanged; only the report was wrong.

The launcher: Delete on the project list, and Registry > Remove the
selected project, ask first and then hand back
'project remove <slug> --from-workspace --non-interactive' through the
same parser as the command line, as the teams screen's forget key does.
From the workspace because that is what taking it off the list means;
non-interactive because the dialog has already asked, and the command
would otherwise ask again. The question says it reaches every machine
sharing the workspace, and that the repository, instructions and memory
are not touched. Bound on the list only, so the filter keeps Delete.

Tests: LauncherRemoveTests drives the real keys (Delete asks, names the
project under the cursor, hands back the command; a no hands back
nothing). ProjectRemoveContractTests runs the built CLI: a local removal
leaves the project listed and says so; --from-workspace takes it off.
Each was mutation-checked - removing the binding, ignoring the answer,
and restoring the old wording each fail the covering test. A test that
Delete in the filter does not remove was dropped: the text field
consumes Delete before any window binding, so it passed even with the
key bound window-wide and guarded nothing.

Not verified: the confirmation dialog itself (a dialog waiting on a
keypress cannot be driven headlessly, as on the teams screen), and
Delete in a real Windows console.
@ntatschner
ntatschner merged commit a9fa590 into main Sep 24, 2026
13 of 14 checks passed
@ntatschner
ntatschner deleted the project-remove branch September 24, 2026 18:19
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.

1 participant