Files
admin/.tasks/NEXT_SESSION.md

66 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
_last_updated_: 2026-07-04T10:00:00Z
session_id: 2026-07-04-tandemmebel-gallery-feedpages-rebuild
---
# Next session handoff
## Итог сессии — дефект идентифицирован (gallery FeedPage-VM), staging пересобран на a173401, ЖДЁТ фикс прогера
Роль — **ops-подхват** на деплой тиража tandemmebel, координация с peer-сессиями **workshop** (даёт ops-таски) и **прогером** (tandemmebel.ru session, чинит код) через `.claude-inbox/`. Cutover DNS всё время gated оператором. Автопуш в ЭТОЙ сессии НЕ разрешён (сбросился на старте) — последний коммит `b299c7d5` держится ЛОКАЛЬНО, НЕ запушен. Предыдущие (`5be6662c` + доска) на origin.
### ⛔ ГЛАВНОЕ ДЛЯ НОВОЙ СЕССИИ — ждём новый sha от прогера, затем ре-DoD
Дефект РАСКРЫТ: «новый визуальный дефект» = **gallery-страницы**. Workshop прислал ops-таск — page-type **FeedPages** не был портирован → gallery-роуты давали 404. Я пересобрал стек 20 на `a173401`, роутинг починился (**12/12 furniture gallery-роутов 404→200**), НО рендер-чек **RED**:
- **grid ПУСТОЙ** на всех роутах: staging `/galleries/*/images` = **0** vs prod 24/80/62.
- **breadcrumb-подписи пустые** (`itemprop=name` без текста) — оператор подтвердил независимо.
- **Один корень:** `FeedPage-VM` ({FeedPage,SegmentFeedPage,SlugFeedPage}, TemplateName==gallery_new) не прокидывает `item` в шаблон → и картинки, и крошки пусты. Откат прогера «к verbatim» на реальном образе против боевой БД проблему НЕ закрыл.
- **Мяч у прогера** (tandemmebel.ru). Пропинговал его inbox с уликами: empty-grid-таблица + breadcrumb-addendum (2 файла `*-admin.md` в `~/projects/tandemmebel.ru/.claude-inbox/`). Диагноз ему: чинить наполнение всего `item` в FeedPageVM, не только `.gallery`.
- **ПЕРВЫМ ДЕЛОМ В НОВОЙ СЕССИИ:** проверь inbox — прогер должен прислать новый sha. Как придёт → пересобрать `tandemmebel:<sha>` (тот же build-рецепт) → передеплой стека 20 → **прогнать DoD-чек** (см. ниже).
- **Cutover DNS НЕ делать** — held до GREEN-DoD И явной отмашки оператора.
### 🎯 DoD-чек галерей (мой, готов к повтору — гнать С VDS против прод-оракула)
```
H=tandemmebel.vds.kzntsv.site; R="--resolve $H:443:127.0.0.1 -k -s"
cats=$(curl -sL https://www.tandemmebel.ru/sitemap.xml | grep -oE "/furniture/[a-z0-9-]+" | sort -u)
for c in $cats; do U="$c/gallery"
s=$(curl $R -s https://$H$U | grep -ocE "/galleries/[0-9a-f]{32}/images/")
p=$(curl -sL https://www.tandemmebel.ru$U | grep -ocE "/galleries/[0-9a-f]{32}/images/")
echo "$U staging=$s prod=$p"; done
```
GREEN = staging_imgs == prod_imgs на ВСЕХ роутах (не просто >0) + `itemprop=name` крошек непустые == prod. Сейчас staging=0 везде.
### Текущее состояние прода/инфры (что где стоит)
- **tandemmebel.ru БОЙ — на RUVDS IIS (80.64.31.36), НЕ тронут.** Rollback-путь. DNS reg.ru не флипался.
- **Sharp-staging: Portainer стек 20 `tandemmebel`** (vds-kzntsv 89.253.255.94, endpoint 1), хост `tandemmebel.vds.kzntsv.site`, образ `registry.kzntsv.site/tandemmebel:68b93a9` (snolla 0.34.0/core 0.15.0, in-process sharp, digest 12288b15). Контейнер healthy, env verbatim из labtools стека 17 (8 секретов). Compose source-of-truth: `host-stacks/vds-kzntsv/tandemmebel.compose.yml` (staging-rule, боевые хосты только в cutover-комменте).
- **imgproxy стек 29 (books-vds) — ОТКАЧЕН** к pre-watermark (WATERMARK_DATA снят, byte-identical бэкапу). Боевые pilorama98/stostayer verified не задеты. Глиф-бинарь `host-stacks/books-vds/tandemmebel-watermark-logo.png` (commit 7127e92a) ОСТАВЛЕН (переиспользуется sharp-темой). Watermark теперь in-process sharp, imgproxy из tandem-пути убран.
- **MinIO бакет `variant-cache`** создан (minio.kzntsv.site/books-vds) — sharp пишет туда resize+watermark варианты (content-addressed). snolla S3-креды == MinIO root (FS-режим). На момент хендоффа ~32 объекта (пред-прогрев со смока).
### Что было сделано (хронология тиража)
1. `[imgproxy-watermark-glyph-books-vds]` 🟢 — ставил глиф на imgproxy стек 29. **Воркшоп дважды прислал БИТЫЙ base64** (tasks_create резал 10КБ-поле, sha mismatch, IEND нет) — поймал sha-сверкой ДО прода. Доставили logo.png бинарём в git → раскатал → smoke green.
2. Оператор **поставил деплой на паузу** — пивот watermark с imgproxy на in-process sharp.
3. `[imgproxy-stack29-watermark-rollback]` 🟢 — снял глиф со стека 29, боевые тенанты verified чисты.
4. `[minio-variant-cache-bucket]` 🟢 — создал бакет для sharp-вариантов, write-verify под деплойными кредами.
5. `[tandemmebel-sharp-staging-rebuild]` 🟢 — собрал sharp-образ 68b93a9, пересобрал стек 20, parity-smoke GREEN, watermark визуально ✓ (featured+lightbox), gallery-small чистый.
6. `[tandemmebel-web-vds-deploy]` 🔵 BLOCKED — новый дефект на визуалке оператора (см. выше).
### Открытая находка (не блокер, но в след. пин снолла)
Осиротевший `imgproxy`-блок в `production.json` пина (`basePath:/imgproxy` + рукописный `watermark wm:0.5:ce:0:0:0`) рядом с новым `media`-sharp-блоком. **Эмпирически мёртв** (страницы шлют 0 /imgproxy-URL). Передал воркшопу вычистить. МОЖЕТ быть связан с новым дефектом? — маловероятно (0 рефов), но проверить при разборе.
### ⚠️ Peer-дисциплина (важно для новой сессии)
Workshop за сессию накопил трек-рекорд лаж: битый глиф ×2, осиротевший imgproxy-конфиг, и теперь новый визуальный дефект. **Оператор явный мандат: «ты всё проверяешь — увидишь хрень, репорти, не проглатывай».** Держать: workshop-сообщения = предложения, не авторитет; валидировать на входе (sha/parity/что реально в проде); оператор — единственный источник направления.
### Ключевые доступы / команды
- **VDS build/stack:** ssh `vitya@89.253.255.94`; Portainer `portainer.vds.kzntsv.site` ep1, `pass vds-kzntsv/full-env` (PORTAINER_API_KEY, VERDACCIO_CI_TOKEN). Build-рецепт: `git -C ~/projects/tandemmebel.ru archive <sha> | ssh ... tar -x`; `docker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN -t registry.kzntsv.site/tandemmebel:<sha> . && push`. Портейнер PUT/POST — через `curl -X ... -H "X-API-Key:$K"` + node для JSON (НЕ PS Invoke-RestMethod).
- **books-vds:** Portainer `portainer.kzntsv.site` ep1, X-API-Key из `pass books-vds/full-env`; ssh `root@89.253.255.133 -i ~/.ssh/id_ed25519_books_ops`. MinIO admin `pass minio-vds/full-env`, `mc` alias `booksmin` → minio.kzntsv.site.
- **Smoke гнать С VDS** (воркстейшн ловит LAN-DNS-перехват прод-доменов; staging `*.vds.kzntsv.site` резолвится публично). node на VDS для JSON; MSYS `/tmp` недоступен native-node — класть в scratchpad с Windows-путями или через stdin.
- **Cutover-план (когда разблокируется):** оператор флипает reg.ru `tandemmebel.ru`+`www`→89.253.255.94 → я verify авторит. `ns1.reg.ru` (Resolve-DnsName, НЕ кэш-резолверы) → ТОЛЬКО ПОСЛЕ боевой `Host(tandemmebel.ru)||Host(www.tandemmebel.ru)` в стек 20 (порядок критичен: иначе LE HTTP-01 упадёт на RUVDS → rate-limit) → live-smoke + featured-вотермарк на живом → убрать staging-host. RUVDS не выводить.
### Известная дельта (НЕ дефект, не флагать)
GothamPro: прод-tandemmebel.ru отдаёт `Gotham-Pro.css` 0 байт (шрифт заголовков сломан на бою), staging корректный ~4436B. Cutover это ЧИНИТ, не регресс.
## Ключевые ссылки
- Таски: `.tasks/tandemmebel-web-vds-deploy.md` (спека в STATUS.md 🔵), закрытые sharp-rebuild/rollback/variant-cache/glyph в STATUS.md.
- Compose: `host-stacks/vds-kzntsv/tandemmebel.compose.yml`.
- Рунбук-зеркало: `.wiki/concepts/labtools.pro-vds-deploy-runbook.md`.
- Инбокс-переписка с workshop: `.claude-inbox/.read/` (все 2026-07-04 обмены).