Files
admin/.tasks/NEXT_SESSION.md
vitya fd48df6225 feat(emspb): v3 cutover LIVE — snolla 0.42.1→0.43.2 (aws-sdk v2→v3)
5-й сайт тиража v3 (5/6 GREEN). In-place bump стека 18 (DNS на VDS с
2026-07-02). Commit victor/emspb.ru 5afd8a1 (bump + resolutions + yarn.lock
реген). Build на VDS → registry.kzntsv.site/emspb:5afd8a1 digest 72bb59fc.
Staging :5082 parity-gate GREEN (29/29 routes 200, theme assets 7/7 md5
IDENTICAL — v3 S3-direct read из vds MinIO 2025). Portainer PUT stack 18
env-preserving (8/8, node in-memory put-stack), prune:false pullImage:true.
Live smoke GREEN. Rollback = 95a5c42 (v2).

- emspb.compose.yml: 95a5c42→5afd8a1
- emspb-vds-deploy-runbook: §0.43.2
- minio-split-cutover-runbook: progress-table emspb , остался tandemmebel
- NEXT_SESSION: 5/6 GREEN, остался tandemmebel (стек 20, был BLOCKED на
  sharp-staging дефекте — проверить перед бампом)

Остался 1 сайт: tandemmebel.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-30 17:46:19 +03:00

18 KiB
Raw Blame History

_last_updated_, session_id, prev_session_id
_last_updated_ session_id prev_session_id
2026-07-30T14:45:00Z 2026-07-30-emspb-v3-cutover 2026-07-30-labtools-pro-v3-cutover

Next session handoff

Эта сессия — emspb.ru v3 cutover. ЗАВЕРШЁН

5-й сайт тиража v3 (после on-snolla, kupimknigi, labtools.ru, labtools.pro). Тот же паттерн, отработан чисто. 5/6 GREEN. emspb = стек 18, in-place bump (DNS на VDS с 2026-07-02).

Что сделано

  • Bump: @snollajs/snolla 0.42.1→0.43.2 в apps/web/package.json (commit 5afd8a1) + resolutions-блок в root package.json (verbatim labtools.ru) + реген yarn.lock (single @smithy/signature-v4@5.3.11 deduped). Pushed victor/emspb.ru master 218c3ae..5afd8a1. Endpoint fix 218c3ae (s3.endpoint→minio.vds.kzntsv.site) был в master с 2026-07-29, но в бегущем образе 95a5c42 (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio.
  • Build на VDS: git archive 5afd8a1~/build/emspbdocker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKENregistry.kzntsv.site/emspb:5afd8a1(+latest), digest sha256:72bb59fc355d…, EXIT=0. yarn install --immutable в Docker прошёл (yarn.lock matches, no YN0028).
  • Staging :5082 parity-gate GREEN: throwaway контейнер из env живого стека 18 (8 секретов, --network proxy). robots md5 940a0903… identical (31B); sitemap index→sitemap-pages-1.xml 29 locs == live; 29/29 sitemap-роутов 200/200, 0 status diffs (+2B host-context benign); theme assets 7/7 md5 IDENTICAL (v3 aws-sdk v3 S3-direct read из vds MinIO 2025: snolla-framework/bootstrap/toolbox/theme/slick + images/2.jpg + /images/3.jpg 115618B); redirects 301 parity (modulo host), /index.php+/services 404 parity.
  • Portainer PUT stack 18 LIVE: node in-memory put-stack (Node 22 global fetch, compose в JS-var; GET /stacks/18 для Env + /stacks/18/file для StackFileContent — StackFileContent НЕ на /stacks/{id}, только на /stacks/{id}/file), env 8/8 preserved, prune:false pullImage:true mem_limit 512m. PUT 200. Контейнер 5afd8a1 healthy ~1s.
  • Live smoke GREEN: / 200 54615B, /contacts+/portfolio+/prices 200, /services+/index.php 404, robots md5 identical, sitemap 29 locs, theme assets md5 LIVE==staging (v3 S3-direct), redirects 301 (target www.emspb.ru — byte-identical post-cutover), apex emspb.ru 200. Лог чист. TLS не тронут. Rollback = 95a5c42 (v2 0.42.1, жив в registry).
  • Compose (admin source-of-truth) синхронно закоммичен 95a5c425afd8a1. emspb-vds-deploy-runbook §0.43.2 + minio-split-cutover-runbook progress-table обновлены.

Предыдущая сессия — labtools.pro v3 cutover. ЗАВЕРШЁН

4-й сайт тиража v3 (после on-snolla, kupimknigi, labtools.ru). Тот же паттерн, отработан чисто. 4/6 GREEN. labtools.pro = English-twin (Culture=en) labtools.ru, отдельный репо victor/labtools.pro, image name labtools-pro (НЕ labtools), стек 19.

Что сделано

  • Bump: @snollajs/snolla 0.42.1→0.43.2 в apps/web/package.json (commit 12f8992) + resolutions-блок в root package.json (verbatim labtools.ru) + реген yarn.lock (commit a106622, single @smithy/signature-v4@5.3.11 deduped). Pushed victor/labtools.pro master 6c7ea88..a106622. Endpoint fix 6c7ea88 (s3.endpoint→minio.vds.kzntsv.site) был в master с 2026-07-29, но в бегущем образе 0610432 (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio.
  • Build на VDS: git archive a106622~/build/labtools-prodocker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKENregistry.kzntsv.site/labtools-pro:a106622 (+latest), digest 2152642c4b17, 476MB, EXIT=0.
  • Staging :5081 parity-gate GREEN: throwaway контейнер из env живого стека 19 (8 секретов). /+nav+catalog = 4-байт diff = og:url/og:image request-host (localhost:5081 vs www.labtools.pro, benign → byte-identical post-cutover). Redirects IDENT, robots/sitemap IDENT (7 детей == live), theme lato.css 200 9994B md5-identical (v3 aws-sdk v3 S3-direct read из vds MinIO 2025), order-parity press-forms 12 изделий identical. Всё 200/3xx.
  • Portainer PUT stack 19 LIVE: node in-memory put-stack (НЕ PS), env 8/8 preserved, prune:false pullImage:true mem_limit 512m. PUT 200. Контейнер a106622 healthy сразу. Source-of-truth compose синхронно закоммичен (admin 0610432a106622).
  • Live smoke GREEN: / 200 12736B, /about+/contacts 200, robots/sitemap 200 (7 детей 200), 3 каталог-секции 200, продукты 200, theme lato.css 200 9994B (v3 S3-direct), redirects parity, apex labtools.pro 200. TLS CN=labtools.pro не тронут (LE до Sep 30). /clients+/cookie+/privacy→404 = ожидаемо (не в sitemap .pro; real nav = / /about /contacts). Rollback = 0610432 (v2 0.42.1, жив в registry).

Предыдущая сессия — labtools.ru v3 cutover. ЗАВЕРШЁН

Третий сайт тиража (после on-snolla + kupimknigi). Тот же паттерн, отработан чисто. 3/6 GREEN.

Что сделано

  • Bump: @snollajs/snolla 0.42.1→0.43.2 в apps/web/package.json + resolutions-блок в root package.json (commit 0dc0b4e, pushed victor/labtools.ru master). yarn install: single @smithy/signature-v4@5.3.11 (deduped). Endpoint fix 4f3314f (s3.endpoint→minio.vds.kzntsv.site) был в master с 2026-07-29, но в бегущем образе 566d41c (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio.
  • Build на VDS: git archive 0dc0b4e~/build/labtoolsdocker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKENregistry.kzntsv.site/labtools:0dc0b4e (+latest), EXIT=0.
  • Staging :5080 parity-gate GREEN: throwaway контейнер из env живого стека 17 (8 секретов). / byte-identical с real Host (18594B), theme asset lato.css 200 9239B byte-identical (v3 aws-sdk v3 S3-direct read из vds MinIO 2025), robots 200/200, sitemap = index 38 page-locs == live (identical set, 0 diff), self-consistency 0 bad (все 200/3xx), catalog section /products/accessories byte-identical (order-parity ).
  • Portainer PUT stack 17 LIVE: node in-memory put-stack (НЕ PS), env 8/8 preserved, mem_limit 512m уже в compose, prune:false pullImage:true. PUT 200. Контейнер 0dc0b4e healthy сразу. Source-of-truth compose синхронно закоммичен (admin).
  • Live smoke GREEN: / 200, www 200, robots/sitemap 200, menu pages (about/clients/contacts/cookie/privacy) 200, /products/press-forms+/products/accessories+/products/laboratory-ball-mills 200, theme lato.css 200 9239B (v3 S3-direct). TLS CN=labtools.ru не тронут (LE до Sep 30). /products (bare)+/products/presses→404 = ожидаемо (не в sitemap; real section = /products/press-forms). Rollback = 566d41c (v2 0.42.1, жив в registry).

Предыдущая сессия — kupimknigi.spb.ru v3 cutover. ЗАВЕРШЁН

Второй сайт тиража (после on-snolla пилота). Тот же паттерн, отработан чисто.

Что сделано

  • Bump: @snollajs/snolla 0.42.0→0.43.2 в apps/web/package.json + resolutions-блок в root package.json (commit 5364353, pushed victor/kupimknigi.spb.ru master). yarn install: single @smithy/signature-v4@5.3.11 (deduped).
  • Build на VDS: git archive (gitea-SSH нет) → ~/build/kupimknigidocker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKENregistry.kzntsv.site/kupimknigi:5364353 (+latest), EXIT=0.
  • Staging :5079 parity-gate GREEN: throwaway контейнер из env живого стека 21. / byte-identical с real Host (Host: kupimknigi.spb.ru), theme asset toolbox.css 200 35799 B byte-identical (v3 aws-sdk v3 S3-direct read из vds MinIO 2025), robots 200, /callback-order/→301. 3-байт diff без Host = form hidden url=request-URL (benign request-context).
  • Portainer PUT stack 21 LIVE: node in-memory put-stack (НЕ PS — кириллица compose), JWT re-auth перед PUT, env-preserving 8/8, prune:false pullImage:true mem_limit 512m. PUT 200. Source-of-truth compose синхронно закоммичен (admin 6f6fab1d).
  • Live smoke GREEN: / 200 17708 B, H1 «Скупка книг на дому в СПб…», robots/sitemap 200, /callback-order/→301, theme asset 200 35799 B. Контейнер 5364353 healthy. TLS LE до Oct 3 (не тронут). Rollback = 9608ff6 (v2, жив в registry).
  • Bundles a83e2a9 endpoint fix (minio.kzntsv.site→minio.vds.kzntsv.site) — был в репо с 2026-07-29, но в бегущем образе 9608ff6 его не было; v3 cutover заодно перевёл S3-direct read на vds minio.

User разворот 2026-07-30: v3 (aws-sdk v2→v3) — конечная цель, v2-пилот был промежуточным доказательством. on.snolla.com = v3-пилот. Скоординировано с snolla-сессией (peer, inter-session): snolla опубликовала v3, admin зарезал боевой cutover.

Что сделано

  • Snolla v3 опубликована (verdaccio latest, 2026-07-30): @snollajs/liquid 0.11.0 + data 0.15.0
    • core 0.26.4 (peerDep @snollajs/data widen <0.15.0<0.16.0баг-фикс капа из 21c73aa)
    • @snollajs/snolla 0.43.2 (@smithy pin + @aws-sdk/client-s3 3.1005.0 exact baked в deps). Snolla commit a8b198d. Тесты core 259/259, snolla 120/120.
  • Live MinIO verify ЗЕЛЁНЫЙ (snolla, оба конфига vs minio.vds.kzntsv.site): Run A (resolutions, @smithy/signature-v4 5.3.11) + Run B (БЕЗ resolutions, 5.6.12) — оба LIST/READ-PARITY/PUT/GET/MULTIPART OK. Переворот: regression-гипотеза v3 SigV4 vs MinIO НЕ воспроизвелась end-to-end — 5.6.12 работает против vds MinIO 2025. «CONFIRMED» framing (slipstream без live-теста) откатан.
  • on.snolla.com v3 cutover LIVE 2026-07-30T11:28Z: bump @snollajs/snolla 0.42.1→0.43.2 в apps/web/package.json + resolutions (@aws-sdk/client-s3 3.1005.0 + @smithy chain 5.3.11) в root package.json (optional determinism — verify доказал что и без них работает, pin для version-stability). Commit eb8c143 (pushed on.snolla.com origin/master). Build на VDS (archive → ~/build/on-snolladocker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN) → registry.kzntsv.site/on-snolla:eb8c143 (+latest). Throwaway staging :5078 из env live-контейнера → parity-gate GREEN (theme asset 200 97324 B byte-identical, sitemapindex+3 sub-sitemaps byte-identical, /c 404 parity). Portainer PUT stack 22 env-preserving (8/8, node in-memory put-stack), prune:false, pullImage:true, mem_limit 512m. Live smoke GREEN: / 200, robots/sitemap/sub-sitemaps 200, /yandex 200, theme asset 200 97324 B (v3 aws-sdk v3 S3-direct read из vds MinIO 2025). TLS не тронут (LE до Oct 18). Rollback = 07db7e3 (v2, жив).
  • Дисциплина-фикс: runbook перенесён scripts/minio-split-cutover/runbook.md.wiki/concepts/minio-split-cutover-runbook.md (конвенция: runbook'и в .wiki/concepts/, не scripts/). Креды в bash-примерах нормализованы → pass show minio-vds/full-env (wiki-конвенция «креды в pass, не в git»). +index.md, +log.md, +v3-секция в on-snolla-vds-deploy-runbook.md.

Коммуникационный косяк сессии (честно)

Прошлая сессия зарепортила on-snolla v2-пилот как «ЗАВЕРШЁН », утопив что v3 (конечная цель) — не начата (snolla ждёт, 0.43.x не опубликована). User rightfully взбесился («что за поебень, всё рапортовали готово»). Плюс v3 regression-гипотеза была зацементирована как «CONFIRMED» без end-to-end live-теста — snolla поймала это consumer-verify'ем. Уроки: (1) «готово» = цель на железе, не подцель зарезана; (2) verify end-to-end против живой цели, НЕ trust halted-bisect гипотезе / НЕ лепи «CONFIRMED» без live-теста. Записано в memory.

Recent commits (этот репо, .admin)

  • f56eb2f8 feat(on-snolla): v3 cutover LIVE — snolla 0.43.2 (aws-sdk v2→v3) + runbook migration
  • afb6e5f0 meta(handoff): fix stale tandemmebel "blocked" — LIVE since 2026-07-12

Open треки

Трек Готовность Entry-point
B3 v3 — emspb LIVE 2026-07-30 эта сессия — см. ↑ §Эта сессия
B3 v3 — labtools.pro LIVE 2026-07-30 prev session
B3 v3 — labtools.ru LIVE 2026-07-30 prev session
B3 v3 — kupimknigi LIVE 2026-07-30 prev session
B3 v3 — on.snolla.com LIVE 2026-07-30 prev session
B3 v3 — ostatся 1 сайт (tandemmebel) TODO — v3-паттерн отработан x5 (5 GREEN) .wiki/concepts/minio-split-cutover-runbook.md §B3-v3 + per-site -vds-deploy-runbook.md
MinIO split Track A (books-vds minio 2020→2025) TODO — transparent, отдельно runbook §Track A
MinIO split B4 .NET catch-all админ s3 endpoint TODO — C:\sites\snolla\Web.config serviceURL → minio.vds.kzntsv.site runbook §B4
MinIO split B5 Obsidian Remotely Save endpoint TODO — obsidian бакет смиррорен, можно менять runbook §B5; memory obsidian-remotely-save-endpoint-after-mirror
books-task-runner-registry-auth-cred 🔵 blocked — cred в config-volume, рабочий образ содержит СТАРЫЙ registryGc; тега master-a3734d5 в реестре нет .tasks/STATUS.md §books-task-runner

Спроси user'а

  • Следующий сайт тиража v3 — 5/6 GREEN (on-snolla, kupimknigi, labtools.ru, labtools.pro, emspb). Остался: tandemmebel (стек 20 — был BLOCKED на sharp-staging визуальном дефекте, проверить перед бампом). Паттерн отработан x5: bump @snollajs/snolla→0.43.2 + resolutions + реген yarn.lock (иначе Dockerfile yarn install --immutable падает) → build на VDS → staging :50XX parity-gate → Portainer PUT (node in-memory put-stack, env-preserving). NB: yarn.lock реген — обязателен; Portainer StackFileContent брать с /stacks/{id}/file, не /stacks/{id}.
  • stostayer v3-трек (0.43.1/0.7.8/0.17.2) — HOLD, snolla-scope, НЕ подхватывать без GO user (snolla ждёт stostayer-specific).

Не делать (preemptive guards)

  • verify end-to-end против живой цели, НЕ trust halted-bisect гипотезе — и НЕ лепи «CONFIRMED» без live-теста (косяк этой сессии, см. memory aws-sdk-v3-smithy-sigv4-minio-regression).
  • resolutions OPTIONAL, НЕ mandatory — live verify доказал: 5.6.12 работает vs vds MinIO 2025. Resolutions = determinism-hardening, не SigV4-необходимость. Не пугать framing «упадёт без resolutions».
  • НЕ пушить образы в docker.stostayer.ru:443 (VPN-бан). Registry = registry.kzntsv.site (vds), build на VDS — ок.
  • НЕ лезть в прод-БД stostayer — user остановил. Диагностика через логи контейнера + исходники.
  • Portainer PUT: node in-memory, НЕ PS Invoke-RestMethod (корраптит кириллицу compose). API-key работает для PUT (200), JWT только для stack CREATE.
  • curl /tmp/ vs node /tmp/ на Windows расходятся — in-memory в одном node-скрипте, без temp-файлов.
  • Дисциплина: runbook'и → .wiki/concepts/<slug>-runbook.md, не scripts/. scripts/ только для executable. Креды → pass, не plaintext в git.
  • VDS gitea-SSH нет (Permission denied publickey) — сборка на VDS через git archive (локально) → transfer → extract, не git clone на VDS.

Memory updates за сессию

  • UPDATE aws-sdk-v3-smithy-sigv4-minio-regression.md — «CONFIRMED» секция исправлена: dual-instance реален, но 5.6.12 работает vs vds MinIO 2025 (live verify end-to-end); resolutions = optional determinism НЕ mandatory; v3 опубликована (snolla 0.43.2). Урок: не лепи CONFIRMED без live-теста.
  • UPDATE aws-sdk-v2-minio-2025-works-no-smithy-pin.md — путь runbook'а.wiki/concepts/.
  • MEMORY.md index обновлён (v3 строка + corrected framing).
  • (runbook migration + per-site v3 секция — в .wiki/, не memory.)