Skip to content

research: probe two registry properties a per-skill scan cannot see - #62

Merged
Ap6pack merged 1 commit into
mainfrom
claude/registry-integrity-checks
Sep 12, 2026
Merged

Ap6pack merged 1 commit into
mainfrom
claude/registry-integrity-checks

Conversation

@Ap6pack

@Ap6pack Ap6pack commented Sep 12, 2026

Copy link
Copy Markdown
Owner

Where this came from

Clustering the 78,233-skill snapshot by content_sha256 (no new scanning, data already on the registry-snapshots branch) surfaced two things:

skills:                78,233
  no content hash:      2,033
distinct hashes:       73,310
hashes seen >1 time:    1,729
skills in a dupe set:   4,619   (5.9%)

And the 2,033 without a hash are not scan failures:

HTTP 409  AMBIGUOUS_SKILL_SLUG   1,614
HTTP 404  (no code)                419

The two questions

1. Who owns the contested slugs? 1,614 slugs are claimed by more than one publisher. The API refuses to resolve them, replying "Found multiple skills with the slug X; specify which one you want to install". 1password is among them. These 1,614 are every skill this project has no verdict for at all, and they are not a random 2% of the registry: they are specifically the names more than one person wanted. The snapshot truncates the error body at ~300 chars so only the first ownerHandle survives, which is why this has to be re-fetched.

2. Do duplicates actually ship the same package? content_sha256 covers SKILL.md only. Two skills with identical documentation can ship different code. If they do, "byte-identical duplicate" is the wrong phrase and any claim about takedown blast radius built on it is wrong too. This fetches each clone's referenced files and compares their hashes.

What this is not

Neither mode convicts anything. Both report structure, deliberately: a claim about registry shape shouldn't depend on the rule engine being correctly calibrated, and the last week has been a sustained argument for why that matters. Four divergence leads read, four withdrawn, all false positives of our own making.

One design note

report_clones prints NO DATA for clusters where every fetch failed, and refuses to print a summary at all if that's every cluster:

summary: 0 identical, 0 divergent, 0 with no referenced files, 2 unreachable

Every cluster failed to fetch. This says nothing about the
registry -- it says the run had no network reach. Not a result.

Verified by running it from the sandbox, which can't reach clawhub.ai. Without that, an offline run and a genuinely clean registry produce the same output.

Ruff clean, compiles, cluster loading smoke-tested offline against the live snapshot.

🤖 Generated with Claude Code

https://claude.ai/code/session_01DNoTXU8k3pfSBzR7aJubqL


Generated by Claude Code

Clustering the 78,233-skill snapshot by content_sha256 turned up two facts
that need closing before either can be stated.

1,614 slugs return HTTP 409 AMBIGUOUS_SKILL_SLUG: more than one publisher
owns the name and the API refuses to resolve it, answering "specify which
one you want to install". Those 1,614 are every skill this project has no
verdict for, and they are not a random 2% of the registry -- they are
specifically the contested names, including brand-like ones such as
"1password". The snapshot truncates the error at ~300 characters, so only
the first owner survives; the full match list has to come from the
registry.

4,619 skills (5.9%) share a content_sha256 with another skill, across 1,729
duplicated hashes. That hash covers SKILL.md alone. Two skills with
identical documentation can still ship different code, and if they do then
"byte-identical duplicate" is the wrong description and anything built on
it about takedown blast radius is wrong too.

Neither mode convicts anything. Both report structure, which is the point:
a claim about registry shape should not depend on the rule engine being
correctly calibrated, and this week has been a long argument for why.

The clone check reports clusters that fetched nothing as NO DATA rather
than folding them into a zero. A check that answers the same way whether
or not the registry was reachable is worse than no check.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DNoTXU8k3pfSBzR7aJubqL
@Ap6pack
Ap6pack merged commit 0166105 into main Sep 12, 2026
5 checks passed
@Ap6pack
Ap6pack deleted the claude/registry-integrity-checks branch September 12, 2026 00:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants