Skip to content

RFD for symposium uninstall - #278

Open
gmemuriuki wants to merge 4 commits into
symposium-dev:mainfrom
gmemuriuki:rfd/symposium-uninstall
Open

RFD for symposium uninstall#278
gmemuriuki wants to merge 4 commits into
symposium-dev:mainfrom
gmemuriuki:rfd/symposium-uninstall

Conversation

@gmemuriuki

Copy link
Copy Markdown
Contributor

What does this PR do?

Proposes cargo agents uninstall for removing Symposium-managed integrations before cargo uninstall symposium.

Design covers:

  1. Receipt backed backend
  2. Project permits and global retirement tombstones
  3. Missing binary hooks guards
  4. Bounded cleanup without filesystem scan
  5. Dry-run, blockers, shared, acknowledgements, retries, and recovery
  6. User, tracked, shared, and ambiguous state preservations

RFD split into focused ownership, hook activation, cleanup engine, command references, and managed integrations chapters.

Disclosure questions

AI disclosure.

  • The AI tool authored large parts of the code

Questions for reviewers.

gmemuriuki and others added 3 commits August 17, 2026 13:43
Define receipt-backed ownership, guarded hooks, bounded cleanup, legacy migration, reporting, and the implementation plan.
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
@gmemuriuki gmemuriuki changed the title Rfd/symposium uninstall RFD for symposium uninstall Aug 20, 2026
POSIX portable project:

```sh
if [ -x ${CARGO_HOME:-$HOME/.cargo}/bin/cargo-agents ]; then exec ${CARGO_HOME:-$HOME/.cargo}/bin/cargo-agents hook <AGENT> <EVENT> --managed-id <UUID>; elif command -v cargo-agents >/dev/null 2>&1; then exec cargo-agents hook <AGENT> <EVENT> --managed-id <UUID>; else exit 0; fi

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

careful here, a path with spaces will break, say the username is "John Doe" instead of a more classical "johndoe"


Implementation has not begun. The steps are dependency-ordered.

### Step 1: Establish ownership primitives

@Fluzko Fluzko Aug 24, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This step won't ship anything and seems huge, so feels a bit untestable. What about shipping an e2e solution for one specific agent, say Claude?

- unavailable or indeterminate Git tracking preserves the file as a blocker; and
- reports identify the file and structural locator without secrets.

Acknowledgement may transfer an entry to the user. It cannot make a live unguarded `cargo-agents` hook or MCP invocation safe for package removal. That reference must be removed manually or with `--include-tracked`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hooks are saved as a shell command, so the guard fits around them. MCP entries are saved as command plus args and run directly, so there is no place for a guard. After cargo uninstall symposium, every stale MCP entry fails to start in every agent, which is the error the Motivation section opens with.

The plan is "run cargo agents uninstall first", but Motivation says people go straight to cargo uninstall symposium today. Once that's done the cleanup tool is gone and it's not clear to me what to do next.

Can we get the recovery steps written down, and a line on why MCP entries do not get a guard? Also I feel worth moving into Drawbacks, since Scope lists hooks and MCP together and reads like both are covered.

Comment on lines +87 to +93
## Acknowledging a blocker

`--acknowledge <BLOCKER-ID>` preserves an artifact and transfers responsibility to you. The report gives its location and a redacted manual edit. This is not `--force` and never weakens ownership checks.

The ID stays stable for the same artifact kind, adapter, normalized target, and structural location. Changing the artifact invalidates the acknowledgement.

An unguarded hook or MCP server that still launches `cargo-agents` cannot be acknowledged into a ready result. Remove that live reference before uninstalling the package.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure this is super useful. I think it should just be --force.

Comment on lines +129 to +141
## Blockers and acknowledgements

A blocker ID is stable over:

```text
artifact type + adapter + normalized target + structural locator
```

The acknowledgement stores that locator and the artifact's current identity, not only its display ID. Moving the locator creates a new blocker; changing the artifact invalidates acknowledgement.

Acknowledgement preserves the artifact, records user responsibility, retires Symposium's claim, prints a redacted manual edit, and makes later installation treat the occupied slot as a structural collision.

Successful finalization may delete acknowledgements because collision detection inspects the occupied entry. There is no `--force`: bypassing identity checks could delete user or third-party state.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should just not do this. If uninstall isn't possible "safely", then the user should pass --force. I don't think it makes a lot of sense to not have an "all or nothing"

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