diff --git a/.tasks/STATUS.md b/.tasks/STATUS.md index 82f5d62..933ab7c 100644 --- a/.tasks/STATUS.md +++ b/.tasks/STATUS.md @@ -1170,7 +1170,7 @@ curl -sI 'https://imgproxy.kzntsv.site/nlXN7RMrer11Fe9XPQaXmq4H0ufzPpo2fOzBWtaL0 --- -## 🟡 [tandemmebel-web-vds-deploy] — STAGING GREEN 2026-07-04, ждёт cutover (DNS gated оператором). Образ `tandemmebel:0facb35` (digest 464d2f22) собран на VDS; стек Portainer **Id 20** (staging-rule `tandemmebel.vds.kzntsv.site`, env verbatim из стека 17); imgproxy-nginx кэш purged (featured 27820B вотермарк без cache-bust). Smoke с VDS: status-parity 10/10, sitemap staging⊇prod (prod-only=0, +12 /projects/categories/* benign#3), trailing 301/301, blog-post 200 (+3.5KB=benign#2 imgproxy vs /galleries/), 2012-посты 31/31, theme 21/22 MD5-OK. Находка (не блокер): prod Gotham-Pro.css=0B (пустой), staging=4436B корректный → cutover чинит латентный прод-баг шрифта. Следующее: отмашка оператора на DNS → verify авторит.NS → боевой Host-rule в стек 20. +## 🟡 [tandemmebel-web-vds-deploy] — STAGING GREEN, ждёт cutover (DNS gated оператором). **⚠️ ОБРАЗ К ФЛИПУ ОБНОВЛЁН → `tandemmebel:ed96b18` (snolla 0.42.0/core 0.24.0/data 0.14.1, digest `ca4da79`), СУПЕРСИДИТ b02ca18/0facb35** — раскатан на стек 20 задачей [tandemmebel-deploy-snolla-0-42-0] (2026-07-04, DoD 172/172 sitemap + 12/12 gallery-grid GREEN). Cutover = тот же DNS-gated шаг: владелец флипает reg.ru `tandemmebel.ru`+`www`→89.253.255.94 → verify авторит.NS (`Resolve-DnsName -Server ns1.reg.ru`) → ТОЛЬКО ПОТОМ боевой `Host()` в стек 20 (порядок критичен: LE HTTP-01) → live-smoke. RUVDS 80.64.31.36 = rollback (revert DNS), не тронут. Sharp media in-process (imgproxy из tandem-пути убран — прошлые imgproxy-заметки ниже historical). Историческая спека (0facb35/imgproxy-watermark) ниже — HISTORICAL, не актуальна. Smoke с VDS: status-parity 10/10, sitemap staging⊇prod (prod-only=0, +12 /projects/categories/* benign#3), trailing 301/301, blog-post 200 (+3.5KB=benign#2 imgproxy vs /galleries/), 2012-посты 31/31, theme 21/22 MD5-OK. Находка (не блокер): prod Gotham-Pro.css=0B (пустой), staging=4436B корректный → cutover чинит латентный прод-баг шрифта. Следующее: отмашка оператора на DNS → verify авторит.NS → боевой Host-rule в стек 20. @@ -1346,7 +1346,7 @@ tandemmebel-staging (стек 20) потеряет featured-вотермарк --- -## 🔴 [tandemmebel-deploy-snolla-0-42-0] — Раскатить прод tandemmebel на `@snollajs/snolla@0.42.0` (core 0.24.0 / data 0.14.1) — engine-chain-обновление: перепил viewModel-навигации на единый ленивый cross-entity граф (EntityDrop/IndexDrop + декларативный GRAPH-реестр, includeX-запекание выпилено) + blog-вертикаль (blogAuthor / blog.archives / date-archive страницы) + path-фиксы. Всё TDD, опубликовано в registry, byte-verified двумя живыми консюмерами: artmone 17/17 byte-identical, tandemmebel 199/199 роутов Ф3-регресс 0 diff. Dev-source: `victor/snolla`, сессия 2026-07-04, трек `viewmodel-graph-full-platform`. Оператор деплой одобрил (workshop ратифицировал 2026-07-04). +## 🟢 [tandemmebel-deploy-snolla-0-42-0] — Раскатить прод tandemmebel на `@snollajs/snolla@0.42.0` (core 0.24.0 / data 0.14.1) — engine-chain-обновление: перепил viewModel-навигации на единый ленивый cross-entity граф (EntityDrop/IndexDrop + декларативный GRAPH-реестр, includeX-запекание выпилено) + blog-вертикаль (blogAuthor / blog.archives / date-archive страницы) + path-фиксы. Всё TDD, опубликовано в registry, byte-verified двумя живыми консюмерами: artmone 17/17 byte-identical, tandemmebel 199/199 роутов Ф3-регресс 0 diff. Dev-source: `victor/snolla`, сессия 2026-07-04, трек `viewmodel-graph-full-platform`. Оператор деплой одобрил (workshop ратифицировал 2026-07-04). ## Топология — РЕШЕНА оператором: пересборка staging ДО cutover (вариант A) Оператор: «пусть всё переебашит с новыми версиями пакетов до cutover». Значит: @@ -1375,9 +1375,9 @@ tandemmebel-staging (стек 20) потеряет featured-вотермарк **Разрешения:** интерны: нет | автопуш: н/д (ops). **weight:** needs-human (боевой деплой живого сайта + engine-ядро) -**Status:** active -**Where I stopped:** РАЗБЛОКИРОВАНО — dev-source запушил бамп, sha `ed96b18` (`chore(deps): bump snolla 0.40→0.42`), пин+yarn.lock верифицированы = 0.42.0/core 0.24.0/data 0.14.1, tests 23/23. Начинаю сборку образа на VDS. -**Next action:** git archive ed96b18 → VDS → docker build `registry.kzntsv.site/tandemmebel:ed96b18` (--build-arg VERDACCIO_TOKEN) → push → pre-deploy SSR /projects→200 → передеплой стека 20 → completeness-DoD на новом образе (188 URL + gallery grid 15 роутов) +**Status:** done +**Where I stopped:** ✅ GOTOVO. Собрал `tandemmebel:ed96b18` (digest `ca4da79`) на VDS из sha ed96b18 (snolla 0.42.0/core 0.24.0/data 0.14.1, verdaccio publish подтверждён), запушил в registry, передеплоил стек 20 (Portainer PUT, env 8/8 сохранён, PullImage) → контейнер **healthy**, running image==ed96b18. Гейты GREEN на новом образе: **acceptance#1** SSR /→200, /projects→200 (title «Наши проекты мебели», не 500); **acceptance#2** completeness-DoD с VDS — sitemap **172/172 паритет, 0 real-fail** (prod200/staging-not200) + gallery-grid **12/12 точный паритет** (bedrooms 80/80…kids 138/138), крошки Главная/Мебель/Галерея наполнены==prod, title==prod, sharp отдаёт webp-байты (200 image/webp). archive-роуты N/A (projects archivesPath=""). Rollback наготове (RUVDS не тронут, b02ca18 в registry). +**Next action:** — (закрыто). Cutover остаётся отдельным DNS-gated шагом в [tandemmebel-web-vds-deploy] — образ к флипу теперь ed96b18. Follow-up для dev/workshop: Dockerfile печёт VERDACCIO_TOKEN в ARG/ENV-историю слоёв (2 warn SecretsUsedInArgOrEnv) — вынести в build-secret. **Branch:** n/a **Notify:** OpeItcLoc03/workshop diff --git a/.tasks/tandemmebel-deploy-snolla-0-42-0.md b/.tasks/tandemmebel-deploy-snolla-0-42-0.md index e856cd3..4705765 100644 --- a/.tasks/tandemmebel-deploy-snolla-0-42-0.md +++ b/.tasks/tandemmebel-deploy-snolla-0-42-0.md @@ -10,6 +10,7 @@ - `.wiki/concepts/labtools.pro-vds-deploy-runbook.md` — рунбук-зеркало ## Decisions log +- 2026-07-04: **CLOSED 🟢.** Staging пересобран на 0.42.0 (ed96b18), оба acceptance-гейта GREEN на новом образе (не унаследованы). Caveat dev-source подтвердился эмпирически: дельта 0.40→0.42 (archive-роуты) инертна на этой теме — completeness 172/172 + gallery 12/12 без диффов. Cutover остаётся отдельным DNS-gated шагом. Follow-up (не блокер): Dockerfile печёт VERDACCIO_TOKEN в ARG/ENV → build-secret (передано dev/workshop). - 2026-07-04: **BLOCKED на входе.** Проверил репо-провенанс: snolla-репо на 0.42.0 (`bcee2d4`, опубликовано), НО tandemmebel.ru origin/master `9fa30a7` пинит `@snollajs/snolla 0.40.0` — консюмер-бамп 0.40→0.42 не закоммичен/не запушен (ни один реф не содержит 0.42/0.24). Byte-verify «199/199 на 0.42.0» из тела таски гонялся против непушнутого локального бампа. Запросил у dev-source (victor/snolla inbox) коммит-бамп + sha. Peer-дисциплина: заявленный state таски ≠ реальность репо → репорт оператору, не проглатывать. - 2026-07-04: Топология A ратифицирована оператором+workshop. Cutover остаётся DNS-gated (внешнее событие). @@ -21,6 +22,13 @@ - [x] Вызваны обязательные скилы (using-tasks, project-discipline, using-vds-ops). - [x] Репо-провенанс проверен — блокер выявлен (консюмер-пин не запушен). - [x] Запрос на пуш бампа отправлен dev-source (victor/snolla). +- [x] Dev-source запушил бамп → sha `ed96b18`, верифицирован (пин+yarn.lock=0.42.0/core0.24.0/data0.14.1), verdaccio publish подтверждён (snolla 0.42.0, core 0.24.0, data 0.14.1 present). +- [x] Собрал образ на VDS `registry.kzntsv.site/tandemmebel:ed96b18` (digest ca4da79, 583MB, BUILD_EXIT=0), запушил в registry. +- [x] Обновил compose (source-of-truth) на ed96b18, PUT стека 20 через Portainer API (env 8/8 сохранён, PullImage) → контейнер healthy, running==ed96b18. +- [x] Acceptance#1: SSR / →200, /projects →200 (real title, не 500). +- [x] Acceptance#2 completeness-DoD с VDS: sitemap 172/172 паритет (0 real-fail), gallery-grid 12/12 точный паритет, крошки+title==prod, sharp webp serve-bytes ✅. +- [x] Обновил paused [tandemmebel-web-vds-deploy] — образ к флипу = ed96b18 (суперсидит b02ca18). +- [x] Таска → 🟢 done. ## Notes - Acceptance (из тела таски на борде): (1) pre-deploy SSR `/projects`+blog-listing → 200 не 500 (новые SELECT-колонки); (2) completeness-DoD перепрогнать на НОВОМ 0.42.0-образе (188 URL + gallery grid 15 роутов), не наследовать GREEN с 0.16.2; (3) archive-страницы НЕ блокер (projects archivesPath=""); (4) rollback наготове. diff --git a/host-stacks/vds-kzntsv/tandemmebel.compose.yml b/host-stacks/vds-kzntsv/tandemmebel.compose.yml index a1668e3..977ad2a 100644 --- a/host-stacks/vds-kzntsv/tandemmebel.compose.yml +++ b/host-stacks/vds-kzntsv/tandemmebel.compose.yml @@ -3,7 +3,7 @@ # STAGING-FIRST. Source-of-truth этого compose — admin-репо; применяется через Portainer # API/UI (VDS-rule: стеки через Portainer, не ssh+compose). # -# Модель: монолит @snollajs/snolla (0.34.0) / @snollajs/core (0.15.0) — читает БД-контент +# Модель: монолит @snollajs/snolla (0.42.0) / @snollajs/core (0.24.0) / data (0.14.1) — читает БД-контент # MoreThenCms (mssql.kzntsv.site) + server-side Liquid render. Ассеты из MinIO (minio.kzntsv.site). # МЕДИА: in-process sharp (resize+data-driven watermark), delivery=serve-bytes, cache=local-variant→ # бакет variant-cache в MinIO. imgproxy ИЗ ПУТИ tandem УБРАН (сырой /imgproxy → 404 норма). @@ -11,7 +11,7 @@ # КОНТЕНТ+БЛОГ-ПОРТФОЛИО+category сайт, БЕЗ e-commerce каталога. # # Образ собирается АДМИНОМ на VDS из victor/tandemmebel.ru/deploy/Dockerfile (build-arg VERDACCIO_TOKEN, -# @snollajs/* из verdaccio.kzntsv.site). Тег = git-sha монорепы tandemmebel.ru (a173401). +# @snollajs/* из verdaccio.kzntsv.site). Тег = git-sha монорепы tandemmebel.ru (ed96b18). # # Домен: STAGING — tandemmebel.vds.kzntsv.site (под wildcard *.vds.kzntsv.site, cert LE HTTP-01 авто). # Cutover live tandemmebel.ru/www.tandemmebel.ru — ОТДЕЛЬНЫЙ gated шаг: бой живой на RUVDS IIS, НЕ выводить. @@ -29,7 +29,7 @@ services: tandemmebel: container_name: tandemmebel - image: registry.kzntsv.site/tandemmebel:b02ca18 # git-sha victor/tandemmebel.ru master (core 0.16.2 SlugFeedPage/gallery fix) + image: registry.kzntsv.site/tandemmebel:ed96b18 # git-sha victor/tandemmebel.ru master (snolla 0.42.0 / core 0.24.0 / data 0.14.1 — viewmodel-graph + blog-archive) restart: unless-stopped environment: NODE_ENV: production