11# Uninstall Skill Control Flow
22
3- Status: Draft
3+ Status: Implemented
44
55## Goal
66
@@ -39,6 +39,12 @@ This document does not define:
3939- auto-starting stopped projects only to uninstall skills
4040- bulk operator tooling for failed uninstalls
4141
42+ Current phase note:
43+
44+ - the skill directory is a static local catalog
45+ - users do not create custom skills from the UI in this phase
46+ - the catalog is not yet backed by a remote marketplace or external source
47+
4248## User Intent
4349
4450When a user uninstalls a skill from the global Skills tab, the system receives
@@ -101,6 +107,10 @@ skill indefinitely.
101107For a currently running project, this normally means an ` UNINSTALL_SKILL ` task
102108can proceed immediately.
103109
110+ For the current implementation, the control plane should also proactively trigger
111+ task evaluation for projects that are already ` RUNNING ` , rather than waiting only
112+ for the next periodic reconcile cycle.
113+
104114For a stopped or otherwise non-runnable project, this means uninstall work may
105115remain pending until prerequisites are satisfied.
106116
@@ -253,6 +263,7 @@ For the current phase of the product:
253263
254264- the global Skills tab should stop showing the skill as enabled once durable
255265 uninstall state is created
266+ - the global Skills tab is backed by a static local catalog in this phase
256267- the UI should not wait for all projects to finish uninstall before reflecting
257268 the global uninstall
258269- stopped projects should not be presented as immediate uninstall failures
@@ -296,6 +307,7 @@ This currently implies the need for:
296307 - ` userSkillId `
297308 - ` skillId `
298309 - ` installCommand `
310+ - ` uninstallCommand `
299311- task result or error data that records project-level uninstall outcome
300312
301313If uninstall fails for one project, the database must still clearly reflect:
@@ -321,9 +333,11 @@ For the current phase of the product:
321333
322334- each globally enabled skill is represented by a ` UserSkill ` record that includes
323335 ` installCommand `
336+ - the static catalog also defines the ` uninstallCommand ` used for removal
324337- uninstall removes that global ` UserSkill ` desired state
325338- historical uninstall and install tasks may still retain ` installCommand ` in their
326339 payload as execution snapshots
340+ - uninstall tasks should receive ` uninstallCommand ` in their payload as an execution snapshot
327341- uninstall execution should rely on task payload and task semantics rather than
328342 attempting to rebuild prior install intent from mutable runtime state
329343
@@ -344,6 +358,8 @@ This PRD does not define:
344358Current implementation should preserve this product contract:
345359
346360- the user action removes a skill at the global user scope, not the single-project scope
361+ - the current Skills page reads from a static local catalog, not a user-authored
362+ or remote marketplace-backed catalog
347363- the removed global skill record is the ` UserSkill ` source of truth that previously
348364 held the skill's ` installCommand `
349365- project uninstall is asynchronous and should run through ` ProjectTask `
@@ -358,6 +374,10 @@ Current implementation should preserve this product contract:
358374Current codebase note:
359375
360376- ` ProjectTaskType ` already reserves ` INSTALL_SKILL ` and ` UNINSTALL_SKILL `
377+ - enable-side ` UserSkill ` persistence and ` INSTALL_SKILL ` fan-out are implemented
361378- task prerequisite evaluation already matches the desired sandbox ` RUNNING ` gate
362- - uninstall executor, task supersession rules, and global enabled-skill persistence
363- model are not yet implemented
379+ - global uninstall removes the ` UserSkill ` desired state and fans out uninstall work
380+ - pending and waiting install tasks for the same skill are cancelled when uninstall is accepted
381+ - stale install work is prevented from winning over newer uninstall intent during task reconcile
382+ - projects that are already ` RUNNING ` are triggered immediately after uninstall fan-out
383+ - uninstall executor, uninstall UI entry, and global uninstall control flow are implemented
0 commit comments