DNS reg.ru flipped, traefik Host-rule staging->prod, LE cert issued.
Live-smoke GREEN: all pages 200, sitemap 184 locs, sharp media OK.
Gotham-Pro.css latent prod bug fixed by cutover (0B->4436B).
Snolla 0.42.x tirazh now fully alive (5/5 stacks on VDS).
Тираж snolla (labtools.ru/17, emspb/18, labtools.pro/19, tandemmebel/20,
kupimknigi/21) шёл без mem_limit → cgroup-cap = вся память хоста (12.9 GiB),
одна течь могла съесть весь бокс. Выставил 512m (baseline ~100-200M, 2.5-5x запас)
на всех 5 живых стеках через env-preserving Portainer PUT + синхронизировал
source-of-truth compose. Все healthy, limit=536870912 подтверждён, labtools.pro 200.
Конвенция «app-стек обязан нести mem_limit» закреплена в
portainer-stack-management-vds § Convention + step 6 snolla-bump-рецепта.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Закрыт пропуск: тираж 0.42.1 не был зафиксирован в вике (таски emspb/labtools.pro
просили using-wiki).
- NEW concepts/snolla-live-prod-inplace-image-bump.md — переиспользуемый рецепт
(build на VDS → throwaway-staging-acceptance С VDS → env-preserving Portainer PUT
put-stack.js → live-smoke), встроен put-stack.js, гочи.
- UPDATE 3 рунбука секцией «0.42.1 in-place bump» (labtools.ru/emspb/labtools.pro)
с образами/acceptance/rollback.
- FIX orphan: все 3 deploy-рунбука добавлены в index.md (не были каталогизированы).
- log.md: decision-запись.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Финал тиража. dev-source victor/kupimknigi.spb.ru HEAD 9608ff6, код закрыт
(re-review PASS, docker-валидация GREEN). Одностраничник — deploy тривиальный.
Cutover operator-gated (kupimknigi DNS сейчас на RUVDS, разрулим отдельно).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
[tandemmebel-deploy-snolla-0-42-0] 🟢 done. Собран на VDS, стек 20 healthy,
acceptance#1 SSR /projects→200, acceptance#2 completeness-DoD с VDS зелёный.
Cutover остаётся DNS-gated ([tandemmebel-web-vds-deploy]) — образ к флипу=ed96b18.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Ребилд по ops-таску workshop: образ tandemmebel:a173401 (snolla 0.35.0/core
0.16.0/data 0.13.0, digest 6962bd97) собран на VDS, стек 20 передеплоен через
Portainer API (env 8/8, healthy). FeedPages чинит роутинг gallery 404→200 (12/12).
RED на рендер-чеке: gallery-grid пустой на всех роутах (staging /galleries/*/images
= 0 vs prod 24/80/62), breadcrumb itemprop=name пустые. Корень — FeedPage-VM не
прокидывает item в шаблон. Деплой чист; фикс на прогере. Пропинговал с уликами.
Cutover HELD.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Session end. tandemmebel тираж: sharp-staging (стек 20, образ 68b93a9) зелёный по авто-гейтам,
но оператор на визуальной проверке https://tandemmebel.vds.kzntsv.site нашёл новый визуальный
дефект (специфику не назвал → спросить в новой сессии). Cutover HELD, RUVDS не тронут.
NEXT_SESSION.md с полной хронологией + состоянием инфры + cutover-планом + peer-дисциплиной.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Создан бакет variant-cache в shared MinIO (minio.kzntsv.site/books-vds) для sharp resize+watermark вариантов
(S3-эквивалент легаси App_Data/imageCache; без него 500 NoSuchBucket на всех sharp-картинках).
Грант: snolla S3-креды == MinIO root (сверено) → mode-server-fs даёт полный доступ by construction, IAM не нужен.
Write-verify под деплойными кредами: put→stat→get(md5 match 78fab481)→delete→gone. Другие бакеты не тронуты.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Оператор сменил watermark-подход на in-process sharp → снял глиф со SHARED imgproxy стека 29 (books-vds).
Вырезал IMGPROXY_WATERMARK_DATA (byte-identical pre-watermark бэкапу, cross-check true) → PUT+redeploy+purge.
Verify: pilorama98 (главный консюмер) 3 рендера == baseline (43950/172042/160010B); stostayer НЕ imgproxy-консюмер (не задет); tandem featured→чистый (ожидаемо). Глиф-бинарь 7127e92a оставлен для sharp.
tandemmebel-deploy теперь ждёт пересбора образа на sharp-пин.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Ops-подхват по тиражу tandemmebel. Воркшоп попросил выставить брендовый
глиф-вотермарк на imgproxy стек 29 (books-vds, отдаёт картинки всем тенантам).
Первый base64 (в inbox И в закоммиченном таске) был БИТЫЙ на источнике —
tasks_create порезал 10КБ-поле: sha f8f0…≠e995…, IEND нет, зацикленный хвост.
Поймал sha256-сверкой ДО прода → не запушил битьё (imgproxy бы упал на парсе
WATERMARK_DATA = отвал картинок у всех тенантов).
Воркшоп до-доставил logo.png бинарём в git (7127e92a, sha256 e995…971fc, 8015B).
PUT стека 29 (Portainer portainer.kzntsv.site ep1, X-API-Key, IMGPROXY_WATERMARK_DATA
inline env, PullImage:false, БЕЗ глобального _OPACITY).
Smoke cache-busted: A tandem вотермарк виден глазами (27294→27820B);
B pilorama контроль byte-identical 160010B — глобальная opacity не просочилась.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Durable binary channel for [imgproxy-watermark-glyph-books-vds] — base64-in-task got
corrupted in transit (field truncation looped PNG tail, dropped IEND). This is the
verified-intact 348x42 RGBA wordmark. Admin: git show this path, sha256==e995...971fc,
then set IMGPROXY_WATERMARK_DATA=base64(this file) on imgproxy stack 29.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>