Serve the plugin from the repo root, not the frozen subtree (fixes #599)#600
Merged
Conversation
.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
approved these changes
Jul 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
.claude-plugin/marketplace.jsonpointed at./plugins/episodic-memory, a 6-script subtree last touched 2026-04-30. The realscripts/has 77 files. Every plugin install shipped April code — thatem-search.mjsis 5,982 bytes against ~27,500, with no--readflag at all.Why it drifted unnoticed
Nothing syncs the subtree.
install.mjsdeploys the rootscripts/to~/.episodic-memory/scripts/, andtools/deploy-audit.mjsaudits that global target. Neither coversplugins/. The root.claude-plugin/plugin.jsonreferencesscripts/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
Plus
skills/episodic-memory/SKILL.mdas a symlink toinstructions/SKILL.md. The subtree shipped its ownSKILL.mdcopy and the rootskills/had onlyclassify-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 layoutCLAUDE.mdalready documents.What is deliberately not done
plugins/episodic-memory/stays in place.tests/test-em-revise-scope-inherit.mjsruns 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
test-plugin-json.mjstest-plugin-gauntlet.mjstest-plugin-registry.mjstest-em-revise-scope-inherit.mjsSymlink resolves:
skills/episodic-memory/SKILL.md -> ../../instructions/SKILL.md,head -3returns the real frontmatter.🤖 Generated with Claude Code