Repository navigation
docs(conventions): add the routing-as-data convention and resolve user-interface sibling detects by name - #6640
Conversation
Tests for adopting the routing-as-data convention: slash skill ids, the schema's pointer rule, own rows found without the publisher name, and detect.mjs resolving bare siblings against its own marketplace with a disclosed name-match fallback. They fail until the next commit. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…'s own marketplace Route data moves to schema version 2: kind skill ids are slash invocations, own-marketplace detects are bare plugin names, and own skill rows carry no pointer. detect.mjs finds its own marketplace from the plugin list record installed at its root, guarded per record, and falls back to a name match with a reason, reporting names a same-named third-party plugin may hold as uncertain. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… tool and release 0.2.0 The design skill reads the slash ids, drops the slash before matching the skill listing or calling the Skill tool, and discloses the name-match reason and uncertain ids once. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
The owner doc for plugins that keep routes to skills, plugins, MCP servers and tools as data: route rows, detection by name, the team routing layer and fail-open degradation. The plugin philosophy registers it and extends the cross-plugin skill rule to URLs; seam phrasing exempts third-party route-row id and detect fields. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
A bare detect on a kind: tool row names a tool, not a skill directory or MCP server, as detect.mjs resolves it. The seam-phrasing gate rule now defers to the carve-outs, which limit a third-party id to kind: plugin rows, instead of naming every third-party id field. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Claude finished @kyle-sexton's task in 6m 13s —— View job Code review in progress
|
|
Claude finished @kyle-sexton's task in 2m 3s —— View job Security review (
|
|
claude-security-review has reviewed this pull request through 9fa7dba; a later push is reviewed from there. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 60e2fcd8ca
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
claude-review has reviewed this pull request through 9fa7dba; a later push is reviewed from there. |
The detect rule said every third-party row's detect carries name@marketplace, but skill-directory, MCP-server and tool detects stay bare in the adopter's data. Scope it to detects that name a plugin, in both the routing-as-data doc and the seam-phrasing carve-out. Record the deferred axe-accessibility row as the adopter's exception, rename its test to what it checks, and drop the version test the schema test already covers. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 3m 27s —— View job Code review in progress (incremental: changes since
|
|
Claude finished @kyle-sexton's task in 1m 45s —— View job Security review (
|
…ception The deferred row is a third-party kind: plugin row, so its unqualified id breaks the id half of the rule as well as the detect half. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 9s —— View job Code review complete (incremental: changes since
|

Closes #6483
Summary
Adds
docs/conventions/routing-as-data/, the owner doc for plugins that keep routes to other skills,plugins, MCP servers and tools as data, and registers it in the plugin philosophy.
user-interfaceadopts it: own-marketplace detects are bare plugin names, every
kind: skillid is its slashinvocation, and own-skill rows carry no pointer.
One divergence from the issue: it says installed and reachable are "each true, false or null". This
convention keeps
installedas a list of row ids, ornullwith areason(interview Q3); onlyreachablevalues are true, false or null.The amended plugin-philosophy rule makes 43 existing cross-plugin skill-folder URLs in 39 files
nonconforming (36 are the
source-controlgather-block record). #6638 sweeps them; this PR does nottouch them.
Fix
<home>/<plugin>.yaml, fail-open degradation with disclosure.skill in another plugin in this marketplace, and the org-agnosticism paragraph links to it.
detect, and itsidon akind: pluginrow, are exemptfrom the marketplace-id rule.
user-interface: schemaversion2 enforces the slash id and pointer rule;detect.mjsresolves abare sibling against its own marketplace, falling back to a name match with a
reasonandreporting same-named third-party plugins as
uncertain; the design skill drops the leading slashbefore calling the Skill tool.
Verification
node --testviarouting.test.sh15/15 pass anddetect.test.sh28/28 pass (red state beforethe fix: RT 10 ok / 6 not ok, DT 19 ok / 9 not ok).
ajv-cli@5 --spec=draft2020:routing.jsonvalid; a skill id with no slash, an own-skill row witha pointer, and an external row with no pointer are each rejected.
scripts/validate-plugins.sh --only user-interface: 135 pass / 0 fail.check-changelog-parity.sh --checkand--check-bump origin/main: exit 0. markdownlint-cli2 over the changed.mdfiles:0 issues.
probe-market: resolved path not live-verified:claude plugin marketplace addtakes no name option, and the worktree's marketplace name collides with the configured GitHub
marketplace. Covered by the detect fixture tests.
detect.mjs --project .from the checkout and underclaude --plugin-dir plugins/user-interfaceboth print the installed list withreason: "own marketplace unresolved (no record at this plugin's path); matched by name".claude -p --plugin-dirstream-json run of/user-interface:designcalled the Skilltool with
user-interface:designand thenprototype:explore-directions, no leading slash.each fails a DT test.
Related
user-experience), feat(developer-experience): new plugin for a team's developer tooling (Brief confirmed) #6302 (DX), feat(user-interface): new plugin — project-first interface guidance with terminal UI #6298 (user-interface), Migrate per-skill .claude config files to userConfig, one conventions doc, or the cascade (ADR 0018) #5906 (customization home)🤖 Generated with Claude Code