From a21b049195bfa06a526354b02b81d23527b6ca36 Mon Sep 17 00:00:00 2001 From: vitya Date: Sun, 16 Aug 2026 12:30:00 +0300 Subject: [PATCH] chore(ops): new-products-500 root cause = snolla admin-api create writes object Content; waiting snolla fix --- .tasks/STATUS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.tasks/STATUS.md b/.tasks/STATUS.md index 0f22944..283096e 100644 --- a/.tasks/STATUS.md +++ b/.tasks/STATUS.md @@ -1,4 +1,5 @@ # Admin Task Board +_Updated: 2026-08-16 (6) — 🔵 **[pilonuxt-new-products-500] ROOT CAUSE найден — баг snolla, ждём фикс.** Прогер подтвердил инспекцией боевой MSSQL: admin-api при create пишет `Products.Content` плоским объектом, `@snolla/core` viewModels читает только массив `[{name,value}]` → `_.find(contentFields, f=>f.name)` падает (viewModels/index.js:419). Сломаны только 10 новых товаров (create через admin-api; update-путь merge'ит в existing-массив — старые живы). Письмо snolla отправлено прогером (фикс: create → 'array' + defensive normalize в core). Рестарт/деплой не нужен. Ожидание: фикс snolla ИЛИ миграция Content 10 товаров в массив (MSSQL, сам прогер) → тогда verify категорий/карточек на проде. Ack отправлен (12:05Z)._ _Updated: 2026-08-16 (5) — 🔴 **[pilonuxt-restart-new-products-500] рестарт НЕ помог — серверный краш.** По запросу прогера (письмо 09:05Z): залил 10 новых товаров через loader (скандинавская доска, имитация бруса поднятый ворс, рейки скрытые), просил рестартнуть стек 16 для подхвата. Рестарт выполнен (Portainer, контейнер running, uptime 2s). Verify: `/catalog/skandinavskaya-doska` + `/catalog/imitaciya-brusa` → HTTP 200, но **500 внутри** (NuxtError, `Request failed with status code 500`); остальные категории (doska/brus/brusok/reyka/terrasnaya-doska) + `/` целы. Логи: `TypeError: Cannot read properties of undefined (reading 'name')` в `@snolla/core viewModels/index.js:419` (`_.find(x=>x.name)` на undefined) через `getProductViewModel` — missing-field у нового товара из заливки, НЕ кэш. Отписано прогеру с уликами (09:15Z); ждём фикс данных/кода → деплой или рестарт по его отмашке._ _Updated: 2026-08-16 (4) — 🟢 **[deploy-pilonuxt-catalog-img-fix-2] DONE.** Фикс прогера `f876e70` (origin/master, 1 файл `categories.json`): оставшиеся 3 плейсхолдера каталога заменены эталонными imgproxy-фото из CMS (list_image → 800×800) — Доска обрезная `ylD4trDVXa…` (было `/images/1.webp`), Доска строительная `qqUyT37cNrf…` (`/images/2.webp`), Брус/брусок/рейка `CGyNTUwB7iY…` (`/images/3.webp`). Build из монорепы, push напрямую, Portainer PUT стек 16 (`pullImage:true`, Env:0). Verify мимо LAN-DNS: `/catalog` 200 + `/` 200, `src=/images/[123].webp` → **0 вхождений**, 25 imgproxy-refs, все 3 новых фото на месте; регресс `/services` 200, `/services/building` 404, `/catalog/brus` 200, `/catalog/antiseptirovannye-pilomaterialy` 200. Заглушки каталога закрыты полностью. Откат: стек 16→`24a13da`. Source-of-truth compose актуализирован (`f876e70`). _Updated: 2026-08-16 (3) — 🟢 **[deploy-pilonuxt-catalog-img-fix] DONE.** Фикс прогера `24a13da` (origin/master, 1 файл `categories.json`): тайлы «Брус антисептированный» (мета «Брус, брусок, рейка» + «Антисептированные пиломатериалы») переведены с плейсхолдера `/images/2.webp` на imgproxy-фото `TGTqrE8…` (как у «Брус, брусок сухой антисептированный»). Build из монорепы, push напрямую, Portainer PUT стек 16 (`pullImage:true`, Env:0). Verify мимо LAN-DNS: `/catalog` 200, оба тайла `src=/imgproxy/TGTqrE8…`, заглушки нет; `/` 200; оставшиеся 3 плейсхолдера (обрезная 1.webp / строительная 2.webp / брус-брусок-рейка 3.webp) намеренно не тронуты (заметка прогера — заменят при отмашке владельца + эталонные URL); регресс: `/services` 200, `/services/building` 404, `/catalog/brus` 200. Откат: стек 16→`40806b1`. Source-of-truth compose актуализирован (`24a13da`).