Folder-name slug collisions yield mangled '-ill-md' slugs and indistinguishable duplicate search rows (29 of 159 sampled)
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 48/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 活跃
- 技术栈
- typescript
调研方向
Start in apps/web/app/lib/github/fetch-github-skill.ts around lines 149 and 159, then compare the corresponding scan path in scan-github-repo.ts. Trace how colliding slugs are registered, rendered by search, and resolved by the CLI, including the source of the observed -ill-md suffix. Re-run skillx search "ui ux design" and GET /api/search?q=ui%20ux%20design; done means distinct stable identifiers and distinguishable results for both skills.
由索引模型根据 Issue 内容生成。
描述
Searching for ui ux design returns two rows that render identically, with nothing to tell them apart:
SKILL CATEGORY RATING
YPYT1/ui-ux-pro-max testing ⭐ 6.0
YPYT1/ui-ux-pro-max testing ⭐ 6.0
Reproducible on every run (3/3), via both skillx search "ui ux design" and GET /api/search?q=ui%20ux%20design.
They are not duplicates — they are two different skills that collided
The API returns 20 distinct slugs; the collision is in what gets displayed:
| slug | source_url |
created |
|---|---|---|
ypyt1-ui-ux-pro-max |
…/All-skills/tree/main/skills/_local/clawd-skills/ui-ux-pro-max |
2026-02-12T13:12:21Z |
ypyt1-ui-ux-pro-max-ill-md |
…/All-skills/tree/main/skills/ui-ux-pro-max |
2026-02-12T13:14:56Z |
Both live in YPYT1/All-skills under folders named ui-ux-pro-max, at different depths. Registration two and a half minutes apart, i.e. one scan pass over the repo.
Root cause: the slug carries no path information
apps/web/app/lib/github/fetch-github-skill.ts:159
const slug = `${owner}-${skillName}`.toLowerCase();
where skillName is only the last path segment (fetch-github-skill.ts:149, and identically scan-github-repo.ts for the scan path, which takes the parent folder name). Two skills in one repo whose folders share a name therefore produce the same slug, and name + author — the two fields the table renders — are identical as well.
The second registration was given the suffix -ill-md, which looks like SKILL.md with its first two characters lost. I could not locate the code that produces that suffix, so I am reporting the string as observed rather than guessing at the mechanism — but whatever writes it, -ill-md is not a meaningful disambiguator, and it becomes part of the skill's permanent public identity.
Not an isolated record
Sampling the marketplace through /api/search across 8 queries (ui ux design, testing, react, database, security, documentation, agent, python) surfaced 159 distinct skills, of which 29 carry an -ill-md slug — roughly one in five. Examples:
hookvibe-ui-ux-pro-max-ill-md
jeremylongshore-cloud-security-posture-ill-md
jeremylongshore-database-schema-designer-ill-md
leenbaksh-database-skill-ill-md
practical-stack-meta-agent-ill-md
Creation timestamps for the mangled and the normal records span the same window (2026-02-12 – 2026-02-13), so this does not look like a single bad batch.
Impact
- Search results contain rows a user cannot distinguish or choose between.
skillx use author/skillresolves two-part identifiers to the slugauthor-skill, so it silently reaches only whichever record won the clean slug; the other is addressable only by its mangled slug.- The mangled string is the skill's public identity — in URLs, in
skillx use, and in anything that has already linked to it — so fixing it later is a rename with breakage attached.
Suggested direction
Derive the slug from the full skill path rather than the leaf segment (e.g. owner-skills-local-clawd-skills-ui-ux-pro-max vs owner-skills-ui-ux-pro-max), or keep the leaf and append the distinguishing path segment on collision. Either way the disambiguator should come from the path that actually differs, not from the filename. Rendering the distinguishing part of source_url in the results table would also let a user pick between two same-named skills.
Found while exercising the CLI against the live marketplace; slug construction verified against the repo at main.
- 主要语言
- TypeScript
- 星标
- 189
- 派生
- 40
- 平均合并
- 7 小时 38 分钟
- 30 天内合并 PR
- 30
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
nextlevelbuilder/skillx 的其他 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 88/100
nextlevelbuilder/skillx#49 ·
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 76/100
nextlevelbuilder/skillx#28 ·
维护者通常 1 天内回复
-
refactor
难度 2/5 1-3 小时 新手友好度 82/100
nextlevelbuilder/skillx#27 ·
维护者通常 1 天内回复
-
Personal-kit API gaps for AgentKit kit publish/sync可能已有人在做 @mrgoonie 于 1 天前认领。 未关闭
nextlevelbuilder/skillx#88 · 1 条评论 · 已指派 1 人 ·
维护者通常 1 天内回复
-
enhancement
难度 5/5 一周以上 新手友好度 12/100
nextlevelbuilder/skillx#81 ·
维护者通常 1 天内回复
查看 nextlevelbuilder/skillx 的全部 Issue
相似的 Issue
-
难度 1/5 1-3 小时 新手友好度 75/100
siyuan-note/siyuan#20629 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
Volume eject does not refuse system, root or /home mounts可能已有人在做 @bernardopg 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 72/100
spacedriveapp/spacedrive#3159 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 76/100
melgarafael/DeskcommCRM#3000 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 70/100
callstackincubator/simlock#639 ·
维护者通常 1 天内回复