diff --git a/.wiki/concepts/registry-oci-image-index-gc.md b/.wiki/concepts/registry-oci-image-index-gc.md index 9a8ae0d..e579a2d 100644 --- a/.wiki/concepts/registry-oci-image-index-gc.md +++ b/.wiki/concepts/registry-oci-image-index-gc.md @@ -58,7 +58,9 @@ Sub-manifest (и его слои) физически удалены, а **тег **Побочка — урок:** у `books-api` и `books-ops-mcp` сам тег `master` указывал на **dangling**-индекс (образа не пересобирались ~3 нед, sub-манифесты вычищены прежним GC). Логика «dangling → drop безусловно» снесла и named-тег → `…/manifests/master` → **404**. Pull был сломан и до прогона (MANIFEST_UNKNOWN), но теперь тег исчез совсем. **Outage'а нет** (контейнеры books-api/bookva-api/books-ops-mcp крутятся с локальных образов), но любое **пересоздание/redeploy** упрётся в 404 до CI-rebuild. -**Вывод для GC-политики:** **не удалять named-теги (`master`/`latest`) даже dangling** — это deploy-указатель; лучше логировать «нужен rebuild». protectRe для registryGc стоит расширить с `^buildcache$` до `^buildcache$|^master$|^latest$`. Также проверить keep/drop на коллизию digest (у books-api `keep=1`, но в реестре не-buildcache не осталось — kept-образ, похоже, делил index-digest с dropped-dangling и ушёл вместе с ним по общему DELETE). +**Вывод для GC-политики:** **не удалять named-теги (`master`/`latest`) даже dangling** — это deploy-указатель; лучше логировать «нужен rebuild». books закрыли предохранителем (`62d812e`: protectRe `^buildcache$` → `^buildcache$|^master$|^latest$`). Подозрение на keep/drop digest-коллизию — **снято**: `keep=1` у books-api это buildcache (protected, он и остался); группировка по digest через Map делает keep/drop взаимоисключающими, kept-манифест не удаляется. + +**Восстановление снесённого named-тега — re-push локального образа** (не rebuild): контейнер крутится с локального образа на хосте → `docker tag $(docker inspect -f '{{.Image}}' ) registry/:master && docker push` (под books-ci с самого VDS, не из дома). Возвращает **плоский single-platform манифест с .config** (pullable, и будущий GC его датирует). Применено 2026-06-18 к books-api + books-ops-mcp → :master снова 200. **Гоча:** `books-api` вне CI-build-матрицы (вынесен под embed-api-into-web) — для него re-push единственный способ вернуть pullable master, rebuild'ом не выйдет. ## Правила для любого GC/cleanup над этим реестром