Skip to content

πŸ”Œ v0.6.0: proper channel isolation between tmb (stable) and tmb-rc (RC) β€” currently both activate as 'tmb'Β #190

@ZaxShen

Description

@ZaxShen

Background

Surfaced during v0.5.0-rc.8 manual test. Both `tmb` and `tmb-rc` marketplace entries point at the same plugin source (different branches), but the activated plugin name is always `tmb` because `plugin.json`'s `name` field controls install identity, not the marketplace channel name.

Result: installing both channels simultaneously means both write to `.claude/tmb/trajectory.db` in your project, sharing state. CC matches install on plugin name only, ignoring the marketplace qualifier (anthropics/claude-code#20593).

Proper fix options

Option 1: Two separate marketplaces (CC-blessed pattern)

Per the Claude Code plugin marketplace docs and a community write-up:

"Use different names for the marketplace and plugin in marketplace.json ... To support 'stable' and 'latest' release channels for your plugins, you can set up two marketplaces that point to different refs or SHAs of the same repo."

Implementation:

  • `trustmybot/marketplace-stable` β†’ marketplace `trustmybot` β†’ plugin `tmb` (from `main`)
  • `trustmybot/marketplace-rc` β†’ marketplace `trustmybot-rc` β†’ plugin `tmb-rc` (from `rc`)

Each repo has its own `marketplace.json` pointing at the right ref. Plugin sources can stay in `trustmybot/plugin`; marketplace.json indirects.

Users:

  • Stable: `/plugin marketplace add trustmybot/marketplace-stable` then `/plugin install tmb@trustmybot`
  • RC: `/plugin marketplace add trustmybot/marketplace-rc` then `/plugin install tmb-rc@trustmybot-rc`

Pro: matches CC's design intent. Different DB paths (`.claude/tmb/` vs `.claude/tmb-rc/`). Co-installable.

Con: requires 2 new repos + ongoing marketplace.json maintenance per repo.

Option 2: Templated plugin name with build pipeline

Keep one marketplace; the `rc` branch's `plugin.json` ships with `"name": "tmb-rc"` (one-line diff vs `main`). Release ritual scripts + `scripts/release.sh` handle the rename when ff'ing the rc branch or promoting to main.

Plus: every reference to `mcp__plugin_tmb_trajectory-server__*` in agent prompts / hooks must become channel-agnostic β€” either:

  • Wildcard (regex matchers; hooks already do this for the `task_update_status` matcher)
  • Templated at build time
  • Resolved dynamically by reading the active plugin name from somewhere

Pro: keeps single marketplace, cleaner UX for users.

Con: plugin-name reference refactor across ~20 files; release pipeline complexity.

Recommendation

Option 1 β€” matches the CC-blessed pattern, keeps the agent prompts/hooks plugin-name-agnostic if we use wildcards consistently, gives users co-install. The marketplace-repo split is one-time setup; ongoing toil is just `marketplace.json` ref bumps when cutting tags.

Out of scope for v0.5.0

This is genuinely a v0.6.0 (or v1.0.0) refactor. v0.5.0 ships with the documented caveat: pick one channel, stick with it. See `tests/manual/setup.md` Path B for the workaround note + linked CC issues.

Metadata

Metadata

Assignees

No one assigned

    Labels

    FeatureNew feature or requestInstallInstall / marketplace / cold-start path

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions