Skip to content

feat(claude): emit channel declarations bound to plugin MCP servers (#187) - #294

Merged
ScriptedAlchemy merged 1 commit into
mainfrom
feat/187-s2-channels
Sep 2, 2026
Merged

feat(claude): emit channel declarations bound to plugin MCP servers (#187)#294
ScriptedAlchemy merged 1 commit into
mainfrom
feat/187-s2-channels

Conversation

@ScriptedAlchemy

Copy link
Copy Markdown
Owner

Summary

  • Slice 2 of the Track Claude Code plugin contract parity beyond the current adapter #187 systematic Claude parity pass (manifest completion).
  • ClaudeHostConfig gains channels: declarations emitted into .claude-plugin/plugin.json, each bound to a plugin MCP server. Per-channel userConfig reuses the slice-1 planClaudeUserConfigOption contract (same identifier, collision, and sensitive-default rules).
  • Plan-time validation with dotted diagnostics (claude.channels.declaration.invalid, .entry.invalid, .field.unknown, .server.required, .server.unknown, .userConfig.invalid, .key.invalid, .key.collision).
  • Native proof against the installed Claude Code 2.1.257 found claude plugin validate --strict accepts a deliberately dangling server binding — the CLI never cross-checks .mcp.json keys, so claude.channels.server.unknown is the only pre-enable binding guard. Recorded honestly in capability evidence and PROVENANCE.
  • Closed channel schema added to plugin.schema.json reusing the userConfigOption $defs; PROVENANCE notes record the tightenings (empty-array rejection, unknown-field rejection, duplicate-server declarations deliberately allowed).
  • Claude adapter 1.10.0 → 1.11.0; unified plugin adapter 1.9.0 → 1.10.0 (channels row unavailable for the unified bundle per the lsp/bin precedent).

Test plan

Part of #187 (slice 2).

@changeset-bot

changeset-bot Bot commented Sep 2, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: cafa511

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 33e9d08 into main Sep 2, 2026
7 of 8 checks passed
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 2, 2026

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-02T06:54:42.596152Z cafa511 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.

@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: cafa511361

ℹ️ 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".

`Rename one channels[${index}].userConfig option so every key remains unique after uppercasing, then rebuild.`,
));
}
const optionPlan = planClaudeUserConfigOption(key, userConfig[key]);

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 Point channel option diagnostics at the channel

When an option inside channels[index].userConfig is malformed, this shared helper emits claude.userConfig.* messages and recoveries such as Set userConfig.bot_token.type..., which refers to the unrelated top-level field and omits the channel index. In configurations with top-level options or multiple channels, following the reported recovery does not repair the offending declaration and the build remains blocked; pass the channel path/context into the helper so these diagnostics identify channels[index].userConfig.<key>.

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. The shared option planner now accepts a path prefix, so channel diagnostics and recoveries identify channels[i].userConfig and emit indexed claude.channels[i].userConfig.* codes.

@ScriptedAlchemy
ScriptedAlchemy deleted the feat/187-s2-channels branch September 3, 2026 05:24
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