Repository navigation
fix(extensions): reject aliases that resolve to installed skill names - #5134
chelsealong wants to merge 1 commit into
Conversation
|
Thanks for addressing this—the reported overwrite and removal behavior is a real bug. However, this change also rejects extension combinations that were previously accepted, including during updates and forced reinstalls, so we should not merge the hard failure without a compatibility transition. Could you open a tracking issue and sequence this across three PRs: first a deprecation warning while still allowing installation, then rejection by default with an explicit override, and finally a hard failure without an override? This PR could become the first stage, with the remaining two linked to the tracking issue. Throughout the transition, installation and removal must preserve another extension’s files; allowing installation should not mean allowing destructive overwrites, and any conflicting alias left unregistered should be clearly reported. The tracking issue should also define which output layouts actually collide, how existing installations and updates are handled, and whether the override should reuse |
Description
Fixes #5081. Normalize installed extension command and alias names when checking a new extension for conflicts. This rejects names such as
shared.syncandshared-syncthat would produce the same skill file. Updated the extension design document to describe the behavior.The regression test confirms that a conflicting install is rejected and the first extension’s skill file remains unchanged. It fails against the base source and passes with this patch.
Testing
.venv/bin/specify --helppassed.srcandtests: zero findings.git diff --checkpassed.AI Disclosure
AI disclosure: Codex (GPT-6, default reasoning settings, autonomous) authored the code, regression test, and documentation update and ran the checks reported above. No human review or testing is claimed.