fix(deploy): retract false-green — pilonuxt content-api 500 on all CMS pages

vitya поймал /snolla/pages/viewModel?path=/services -> 500. Перепроверил:
content-api лежит полностью (viewModel 500 на всех путях). Root:
sequelize['snolla'] undefined в content-api → @snollajs/data не
инициализирован (задвоённый stateful-инстанс в Nitro-бандле, класс как
дубль Vue). Каталог работает (app-путь), CMS-страницы нет. Задача обратно
🔵 blocked, cutover отменён. Inbox pilonuxt с диагнозом отправлен.
Урок зафиксирован: smoke = все страницы меню + data-эндпоинты, не 2 роута.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-14 23:05:52 +03:00
parent 1725425972
commit 637942e914

View File

@@ -490,7 +490,7 @@ vehicles-loader (stostayer) деплоится в Docker у клиента (lite
---
## 🔴 [deploy-pilonuxt-vds] — **Цель:** Собрать prod-образ нового Nuxt-фронта ПИЛОРАМА98 (`victor/pilonuxt`, master) и задеплоить на VDS как Portainer-стек за Traefik. Готово в репо: `Dockerfile` + `.dockerignore` в корне. Полный овнершип сборки и деплоя — на тебе (build → push в VDS-registry → Portainer stack), как books/stostayer.
## 🔵 [deploy-pilonuxt-vds] — **Цель:** Собрать prod-образ нового Nuxt-фронта ПИЛОРАМА98 (`victor/pilonuxt`, master) и задеплоить на VDS как Portainer-стек за Traefik. Готово в репо: `Dockerfile` + `.dockerignore` в корне. Полный овнершип сборки и деплоя — на тебе (build → push в VDS-registry → Portainer stack), как books/stostayer.
**Сборка:**
- `docker build --secret id=verdaccio_token,env=VERDACCIO_TOKEN -t <registry>/pilonuxt:<tag> .`
@@ -531,9 +531,10 @@ vehicles-loader (stostayer) деплоится в Docker у клиента (lite
**weight:** needs-human (deploy-инфра)
**notify:** victor/pilonuxt
**Status:** active
**Where I stopped (2026-06-14 20:05):** RE-SMOKE ЗЕЛЁНЫЙ. pilonuxt пофиксил баг (дубль Vue в prod-бандле → `resolutions` форсят `@vue/*` в одну версию), запушил `registry.kzntsv.site/pilonuxt:3622662` (старый 36ec970 битый). Перекатил Portainer stack 16 на новый тег. Smoke: `/`→200 SSR (title рендерится), `/catalog`→200 с товарами из CMS (sequelize), картинки imgproxy→200 image/webp + статика 200 (assets-stub флаг НЕ задет — фото из bucket pilorama98), внешний доступ с дома 200 + cert LE valid. Остался 1 критерий: форма contacts→email НЕ гонял (живой email бизнесу, держу до отмашки vitya). Cutover www.pilorama98.ru — отдельный шаг, решение vitya.
**Next action:** (1) согласовать с vitya тест формы contacts (стрельнуть [SMOKE TEST] или закрыть по pilonuxt-verified); (2) по отмашке vitya — cutover www.pilorama98.ru (traefik rule → боевой Host + DNS reg.ru, снизить TTL заранее).
**Status:** blocked
**Where I stopped (2026-06-14 20:25):** ФАЛЬШ-GREEN ОТОЗВАН. Я объявил smoke зелёным по `/`+`/catalog`; vitya ткнул в `/snolla/pages/viewModel?path=/services` → 500. Перепроверил: **content-api лежит полностью**`/snolla/pages/viewModel?path=<любой>` → 500 ВСЕГДА. Реальная ошибка из логов: `TypeError: Cannot read properties of undefined (reading 'models')` в `@snollajs/snolla@0.11.0 sites.js:21` (`sequelize['snolla'].models['site']`) → **`sequelize['snolla']` undefined в контексте content-api**, т.е. реестр `@snollajs/data` там не инициализирован. Каталог-товары рендерятся (app-путь к данным работает), но CMS-страницы через content-api — нет. Диагноз: задвоённый stateful-инстанс `@snollajs/data` в Nitro-бандле (тот же класс, что дубль Vue: в dev Vite дедупит, в prod нет). Stack 16 (tag 3622662) оставлен поднятым. Inbox victor/pilonuxt отправлен (20:25) с stack+кодом+гипотезой (externalize/dedupe `@snollajs/data` либо init content-api перед mount). Урок в память: [[smoke-crawl-real-pages-not-two-routes]].
**Next action:** Ждать app-фикс pilonuxt (единый инстанс `@snollajs/data` / init content-api) → новый тег → pull+stack 16 update → пере-smoke ПО ВСЕМ страницам меню + viewModel по каждому пути (не два роута). Cutover www.pilorama98.ru — НЕ делать, сайт не готов.
**Blocker:** pilonuxt: content-api 500 на всех CMS-страницах — `sequelize['snolla']` undefined (задвоённый `@snollajs/data` в бандле). Source-level, их репо.
**Branch:** n/a
**Notify:** victor/pilonuxt