diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index e7a288d7..00b787b6 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -3,7 +3,9 @@ "version": "0.23.0", "description": "The code context layer for AI coding agents", "author": { - "name": "GitHits" + "name": "GitHits", + "email": "support@githits.com", + "url": "https://githits.com" }, "homepage": "https://githits.com", "repository": "https://github.com/githits-com/githits-cli", @@ -23,6 +25,7 @@ "upgrade evidence", "implementation examples" ], + "displayName": "GitHits", "icon": "githits-icon.svg", "privacyPolicyUrl": "https://githits.com/legal/privacy-policy/" } diff --git a/changes/claude-plugin-publisher-metadata.changed.md b/changes/claude-plugin-publisher-metadata.changed.md new file mode 100644 index 00000000..2f74f6fc --- /dev/null +++ b/changes/claude-plugin-publisher-metadata.changed.md @@ -0,0 +1,6 @@ +--- +"githits": patch +"@githits/mcp": none +--- + +- **Claude plugin metadata** - Add the GitHits display name, publisher contact email, and publisher website to the generated Claude plugin manifest. diff --git a/docs/implementation/plugin-packaging.md b/docs/implementation/plugin-packaging.md index 1cc70c6d..00d7e8d4 100644 --- a/docs/implementation/plugin-packaging.md +++ b/docs/implementation/plugin-packaging.md @@ -50,8 +50,10 @@ contents without running npm lifecycle scripts. `prepack` validates committed outputs instead of creating or deleting them. The Claude manifest points to the root SVG icon and the public GitHits privacy -policy. The icon is the Pulse monogram avatar from the GitHits product-context -brand assets. Keep both manifest fields in the generator so regenerated manifests +policy. It also declares `displayName: "GitHits"`, the publisher contact +`support@githits.com`, and an author URL derived from the package homepage. +The icon is the Pulse monogram avatar from the GitHits product-context +brand assets. Keep these manifest fields in the generator so regenerated manifests retain them. The root npm `files` allow-list includes `githits-icon.svg`; public-package validation checks the packed tarball contains it. @@ -180,6 +182,37 @@ must be archived after legacy installation migration is verified. ## Validation +### Claude directory review (2026-09-29) + +Keep the existing repository-root submission and release structure. Do not add +a dedicated plugin folder or distribution branch. The hosted GitHits connector +is already live in the directory (publisher-confirmed); this plugin review does +not require another connector submission. + +The [Claude plugin reference](https://code.claude.com/docs/en/plugins-reference) +audit found no missing required manifest fields. The current manifest passes +`claude plugin validate .claude-plugin/plugin.json --strict` with Claude Code +2.1.284. Target the manifest explicitly: `claude plugin validate .` selects +the marketplace manifest in this repository. + +`skills/` and `.mcp.json` are default discovery locations. Hooks, agents, +commands, LSP servers, and user configuration are optional components; add them +only for an intended product behavior. Root `CLAUDE.md` is not loaded as plugin +context, and `AGENTS.md` is not a documented plugin instruction entrypoint. +Runtime instructions belong in skills. The shared public tree includes the MCP +skill plus CLI code, package, and onboarding skills; the latter require shell +access and are not hosted-MCP-only workflows. + +The directory reviews the repository-root payload, including dependency files, +development documentation, and other hosts' assets. The reported lockfile, +unread-asset, and binary-inspection holds require reviewer clearance for the +held version; passing local manifest validation does not clear them. The +[directory checklist](https://claude.com/docs/plugins/pre-submission-checklist) +distinguishes these holds from blocking findings. Keep the existing submission +path and use the portal's validation and review results to assess each version. + +### Repository checks + Unit tests cover pure rendering, version parity, canonical skill discovery, transport selection, stale outputs, symlink targets, and removal of legacy payloads. diff --git a/scripts/generate-plugin-assets.test.ts b/scripts/generate-plugin-assets.test.ts index 483b622d..3192d430 100644 --- a/scripts/generate-plugin-assets.test.ts +++ b/scripts/generate-plugin-assets.test.ts @@ -129,6 +129,12 @@ describe("plugin asset generation", () => { JSON.parse(assets.get(".claude-plugin/plugin.json") ?? "{}"), ).toEqual( expect.objectContaining({ + displayName: "GitHits", + author: { + name: "GitHits", + email: "support@githits.com", + url: "https://githits.com", + }, icon: "githits-icon.svg", privacyPolicyUrl: "https://githits.com/legal/privacy-policy/", }), diff --git a/scripts/generate-plugin-assets.ts b/scripts/generate-plugin-assets.ts index 8a4e5a2d..dd0f3e6f 100644 --- a/scripts/generate-plugin-assets.ts +++ b/scripts/generate-plugin-assets.ts @@ -266,6 +266,12 @@ export function renderPluginAssets( path: ".claude-plugin/plugin.json", content: json({ ...sharedManifest, + displayName: "GitHits", + author: { + ...sharedManifest.author, + email: "support@githits.com", + url: inputs.homepage, + }, icon: "githits-icon.svg", privacyPolicyUrl: "https://githits.com/legal/privacy-policy/", }),