feat(claude): complete marketplace manifest contract (#187) - #310
Conversation
Add an authored marketplace overlay with closed validation, capability evidence, and native proof while retaining generated relative plugin sources.
🦋 Changeset detectedLatest commit: 323068f The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 323068f036
ℹ️ 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".
| )); | ||
| } | ||
| const topic = declared['topic']; | ||
| if (topic !== undefined && (!isNonemptyString(topic) || topic.length > 64)) { |
There was a problem hiding this comment.
Count relevance topics by Unicode character
When plugin.relevance.topic contains non-BMP characters such as emoji, JavaScript's .length counts each surrogate pair twice, so a valid topic of at most 64 Unicode characters can receive claude.marketplace.plugin.relevance.topic.invalid and suppress the marketplace artifact. The pinned schema's maxLength: 64 is defined in Unicode characters, so use a code-point-aware count here to keep planning consistent with artifact validation.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in 2530cc32. Marketplace relevance topics now enforce the 64-character limit by Unicode code points ([...topic].length), with a 64-emoji regression.
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. |
Summary
Slice 3 (2/3) of the #187 Claude parity pass: complete
marketplace.jsonmanifest contract, including theallowCrossMarketplaceDependenciesOncarry-over from #290.claude.marketplaceoverlay (ClaudeMarketplaceConfig) that enriches the generated.claude-plugin/marketplace.json: top-level$schema/description/version/metadata(incl.pluginRoot)/ownercontacts/renames/allowCrossMarketplaceDependenciesOn, plus the full documented plugin-entry catalog surface —author,category,tags,keywords,displayName,homepage,repository,license,metadata,strict,defaultEnabled,version, andrelevancewith all five documented signal kinds and their documented item/character/hostname/regex bounds. Generated identity and the relative./source stay generator-owned.marketplace.schema.json(1210 -> 9920 bytes) to the full closed documented contract: every structured object closed, reserved marketplace names rejected in plan,renameskebab-case map to name-or-null,headersHelperrequiresstrict: falsevia schema conditional, sources restricted to internal./paths (github/git/npm/archive/command variants are the source-matrix follow-up).claude.marketplace.*convention with "then rebuild." recovery hints; nodocs/diagnostics.mdentries.headers/headersHelperare rejected withclaude.marketplace.plugin.{headers,headersHelper}.inapplicable— native proof shows Claude Code 2.1.257 warns they only apply to archive sources and--strictpromotes that warning to failure, so the compiler must not emit a strict-failing manifest. The pinned schema retains the documented fields for the source-matrix follow-up.claude plugin validate --strict; strict validation accepts an emptyallowCrossMarketplaceDependenciesOnentry (compiler validation is the allowlist guard, recorded honestly); strict validation rejects relative-source archive authentication (pinned verbatim).marketplaceManifestandallowCrossMarketplaceDependenciesOnsupported for Claude with dated 2026-09-02 evidence; unified plugin adapter mirrors both as unavailable.adapterRevisionadjudicated serially past feat(claude): pin distribution policy capability evidence (#187) #308: claude 1.14.0 -> 1.15.0, plugin 1.13.0 -> 1.14.0.Test plan
pnpm -w typecheckandpnpm -w lintclean