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.
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:
Implementation:
Each repo has its own `marketplace.json` pointing at the right ref. Plugin sources can stay in `trustmybot/plugin`; marketplace.json indirects.
Users:
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:
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.