Description
vettd directory download <slug> resolves skills by their public slug, a field explicitly documented as non-unique across the public directory (packages/db/prisma/schema.prisma in the sibling vettd repo: "cosmetic display label; may collide across skills, not routed on"). The server's collision resolution (getSkillBySlug in packages/api/src/directory/directory.ts) is a findFirst with no orderBy, so a slug collision does not deterministically resolve to the same skill on repeat runs — the same download command can silently fetch a different asset depending on row order.
Single-word slug addressing (e.g. vettd directory download s3) also gives no visibility into which repo/owner a download will actually fetch from, which matters more as the directory grows beyond its current single-source-dominated state.
No active user impact has been reported, but this is a real non-determinism, not just an ambiguous name. Raised as a backlog follow-up during review of #169 (epic #176).
Scope
- Decide how
vettd directory download should disambiguate a skill identifier beyond a bare slug.
- Decide whether slug-collision resolution needs to become deterministic (or explicitly rejected) independent of any addressing change.
- Cross-repo: touches AgenticHighway/vettd (
resolveSkillDownload / getSkillBySlug) and AgenticHighway/vettd-cli (the directory download command's identifier parsing/CLI surface).
Acceptance Criteria
Description
vettd directory download <slug>resolves skills by their publicslug, a field explicitly documented as non-unique across the public directory (packages/db/prisma/schema.prismain the siblingvettdrepo: "cosmetic display label; may collide across skills, not routed on"). The server's collision resolution (getSkillBySluginpackages/api/src/directory/directory.ts) is afindFirstwith noorderBy, so a slug collision does not deterministically resolve to the same skill on repeat runs — the same download command can silently fetch a different asset depending on row order.Single-word slug addressing (e.g.
vettd directory download s3) also gives no visibility into which repo/owner a download will actually fetch from, which matters more as the directory grows beyond its current single-source-dominated state.No active user impact has been reported, but this is a real non-determinism, not just an ambiguous name. Raised as a backlog follow-up during review of #169 (epic #176).
Scope
vettd directory downloadshould disambiguate a skill identifier beyond a bare slug.resolveSkillDownload/getSkillBySlug) and AgenticHighway/vettd-cli (thedirectory downloadcommand's identifier parsing/CLI surface).Acceptance Criteria
<slug>argument shape (breaking vs. additive)