fix: migrate Codex plugin cache to personal namespace#282
Conversation
🦋 Changeset detectedLatest commit: f7f3c81 The changes in this PR will be included in the next version bump. Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
@codex review it |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c79c54a4f4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| @@ -1,5 +1,6 @@ | |||
| { | |||
| "name": "tracedecay", | |||
| "displayName": "TraceDecay", | |||
There was a problem hiding this comment.
Update Cursor bundle tests for displayName
Adding displayName here makes every Cursor install/render test that calls assert_cursor_plugin_bundle fail, because that helper still asserts manifest.get("displayName").is_none() with the message that displayName must not reappear (tests/agent_suite/agent_test.rs:500-504). In any test path that copies or installs the Cursor bundle, the rendered manifest now includes this field, so the agent suite will reject the intended schema update until the assertion is updated or removed.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 153f27f472
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| { | ||
| marketplace["name"] = json!(marketplace_name); | ||
| } | ||
| marketplace["name"] = json!(marketplace_name); |
There was a problem hiding this comment.
Preserve existing marketplace identity
Codex uses the marketplace name as the $MARKETPLACE_NAME cache namespace, so running install_codex_marketplace_entry against an existing personal marketplace that also contains non-TraceDecay plugins now rewrites all of those entries from their current namespace to personal (the previous code only filled this field when it was missing). This migration only needs to repair the legacy TraceDecay caveman-home marketplace; clobbering arbitrary marketplace metadata can make unrelated local plugins appear under a different marketplace/cache identity.
Useful? React with 👍 / 👎.
Why
tracedecay install --agent codexcould leave an existing Codex plugin install in the oldcaveman-homemarketplace namespace. That made the documented commandcodex plugin add tracedecay@personalfail even thoughtracedecay@caveman-homewas installed, and it also meant rerunning the TraceDecay installer did not refresh that installed Codex cache.While checking the current Codex and Cursor plugin specs, the Cursor bundle also had a metadata gap: the Cursor command template/validator expects native command files to carry both
nameanddescriptionfrontmatter, but our Cursor command overlays only had descriptions.What Changed
Codex plugin migration
personal/Personal, so the documentedtracedecay@personalnamespace resolves consistently..codex/plugins/cache/caveman-home/tracedecayinstalls as refresh candidates..codex/plugins/cache/personal/tracedecay/<version>while keeping the existing TraceDecay-owned directory safety checks.Cursor plugin spec alignment
displayNameandcategoryto the Cursor plugin manifest, matching current Cursor template metadata guidance while staying within the official schema.namefrontmatter to every Cursor native slash command.nameand a non-empty scalardescription.Release note
Spec Checks
cursor/pluginsschemas: liveplugin.schema.jsonandmarketplace.schema.jsonmatch the vendored fixtures.plugin-templatevalidator/docs: command files requirenameanddescriptionfrontmatter.Validation
Previously run for the Codex migration:
cargo fmtcargo checkcargo test --test agent_suite test_codex_install_migrates_legacy_caveman_home_cache_and_marketplacecargo test --test agent_suite codex_update_plugin_migrates_legacy_caveman_home_cache_to_personalcargo test --test agent_suite codex_install_refreshes_existing_cachecargo test --test agent_suite codex_update_plugin_refreshes_cache_and_keeps_bootstrap_source_listablecargo test --test agent_suite codex_update_plugin_recreates_bootstrap_source_from_cache_only_statecargo test --test agent_suite codex_update_plugin_repairs_personal_marketplace_for_bootstrap_bundlecargo test --test agent_suite test_codex_local_install_creates_repo_plugin_bundle_and_marketplaceRun after the Cursor/Codex spec audit:
cargo fmtcargo test --test agent_suite cursor_bundle_manifest_matches_the_official_cursor_plugin_schemacargo test --test agent_suite cursor_commands_are_hygienic_and_reference_resolvecargo test --test agent_suite cursor_install_renders_structurally_valid_bundlecargo test --test agent_suite codex_bundle_manifest_matches_the_cursor_schema_plus_interface_extensionRun after review feedback:
cargo fmtgit diff --checkcargo test --test agent_suite test_cursor_install_creates_plugincargo test --test agent_suite cursor_installReviewer Notes
assert_cursor_plugin_bundleis addressed by expecting the new Cursor manifest metadata.