{"version":"2.1.281","anchor":"plugin-install-new-failure-reasons-other-marketplace-copy","canonical_anchor":"plugin-install-new-failure-reasons-other-marketplace-copy","heading":"Plugin install gains replace options and new failure reasons, mostly inactive","tier":"notice","area":"Plugins","url":"https:\/\/changelogs.core-directive.com\/v\/2.1.281\/e\/plugin-install-new-failure-reasons-other-marketplace-copy","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.281","markdown":"### Plugin install gains replace options and new failure reasons, mostly inactive\n\nPlugin install accepts new replace and switch options and new failure reasons, though the replace paths cannot run in this build\n\n**Unclear.** The finding does not say what `more-installed-than-shown` or `directory-pin-unsatisfied` mean for the person installing.\n\n**What**\n\nPlugins are add-ons that extend Claude Code, installed from marketplaces (catalogs of plugins). The routine that installs them has new parts:\n\n- New options: `replaceInstalledCopy`, `replaceOnlyPluginIds`, `carrySettingsFrom`, and `surface`, which defaults to \"cli\". A result can also carry a `switched` field.\n\n- New failure reasons: \"installed-from-other-marketplace\", \"more-installed-than-shown\", \"plugin-directory-unavailable\" (a dependency's directory is unavailable) and \"directory-pin-unsatisfied\". Each currently shows the generic `Failed to install plugin` message with failureCode \"dependency_resolution_failed\".\n\n- Each dependency's entry is now checked for a policy block. The marketplace policy check moved into a helper.\n\n- Policy-block messages are now built by a shared message builder. Before, they were fixed text such as \"is blocked by your organization's policy and cannot be installed\", from the reasons \"blocked-by-policy\" and \"marketplace-blocked-by-policy\".\n\n- Several pieces are stubbed out in this build: the list of installed copies is hardcoded empty (`[Pe, ...Le] = []`), `copiesInOtherProjects` is `[]`, some blocks are `if (!1)`, and some message endings are empty. As a result the replace and other-marketplace paths cannot fire yet.\n\n**Why**\n\nMost of this cannot take effect yet. In practice, a plugin install that hits one of the new reasons fails with a generic message, and policy-block wording comes from a shared builder. The inactive parts deal with plugins already installed from a different marketplace.\n\n- Area: Plugins\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 2\/5"}