fix(bindings): refuse cross-repo custom-skill name collisions - #114
Merged
Conversation
Ruled 2026-08-01 (sideshow#110): every registered repo's custom skills share the one user-wide serving surface, and on a name collision the winner was registry order, silently — a user in the losing repo editing their own skill never saw the edit take effect and got no signal why. Two registered repos declaring the same skill name now refuse the sync with an error naming the skill and both repos, before anything is written; one repo renames the skill or unregisters as a source. Matches the repo-bindings channel's content-collision refusal. The pack-owned-name shadow keeps its warn-and-skip: pack content legitimately owns its names. Sync also stops downgrading a custom-source discovery error to a warning; an unreadable source registry fails closed instead of serving a silently reduced set. Closes #110
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.
Implements the #110 ruling: two registered repos declaring the same custom skill name refuse the sync with an error naming the skill and both repos, before anything is written. Previously the winner was registry order, silently: a user in the losing repo editing their own skill never saw the edit take effect (measured in the aae-orc#154 consumer round, where syncing from beta served alpha's content).
Scope choices: matches the repo-bindings channel's content-collision refusal; pack-owned-name shadowing keeps its existing warn-and-skip since pack content legitimately owns its names. A custom-source discovery error also now fails the sync closed instead of downgrading to a warning.
The collision refusal blocks the whole sync (including version flips) until one repo renames or unregisters; that strictness is the ruling. Tests: cross-source collision refuses naming both repos; the prior winner-picks test updated; suite and lint clean.