Skip to content

Serve the plugin from the repo root, not the frozen subtree (fixes #599)#600

Merged
lantiscooperdev merged 1 commit into
mainfrom
fix/marketplace-source-root
Jul 25, 2026
Merged

Serve the plugin from the repo root, not the frozen subtree (fixes #599)#600
lantiscooperdev merged 1 commit into
mainfrom
fix/marketplace-source-root

Conversation

@lantisprime

Copy link
Copy Markdown
Owner

.claude-plugin/marketplace.json pointed at ./plugins/episodic-memory, a 6-script subtree last touched 2026-04-30. The real scripts/ has 77 files. Every plugin install shipped April code — that em-search.mjs is 5,982 bytes against ~27,500, with no --read flag at all.

Why it drifted unnoticed

Nothing syncs the subtree. install.mjs deploys the root scripts/ to ~/.episodic-memory/scripts/, and tools/deploy-audit.mjs audits that global target. Neither covers plugins/. The root .claude-plugin/plugin.json references scripts/bp1-orchestrator.mjs, so the root manifest looked current and masked the fact that the served path was three months behind. Same blind-spot class as #583.

The change

-      "source": "./plugins/episodic-memory",
+      "source": ".",

Plus skills/episodic-memory/SKILL.md as a symlink to instructions/SKILL.md. The subtree shipped its own SKILL.md copy and the root skills/ had only classify-correction, so a bare source change would have silently dropped the skill from the plugin. The symlink is what prevents it drifting the way the subtree did, and it matches the layout CLAUDE.md already documents.

What is deliberately not done

plugins/episodic-memory/ stays in place. tests/test-em-revise-scope-inherit.mjs runs its matrix against that copy on purpose, labelled "drifted plugin copy" — deleting the subtree breaks a green test. Whether to remove it is a separate call, tracked in #599.

Verification

Suite Result
test-plugin-json.mjs 6/6
test-plugin-gauntlet.mjs 39/39
test-plugin-registry.mjs 205/205
test-em-revise-scope-inherit.mjs 18/18

Symlink resolves: skills/episodic-memory/SKILL.md -> ../../instructions/SKILL.md, head -3 returns the real frontmatter.

🤖 Generated with Claude Code

.claude-plugin/marketplace.json pointed at ./plugins/episodic-memory, a
6-script subtree last touched 2026-04-30 by the original marketplace
restructure. The real scripts/ has 77 files. Every plugin install therefore
shipped April code: that em-search.mjs is 5,982 bytes against ~27,500, with no
--read flag, no access tracking, no archived resolution.

Nothing synced the subtree. install.mjs deploys the root scripts/ to
~/.episodic-memory/scripts/ and deploy-audit.mjs audits that global target;
neither covers plugins/. The root .claude-plugin/plugin.json references
scripts/bp1-orchestrator.mjs, so the root manifest looked current and masked
the served subtree being three months behind. Same blind-spot class as #583.

Points source at the repo root, and adds skills/episodic-memory/SKILL.md as a
SYMLINK to instructions/SKILL.md — the subtree shipped its own SKILL.md copy
and the root had none, so a bare source change would have dropped the skill.
The symlink is what stops it drifting the way the subtree did, and matches the
layout CLAUDE.md already documents.

plugins/episodic-memory/ is left in place: tests/test-em-revise-scope-inherit.mjs
deliberately runs its matrix against that copy as a known "drifted plugin copy".
Removing it is a separate decision, tracked in #599.

Verified: test-plugin-json 6/6, test-plugin-gauntlet 39/39, test-plugin-registry
205/205, test-em-revise-scope-inherit 18/18.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@lantiscooperdev
lantiscooperdev merged commit 9cb9e8b into main Jul 25, 2026
8 checks passed
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.

2 participants