docs: plan Codex plugin version mismatch fix
This commit is contained in:
@@ -0,0 +1,249 @@
|
||||
# Codex Plugin Version Mismatch Investigation Plan
|
||||
|
||||
Date: 2026-05-06
|
||||
|
||||
## Summary
|
||||
|
||||
Codex is still exposing `claude-mem` from:
|
||||
|
||||
```text
|
||||
/Users/alexnewman/.codex/plugins/cache/thedotmack/claude-mem/12.3.1
|
||||
```
|
||||
|
||||
That cache entry is the source of the `claude-mem:...` skills loaded in this Codex session. The working tree and the Codex marketplace clone both advertise `12.7.2`, but the enabled Codex plugin points at the old installed cache. This is not a model-memory issue.
|
||||
|
||||
The likely root cause is an incomplete migration from marketplace registration to a first-class Codex plugin install. The current installer registers the marketplace, but it does not verify that the actual enabled plugin cache was installed or upgraded to the current `.codex-plugin` bundle.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Current repository metadata is `12.7.2`:
|
||||
- `package.json`
|
||||
- `.codex-plugin/plugin.json`
|
||||
- `plugin/.codex-plugin/plugin.json`
|
||||
- `plugin/package.json`
|
||||
|
||||
- Codex marketplace source is current:
|
||||
- `/Users/alexnewman/.codex/config.toml` contains `[marketplaces.claude-mem-local]`
|
||||
- `last_updated = "2026-05-06T23:13:59Z"`
|
||||
- `last_revision = "bb3dbfdb5ae92b55b7e4686e4904995184261232"`
|
||||
- `/Users/alexnewman/.codex/.tmp/marketplaces/claude-mem-local/package.json` is `12.7.2`
|
||||
- `/Users/alexnewman/.codex/.tmp/marketplaces/claude-mem-local/.codex-plugin/plugin.json` is `12.7.2`
|
||||
|
||||
- Active enabled plugin state is still old:
|
||||
- `/Users/alexnewman/.codex/config.toml` contains `[plugins."claude-mem@thedotmack"] enabled = true`
|
||||
- The only `claude-mem` plugin cache under `~/.codex/plugins/cache/thedotmack/claude-mem` is `12.3.1`
|
||||
- `/Users/alexnewman/.codex/plugins/cache/thedotmack/claude-mem/12.3.1/package.json` is `12.3.1`
|
||||
- `/Users/alexnewman/.codex/plugins/cache/thedotmack/claude-mem/12.3.1/.install-version` records `{"version":"12.3.1", ...}`
|
||||
|
||||
- The active cache is not shaped like the new first-class Codex bundle:
|
||||
- It has `.claude-plugin/plugin.json`
|
||||
- It does not have `.codex-plugin/plugin.json`
|
||||
- It does not have `hooks/codex-hooks.json`
|
||||
- Its `.mcp.json` still uses the old `bun` command with `"${CLAUDE_PLUGIN_ROOT}/scripts/mcp-server.cjs"`
|
||||
|
||||
- Current Codex CLI capability is limited:
|
||||
- `codex-cli 0.128.0`
|
||||
- `codex plugin marketplace` exposes `add`, `upgrade`, and `remove`
|
||||
- There is no CLI `plugin list` or `plugin install` subcommand in this build
|
||||
|
||||
- Current installer code only registers a marketplace:
|
||||
- `src/services/integrations/CodexCliInstaller.ts:188` prints the marketplace root
|
||||
- `src/services/integrations/CodexCliInstaller.ts:189` runs `codex plugin marketplace add <root>`
|
||||
- `src/services/integrations/CodexCliInstaller.ts:200` through `src/services/integrations/CodexCliInstaller.ts:203` tells the user to open `/plugins` and install manually
|
||||
- `src/npx-cli/commands/install.ts:271` through `src/npx-cli/commands/install.ts:281` reports success as "hooks marketplace registered", not "plugin installed"
|
||||
|
||||
## Working Theory
|
||||
|
||||
There are two independent states:
|
||||
|
||||
1. Marketplace source state: current and registered as `claude-mem-local`.
|
||||
2. Installed plugin cache state: stale and enabled as `claude-mem@thedotmack`.
|
||||
|
||||
Codex loads skills, hooks, and MCP metadata from the installed plugin cache, not directly from the marketplace source. Since the installed cache is still `12.3.1`, every new Codex session sees `claude-mem` as `12.3.1`, even though the marketplace clone is already at `12.7.2`.
|
||||
|
||||
The `claude-mem@thedotmack` plugin ID also suggests this cache came from an older GitHub marketplace install path, while the current installer registers `claude-mem-local`. That mismatch needs to be handled explicitly during repair and install.
|
||||
|
||||
## Phase 0: Reproduce And Baseline
|
||||
|
||||
What to do:
|
||||
|
||||
- Capture a clean before-state snapshot:
|
||||
- `codex --version`
|
||||
- `sed -n '1,220p' ~/.codex/config.toml`
|
||||
- `find ~/.codex/plugins/cache -maxdepth 5 -type f \( -name 'plugin.json' -o -name 'package.json' -o -name '.mcp.json' -o -name 'codex-hooks.json' \) -print`
|
||||
- `find ~/.codex/plugins/cache/thedotmack/claude-mem -maxdepth 2 -type d -print`
|
||||
|
||||
- Confirm which paths Codex injects into the session skill list:
|
||||
- Start a fresh Codex session.
|
||||
- Inspect the available skills list for `claude-mem:` paths.
|
||||
- Expected current bad path: `~/.codex/plugins/cache/thedotmack/claude-mem/12.3.1/skills`.
|
||||
|
||||
Verification:
|
||||
|
||||
- The before-state snapshot shows the stale cache and current marketplace clone side by side.
|
||||
- The fresh session still reports `12.3.1` before remediation.
|
||||
|
||||
Anti-pattern guards:
|
||||
|
||||
- Do not delete `~/.codex/plugins/cache` blindly.
|
||||
- Do not edit unrelated `~/.codex/config.toml` project trust settings.
|
||||
- Do not assume `codex plugin marketplace upgrade` upgrades the installed plugin cache until verified.
|
||||
|
||||
## Phase 1: Local Recovery Procedure
|
||||
|
||||
What to do:
|
||||
|
||||
- Back up the current Codex plugin state:
|
||||
- `cp ~/.codex/config.toml ~/.codex/config.toml.bak-$(date +%Y%m%d-%H%M%S)`
|
||||
- Archive or copy `~/.codex/plugins/cache/thedotmack/claude-mem/12.3.1`
|
||||
|
||||
- Remove the stale enabled plugin state through supported UI where possible:
|
||||
- Open Codex.
|
||||
- Run `/plugins`.
|
||||
- Disable or uninstall `claude-mem@thedotmack` if it appears.
|
||||
|
||||
- Register or refresh the current marketplace:
|
||||
- `codex plugin marketplace upgrade claude-mem-local`
|
||||
- If needed, re-add from the durable local marketplace root produced by the installer.
|
||||
|
||||
- Install `claude-mem` from the `claude-mem (local)` marketplace in `/plugins`.
|
||||
|
||||
- Restart Codex.
|
||||
|
||||
Verification:
|
||||
|
||||
- `~/.codex/plugins/cache` contains a `claude-mem` cache with `.codex-plugin/plugin.json`.
|
||||
- The active plugin cache has `version: 12.7.2`.
|
||||
- The active plugin cache has `hooks/codex-hooks.json`.
|
||||
- The active plugin cache `.mcp.json` uses the portable `sh -c` wrapper from the current repo.
|
||||
- A fresh Codex session lists `claude-mem:` skills from the new cache, not `12.3.1`.
|
||||
|
||||
Anti-pattern guards:
|
||||
|
||||
- Do not manually copy the repository into `~/.codex/plugins/cache` as the primary fix. Use it only as a diagnostic fallback.
|
||||
- Do not leave both `claude-mem@thedotmack` and a new local `claude-mem` enabled if Codex treats them as distinct plugins.
|
||||
- Do not accept "marketplace upgraded" as proof. The cache path and loaded skill path are the source of truth.
|
||||
|
||||
## Phase 2: Installer Fix
|
||||
|
||||
What to implement:
|
||||
|
||||
- Change the Codex installer outcome from "registered marketplace" to "registered marketplace and verified installability".
|
||||
- Add a post-registration diagnostic that checks whether an enabled stale `claude-mem` plugin is already present.
|
||||
- If a stale cache is detected, print a direct remediation message that names the exact stale cache path and exact `/plugins` action required.
|
||||
- If Codex exposes an install/enable CLI in a future version, use it. In `0.128.0`, keep the `/plugins` step but verify and report the gap.
|
||||
|
||||
Code references:
|
||||
|
||||
- `src/services/integrations/CodexCliInstaller.ts:10` for `MARKETPLACE_NAME`.
|
||||
- `src/services/integrations/CodexCliInstaller.ts:12` through `src/services/integrations/CodexCliInstaller.ts:16` for required marketplace files.
|
||||
- `src/services/integrations/CodexCliInstaller.ts:175` through `src/services/integrations/CodexCliInstaller.ts:214` for install flow.
|
||||
- `src/npx-cli/commands/install.ts:269` through `src/npx-cli/commands/install.ts:282` for task status text.
|
||||
- `tests/install-non-tty.test.ts` for existing installer behavior assertions.
|
||||
|
||||
Suggested implementation details:
|
||||
|
||||
- Add a `diagnoseCodexPluginState()` helper that reads:
|
||||
- `~/.codex/config.toml`
|
||||
- `~/.codex/plugins/cache/**/claude-mem/**/.codex-plugin/plugin.json`
|
||||
- `~/.codex/plugins/cache/**/claude-mem/**/.claude-plugin/plugin.json`
|
||||
- `~/.codex/plugins/cache/**/claude-mem/**/.install-version`
|
||||
|
||||
- Classify state as:
|
||||
- `not_installed`
|
||||
- `installed_current_codex`
|
||||
- `installed_stale_codex`
|
||||
- `installed_legacy_claude_shape`
|
||||
- `duplicate_installs`
|
||||
|
||||
- Include current repo/package version in the expected state.
|
||||
- Treat `installed_legacy_claude_shape` as a warning or failure for Codex integration, because it is the exact observed bad state.
|
||||
|
||||
Verification:
|
||||
|
||||
- Unit tests cover stale `12.3.1` legacy cache with `.claude-plugin` only.
|
||||
- Unit tests cover current `12.7.2` first-class cache with `.codex-plugin`.
|
||||
- Unit tests cover duplicate stale plus current installs.
|
||||
- Installer output no longer says only "hooks marketplace registered" when the installed plugin cache is stale.
|
||||
|
||||
Anti-pattern guards:
|
||||
|
||||
- Do not parse TOML with regex if a TOML parser is already available in the dependency set.
|
||||
- Do not bake in `12.7.2`; read expected version from package metadata.
|
||||
- Do not rely on `~/.codex/.tmp/marketplaces/...` as proof of plugin installation.
|
||||
|
||||
## Phase 3: Repair Command Fix
|
||||
|
||||
What to implement:
|
||||
|
||||
- Extend `npx claude-mem repair --ide codex-cli` or equivalent repair flow to handle Codex first-class plugin state.
|
||||
- The repair should:
|
||||
- Register or upgrade the local marketplace.
|
||||
- Detect stale enabled `claude-mem@thedotmack`.
|
||||
- Tell the user whether manual `/plugins` installation is still required.
|
||||
- Verify the active cache after restart or after the user completes `/plugins`.
|
||||
|
||||
Code references:
|
||||
|
||||
- `src/npx-cli/commands/install.ts` for marketplace copy and IDE task orchestration.
|
||||
- `src/services/integrations/CodexCliInstaller.ts` for Codex-specific registration.
|
||||
- `src/npx-cli/commands/uninstall.ts` for uninstall symmetry.
|
||||
|
||||
Verification:
|
||||
|
||||
- Repair from a synthetic `12.3.1` legacy cache reports the correct stale-cache diagnosis.
|
||||
- Repair from a current cache is idempotent.
|
||||
- Repair does not remove unrelated Codex settings or non-claude-mem plugins.
|
||||
|
||||
Anti-pattern guards:
|
||||
|
||||
- Do not silently delete old caches without a backup or explicit command mode.
|
||||
- Do not make repair depend on an interactive TUI if the install command supports non-TTY mode.
|
||||
|
||||
## Phase 4: Documentation Fix
|
||||
|
||||
What to update:
|
||||
|
||||
- Document that Codex currently has two steps:
|
||||
- Marketplace registration via `npx claude-mem install`.
|
||||
- Plugin install/enable via `/plugins`.
|
||||
|
||||
- Add troubleshooting for this exact mismatch:
|
||||
- Symptom: Codex skill list shows `~/.codex/plugins/cache/thedotmack/claude-mem/12.3.1`.
|
||||
- Cause: stale installed plugin cache, despite current marketplace source.
|
||||
- Fix: uninstall old `claude-mem@thedotmack`, install from `claude-mem (local)`, restart Codex.
|
||||
|
||||
Code/doc references:
|
||||
|
||||
- `docs/public/installation.mdx`
|
||||
- `docs/public/troubleshooting.mdx`
|
||||
- `README.md`
|
||||
|
||||
Verification:
|
||||
|
||||
- Docs mention the cache path as a diagnostic check.
|
||||
- Docs do not imply that `codex plugin marketplace add` alone installs the plugin.
|
||||
|
||||
## Phase 5: End-To-End Verification
|
||||
|
||||
Manual verification checklist:
|
||||
|
||||
- Fresh install on a clean Codex profile.
|
||||
- Upgrade from old `12.3.1` cache.
|
||||
- Upgrade from current marketplace but stale installed cache.
|
||||
- Duplicate install case with both `claude-mem@thedotmack` and local `claude-mem`.
|
||||
|
||||
Acceptance criteria:
|
||||
|
||||
- Fresh Codex session loads `claude-mem:` skills from a current cache path.
|
||||
- Loaded plugin cache contains `.codex-plugin/plugin.json`.
|
||||
- Loaded plugin cache contains Codex hooks at the path declared by `.codex-plugin/plugin.json`.
|
||||
- MCP server starts through the current `.mcp.json` wrapper.
|
||||
- Installer and repair output make stale-cache state explicit.
|
||||
|
||||
## Open Questions
|
||||
|
||||
- Does the Codex `/plugins` UI use marketplace name, repository owner, or plugin author to derive the installed plugin cache namespace?
|
||||
- Does `codex plugin marketplace upgrade claude-mem-local` intentionally avoid updating already-installed plugin caches?
|
||||
- Is there a hidden or upcoming non-interactive plugin install command that can replace the manual `/plugins` step?
|
||||
- Should the installer remove or disable `claude-mem@thedotmack` when installing `claude-mem-local`, or should it only warn?
|
||||
Reference in New Issue
Block a user