refactor(plugin): collapse three host bundles into one shared plugin/ tree - #250
Merged
Conversation
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
ScriptedAlchemy
force-pushed
the
feat/adoption-contract-injection
branch
from
July 3, 2026 18:38
cbc1a12 to
692be89
Compare
ScriptedAlchemy
force-pushed
the
feat/plugin-single-bundle
branch
from
July 3, 2026 18:39
045f65f to
df16846
Compare
ScriptedAlchemy
force-pushed
the
feat/adoption-contract-injection
branch
from
July 3, 2026 18:53
692be89 to
1bd9587
Compare
ScriptedAlchemy
force-pushed
the
feat/plugin-single-bundle
branch
from
July 3, 2026 18:54
df16846 to
bdde218
Compare
ScriptedAlchemy
force-pushed
the
feat/adoption-contract-injection
branch
from
July 3, 2026 19:21
1bd9587 to
9890962
Compare
Merge the byte-duplicated claude-plugin/, codex-plugin/, and cursor-plugin/
trees into a single shared plugin/ tree with per-host manifest overlays,
and route all three installers through a new composed embed registry
(src/agents/plugin_bundle.rs). Each host still deploys a byte-for-byte
identical tree to before — verified by installing every host from the new
layout and diffing sha256 hashes against the pre-refactor deploy.
Layout (plugin/):
- skills/ 17 shared model-invocable skills + 13 canonical
(claude/codex form) tracedecay-* workflow dispatchers
- overlays/cursor/skills/ 13 Cursor dispatcher slugs (disable-model-invocation
form) — deployed by Cursor in place of the canonical
dispatchers at the same skills/ deploy path
- overlays/cursor/agents/ Cursor-form subagents
- agents/ Claude-form subagents
- commands/ 13 Claude slash commands
- rules/ 2 Cursor .mdc rules
- hooks/hooks-<host>.json per-host hook wiring (each deploys as hooks/hooks.json)
- .{claude,cursor,codex}-plugin/ host manifests (unchanged deploy contents)
- .mcp.json shared Claude/Codex MCP config (byte-identical)
- mcp-cursor.json Cursor MCP config (deploys as mcp.json)
- README-<host>.md per-host README (deploys as README.md)
src/agents/plugin_bundle.rs owns CANONICAL_PLUGIN_FILES plus the per-host
manifest slices and composes each installer's deploy set as
CANONICAL ∪ <HOST>_MANIFEST. Each PluginFile.relative is the deploy path
(unchanged from the legacy bundles); contents are include_str!'d from the
shared plugin/ source, whose path may differ (e.g. Cursor's hooks/hooks.json
is sourced from plugin/hooks/hooks-cursor.json).
cursor.rs/codex.rs/claude.rs drop their per-host EMBEDDED_PLUGIN_FILES tables
and consume plugin_bundle::{cursor,codex,claude}_files(); deploy/render/
migrate/doctor logic is unchanged. steering.rs bootstrap include repoints to
plugin/skills/using-tracedecay/SKILL.md.
Track plugin/.mcp.json past .gitignore; add /plugin/** to the Cargo publish
include list (replacing the cursor/codex bundle globs).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ScriptedAlchemy
force-pushed
the
feat/plugin-single-bundle
branch
from
July 3, 2026 19:25
bdde218 to
b42021d
Compare
ScriptedAlchemy
changed the base branch from
feat/adoption-contract-injection
to
master
July 3, 2026 19:43
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.
Stacked on #249 (base:
feat/adoption-contract-injection). Merge last in the plugin stack.What
Replaces the three duplicated host bundles (
claude-plugin/,codex-plugin/,cursor-plugin/) — kept in lockstep by copy + parity tests — with a singleplugin/tree and per-host manifest dirs, the superpowers-style single-source/multi-manifest model.The overriding invariant: deployed trees do not change
Captured golden sha256 manifests of all three hosts' deployed trees from the pre-refactor binary, then re-installed each host post-refactor: all three deploy byte-for-byte identically (paths + content hashes). This refactor changes only where files live in the repo and how they're embedded — not a single byte of what any host actually installs.
Layout
plugin/skills/— the 17 byte-identical canonical skills + 13 canonical-form workflow skillsplugin/overlays/cursor/skills/— the 13 Cursordisable-model-invocationdispatcher skills (kept as a Cursor overlay; the dispatcher→.cursor/commands/migration is a deliberate follow-on)plugin/{commands,rules,agents}/+plugin/overlays/cursor/agents/(Cursor-form agents differ from Claude-form)plugin/hooks/hooks-{claude,cursor,codex}.json,plugin/.{claude,cursor,codex}-plugin/manifests (contents unchanged so deployed manifests stay identical),plugin/.mcp.json+plugin/mcp-cursor.json, per-host READMEssrc/agents/plugin_bundle.rs—PluginFile { relative (deploy path), contents };CANONICAL_PLUGIN_FILES∪{CLAUDE,CURSOR,CODEX}_MANIFEST_FILESvia{host}_files(). The deployrelativediffers from the repo source path where needed (e.g. cursor deployshooks/hooks.jsonfromplugin/hooks/hooks-cursor.json) — that indirection is what keeps deployed trees byte-identical.plugin_bundle::{host}_files(); the three*_EMBEDDED_PLUGIN_FILEStables are gone.steering.rsrepointed.Tests
plugin_bundle_sync_test, codex*_match_the_cursor_source_for_parity/ships_exactly_the_model_invocable, claude byte-identity-to-codex) — with one source copy there's nothing to sync.*_embedded_file_list_covers_the_whole_source_bundleas composed-view checks; retargeted the manifest/config/skill-contract/skill-lint/coverage/update-plugin tests to theplugin/tree (staging composed per-host deploy layouts in temp dirs where source≠deploy).Deferred (follow-on pass, task #11 remainder)
Recursive-walk embedding for skill support-files; cursor dispatcher→
.cursor/commands/; memory-skill merge +message_searchlane split; unifiedshared_skill_contract_test.🤖 Generated with Claude Code