# Two SlicerMorph and MorphoDepot packaged extensions for todays Stable 5.12 build

**URL:** <https://discourse.slicer.org/t/two-slicermorph-and-morphodepot-packaged-extensions-for-todays-stable-5-12-build/47467>\
**Category:** Support\
**Created:** [June 25, 2026, 7:14pm UTC](https://discourse.slicer.org/t/two-slicermorph-and-morphodepot-packaged-extensions-for-todays-stable-5-12-build/47467 "2026-06-25T19:14:03Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![muratmaga](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/muratmaga/32/3622_2.png) [@muratmaga](https://discourse.slicer.org/u/muratmaga)\
**Post date:** [June 25, 2026, 7:14pm UTC](https://discourse.slicer.org/t/two-slicermorph-and-morphodepot-packaged-extensions-for-todays-stable-5-12-build/47467/1 "2026-06-25T19:14:04Z")

</div>

On a clean Slicer 5.12.0 (revision **34621** ) Linux install, installing **SlicerMorph** or **MorphoDepot** via the Extensions Manager (`installExtensionFromServer`) fails with _“Failed to retrieve metadata for … extension”_. The other extensions install fine.

**Root cause.** Both extension _items_ on slicer-packages currently hold **two build files** for r34621 (a stale build + the current one). The Extensions Manager fetches `/api/v1/item/{id}/files` and **explicitly rejects any item that does not have exactly one file** — see `qSlicerExtensionsManagerModelPrivate::downloadExtensionByName` in [Base/QTCore/qSlicerExtensionsManagerModel.cxx (v5.12.0)](https://github.com/Slicer/Slicer/blob/v5.12.0/Base/QTCore/qSlicerExtensionsManagerModel.cxx#L1576):

```auto
// GET /api/v1/item/{item_id}/files
if (results.isEmpty()) return nullptr; // 0 files
else if (results.count() == 1) { file_id = ...; } // exactly 1 -> OK
else return nullptr; // >1 file -> "not expected", bail

```

so `count()==2` → `nullptr` → “Failed to retrieve metadata.”

**Reproduce (public read API):**

```auto
BASE=https://slicer-packages.kitware.com/api/v1
APP=5f4474d0e1d8c75dfc705482 # Slicer app id

# Manager resolves the extension item for r34621:
curl -s "$BASE/app/$APP/extension?baseName=SlicerMorph&app_revision=34621&os=linux&arch=amd64&limit=1" | jq -r '.[0]._id'
# -> 6a3c00dc3e1fb85a58476a8b

# ...then GETs its files and requires exactly one. This returns TWO:
curl -s "$BASE/item/6a3c00dc3e1fb85a58476a8b/files" | jq -r '.[] | "\(._id) \(.name) created=\(.created)"'
# 6a3c00dd3e1fb85a58476a92 34621-linux-amd64-SlicerMorph-gite870ab7-2026-06-17.tar.gz created=2026-06-24T16:07:57Z (stale)
# 6a3d17c23e1fb85a58482b87 34621-linux-amd64-SlicerMorph-gitfb97f10-2026-06-25.tar.gz created=2026-06-25T11:57:54Z (current)

# MorphoDepot has the same problem (item 6a3beaff3e1fb85a5847514a):
curl -s "$BASE/item/6a3beaff3e1fb85a5847514a/files" | jq -r '.[] | "\(._id) \(.name) created=\(.created)"'
# 6a3d02233e1fb85a584817c2 34621-linux-amd64-MorphoDepot-git0a72a7b-2026-06-25.tar.gz created=2026-06-25T10:25:39Z (current)
# 6a3beb013e1fb85a58475152 34621-linux-amd64-MorphoDepot-git5567e0d-2026-06-24.tar.gz created=2026-06-24T14:34:40Z (stale)

```

Can someone remove the stale older file from each item so each has exactly one (`count()==1`):

- SlicerMorph item `6a3c00dc3e1fb85a58476a8b` → delete file `6a3c00dd3e1fb85a58476a92` (`gite870ab7`, 2026-06-17)
- MorphoDepot item `6a3beaff3e1fb85a5847514a` → delete file `6a3beb013e1fb85a58475152` (`git5567e0d`, 2026-06-24)
