Skip to content

feat(claude): complete marketplace manifest contract (#187) - #310

Merged
ScriptedAlchemy merged 1 commit into
mainfrom
feat/187-s3-marketplace-manifest
Sep 2, 2026
Merged

feat(claude): complete marketplace manifest contract (#187)#310
ScriptedAlchemy merged 1 commit into
mainfrom
feat/187-s3-marketplace-manifest

Conversation

@ScriptedAlchemy

Copy link
Copy Markdown
Owner

Summary

Slice 3 (2/3) of the #187 Claude parity pass: complete marketplace.json manifest contract, including the allowCrossMarketplaceDependenciesOn carry-over from #290.

  • Adds an authored claude.marketplace overlay (ClaudeMarketplaceConfig) that enriches the generated .claude-plugin/marketplace.json: top-level $schema/description/version/metadata (incl. pluginRoot)/owner contacts/renames/allowCrossMarketplaceDependenciesOn, plus the full documented plugin-entry catalog surface — author, category, tags, keywords, displayName, homepage, repository, license, metadata, strict, defaultEnabled, version, and relevance with all five documented signal kinds and their documented item/character/hostname/regex bounds. Generated identity and the relative ./ source stay generator-owned.
  • Re-pins marketplace.schema.json (1210 -> 9920 bytes) to the full closed documented contract: every structured object closed, reserved marketplace names rejected in plan, renames kebab-case map to name-or-null, headersHelper requires strict: false via schema conditional, sources restricted to internal ./ paths (github/git/npm/archive/command variants are the source-matrix follow-up).
  • All diagnostics use the dotted claude.marketplace.* convention with "then rebuild." recovery hints; no docs/diagnostics.md entries.
  • Orchestrator intervention: authored headers/headersHelper are rejected with claude.marketplace.plugin.{headers,headersHelper}.inapplicable — native proof shows Claude Code 2.1.257 warns they only apply to archive sources and --strict promotes 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.
  • Native proofs: enriched marketplace passes claude plugin validate --strict; strict validation accepts an empty allowCrossMarketplaceDependenciesOn entry (compiler validation is the allowlist guard, recorded honestly); strict validation rejects relative-source archive authentication (pinned verbatim).
  • Capability rows marketplaceManifest and allowCrossMarketplaceDependenciesOn supported for Claude with dated 2026-09-02 evidence; unified plugin adapter mirrors both as unavailable.
  • adapterRevision adjudicated 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

Add an authored marketplace overlay with closed validation, capability evidence, and native proof while retaining generated relative plugin sources.
@changeset-bot

changeset-bot Bot commented Sep 2, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 323068f

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
agent-bundle Minor

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

@ScriptedAlchemy
ScriptedAlchemy merged commit 4344443 into main Sep 2, 2026
7 of 8 checks passed
@ScriptedAlchemy
ScriptedAlchemy deleted the feat/187-s3-marketplace-manifest branch September 2, 2026 17:57

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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)) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 2530cc32. Marketplace relevance topics now enforce the 64-character limit by Unicode code points ([...topic].length), with a 64-emoji regression.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-02T18:02:36.521426Z 323068f PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

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.

1 participant