Claude Code First, specification version 0.1.0. The plain-language guide
Version 0.1.0. Grade R3/S2.
F407 A surface shipped to agents looked complete from its own repository while an installing consumer met it broken or missing
| Field | Value |
|---|---|
| Status | active |
| Topic | Environment, permissions, and agent-facing products |
| Grade | R3/S2 |
| Cases | roadkeep, Shio |
| Contrary | none |
| Harness facts | H8, H13; O2 (observed) |
Claim
A plugin, skill or MCP server exercised only from inside the repository that builds it passed there while failing, silently, for the consumer who installs it, and the defects were found only when the producer loaded the published artefact the way a consumer does.
Mechanism
Inside its own checkout, a session reaches the producer's files by other routes: the repository's own .mcp.json (H8), its instruction files and docs on disk, a repo-local skill. The published payload goes through the harness's loader, which drops what it cannot parse without an error (O2), and through a plugin manifest that may point elsewhere. So the producer's sessions do not see what the consumer's session sees. The remedies load the artefact as published: a pinned claude plugin validate --strict in CI (H13), and a repository that enables its own published plugin.
Observations
- roadkeep. Three defects of the published payload are recorded in the ledger: "The skill's frontmatter is not valid YAML, so the loader drops its name and description in silence" [roadkeep@91754240:docs/CHANGELOG.md#L1029],
"The MCP server is declared and no tool reaches the client" [roadkeep@91754240:docs/CHANGELOG.md#L978], and "The published payload carries this repository's own CLAUDE.md" [roadkeep@91754240:docs/CHANGELOG.md#L1028]. The first is also the commit "invalid YAML frontmatter caused the loader to drop essential metadata" [roadkeep@f79ca3b4]. CI now runs claude plugin validate --strict at a pinned CLI version, "2.1.220" [roadkeep@91754240:.github/workflows/gate.yml#L71], with the reason "RK331 shipped broken" [roadkeep@91754240:.github/workflows/gate.yml#L9-L12].
- shio. The repository published a marketplace with four skills while its own settings
enabled only roadkeep, so the skills "were published by, and never loaded in, the repository that wrote them" [shio@d1853cbea], and "every breakage in them arrived as somebody else's report" [shio@d1853cbea]. The remedy (SH949, 2026-09-13) enables the published plugin in the producing repository and a test holds that "No name may appear on both" [shio@821f18d74:agents.md#L93-L94] sides, checked in [shio@821f18d74:claude-plugin/test/plugin.test.mjs#L291]. Five weeks earlier the same gap had been named for discoverability: "the reader with the repository mounted is not the reader who installs (SH605)" [shio@7820e57a7], since every measurement so far had "agents.md, docs/agents and a repo-local skill on disk" [shio@7820e57a7].
Independence
Two independent origins. roadkeep's defects are in its own plugin payload and its remedy is its own CI step. Shio's is its own plugin and its own settings, and neither project's record cites the other for this.
Counter-evidence
None found at the pins against the claim. Two projects assert the discoverability half without a recorded incident, so they are not counted: freewilly's DD32, "An agent meeting this machine has no way to know the surface exists, so it reaches for docker" [freewilly@c1c2eaf:docs/CHANGELOG.md#L192], shipped as a design task with a test [freewilly@c1c2eaf:tests/FreeWilly.Preflight.Tests/AgentDiscoveryTests.cs#L10]; and winwright's WW495, "an agent renders three pages to learn what the tool is" [winwright@861b82e:docs/CHANGELOG.md#L535], which the commit argues from design rather than from an observed session [winwright@6962bce]. polyweave's filed discoverability tasks are outside its pin. Neither remedy (roadkeep's strict validation, Shio's collision test) is recorded as having failed since it was added.
Grade
R3: two independent origins in two projects. S2: the defects are dated ledger entries and commits; nothing counted how many consumers met them, and the checks that now encode the remedy are not recorded as having failed.