From e5aeafa9148b5361517e52f094a6492d2efdb038 Mon Sep 17 00:00:00 2001 From: vitya Date: Thu, 18 Jun 2026 13:32:11 +0300 Subject: [PATCH] docs(wiki): :master restored via re-push; digest-collision suspicion cleared MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit books закрыли named-tag предохранителем (62d812e: protectRe +master|latest). keep/drop digest-коллизия — снято: keep=1 у books-api это buildcache (group-by-digest через Map делает keep/drop взаимоисключающими). Восстановление снесённого named-тега = re-push локального образа с VDS (docker tag inspect-Image + push под books-ci), не rebuild → плоский single-platform манифест с .config (pullable, датируется). Применено к books-api + books-ops-mcp -> :master снова 200. Гоча: books-api вне CI-матрицы (embed-api-into-web) -> re-push единственный путь. Co-Authored-By: Claude Opus 4.8 (1M context) --- .wiki/concepts/registry-oci-image-index-gc.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 над этим реестром