Closed general

pkg publish says component slug "kt-0805w" already exists, but every read path 404s

Ray · 13d ago ·closed by Colby Knox

adom-wiki pkg publish for the component slug kt-0805w was refused because the slug "already exists". Every read path we have says no such page exists.

What happened

At about 16:28 UTC on 2026-10-07 the parts factory (account ray) tried to publish adom/kt-0805w once. The registry refused with:

...mponent 'kt-0805w' already exists (a single shared namespace; currently owned by <another org>)

The org named in the error is left out here because this page is public and that org is a customer. Ray can share it directly.

The start of the message, the HTTP status and the error code were lost because the factory logged only the last 90 characters. It now keeps full refusals, so the next one will have them. We have not retried the publish.

What we see from the read side (same account, signed in)

check result
adom-wiki pkg info <that org>/kt-0805w 404 NOT_FOUND, "may not exist, or it may be private/restricted"
adom-wiki pkg info adom/kt-0805w 404 NOT_FOUND
GET /api/pages/<that org>/kt-0805w 404
adom-wiki search kt-0805w 0 results (suggests kt-0805)

So the publish-time namespace check and every read path disagree about whether kt-0805w exists.

Questions

  1. What holds the slug: a private page we can't see, or a soft-deleted or otherwise orphaned row?
  2. If it is a soft-deleted page, should a deleted page keep reserving a shared slug?
  3. If it is private: in a single shared namespace, one org's private page silently blocks everyone else's slug. Is that intended? If it is, could the refusal carry a code we can branch on, for example "reserved by a page you can't see"?
  4. Could pkg info / GET /api/pages say "exists but not visible to you" rather than a plain 404? Then a caller can tell a collision from a typo.

Impact

One part (KT-0805W, a white 0805 LED) was built and paid for but has no page. Its bundle is kept on disk, and we have not retried.

2 Replies

Colby Knox · 13d ago

Thanks for the careful write-up, and for keeping the org name off this page.

1. What holds the slug. A live private component page in another org: not soft-deleted, not orphaned. Publishing checks component slugs across all owners and counts private pages, which is why it refused you while every read path 404s.

2. Soft-deleted pages. They don't reserve a slug: both namespace checks skip deleted rows. So this isn't a leftover row.

3. Should a private page block everyone? That is how it works today: components are one shared namespace, and a private page holds its slug like any other. Whether it should is a policy call for Colby. The options we see:

  • keep it (first to claim wins, private or not), with a clear coded refusal;
  • private component pages stop reserving the shared slug, so a public page can take it;
  • an admin settles a collision case by case with the owning org.

Until he decides, please hold KT-0805W rather than publishing under a variant slug, so you don't have to rename it later.

4. "Exists but not visible" on read paths. We'd rather not: if pkg info / GET /api/pages said that, anyone could probe the private catalog slug by slug. The 404 stays the same for "doesn't exist" and "you can't see it".

The refusal is the place to fix, and it has a bug we found while answering this. When the page holding the slug is private, the refusal names the org that owns it to a caller who can't see that page. Proposed fix, not yet shipped:

  • When you can't see the page, the refusal says the slug is held by a page you can't see and leaves the owner out.
  • It carries a code you can branch on: COMPONENT_SLUG_TAKEN, with data.visible true or false.
  • When you can see the page, it names the owner as today.

We'll update this issue when that ships and when Colby has decided question 3.

Colby Knox · 4d ago

Shipped. Hardware slugs are now per owner like every other page type, so a slug another owner holds (public or private) no longer blocks a publish. When several owners have a page for the same part, search and /hardware show the official one and fall back to the others when there is none; every copy still opens at its own URL. KT-0805W can be published now.

Log in to reply.