Files
admin/.tasks/NEXT_SESSION.md
vitya 0346d5243b meta(handoff): session 2026-07-31 — maljarka restore + variant-cache fix + labtools-cylindrical (→ workshop)
maljarka.tandemmebel.ru восстановлен (7-й сайт, стек 23, LIVE).
variant-cache bucket создан на vds 2025 (shared v3-регрессия sharp-images).
labtools cylindrical product-cards: snolla Linked-item VM bug → handoff victor/snolla
(не v3-регрессия; мой фикс откат, prod не тронут).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-31 10:47:57 +03:00

19 KiB
Raw Blame History

_last_updated_, session_id, prev_session_id
_last_updated_ session_id prev_session_id
2026-07-31T10:00:00Z 2026-07-31-maljarka-restore-variantcache-labtools 2026-07-30-tandemmebel-v3-cutover

Next session handoff

Эта сессия — maljarka restore + variant-cache fix + labtools cylindrical (расследование). ЗАВЕРШЕНА

1. maljarka.tandemmebel.ru восстановлен — 7-й сайт тиража (стек 23) LIVE GREEN

User: «проебали сайт maljarka.tandemmebel.ru». Root cause: .NET MoreThenCms tenant, не входил в v3 тираж, остался на RUVDS IIS → потерян при decomm RUVDS 2026-07-21 (DNS перебросили на VDS, но Host-правила+snolla-app с siteId A2476738 не было → traefik 404; аудит 21.07 «VDS=200» = false-positive с локального IIS воркстейшна). Восстановлен как Node snolla-app 0.43.2 (клон on.snolla.com → victor/maljarka.tandemmebel.ru 7f03d67, layout.liquid byte-identical рендеру .NET-admin 43730B sha256-match, Reversal тема уже в MinIO, regen yarn.lock под переименованный workspace). Portainer стек Id 23, env 8/8 shared, mem_limit 512m, LE issued (CN=maljarka.tandemmebel.ru, до Oct 29). Live smoke GREEN. Тираж 7/7. Runbook .wiki/concepts/maljarka-vds-deploy-runbook.md. Memory maljarka-lost-on-ruvds-decomm-restored.

2. variant-cache bucket fix — shared v3-регрессия (остров sharp-images на 6 сайтах)

maljarka #portfolio фото 500 → root cause: v3 minio-split перевёл сайты на vds MinIO 2025, но variant-cache bucket не создали там (был на books-vds 2020). snolla sharp-pipeline (variantCache.js DEFAULT_NAMESPACE=variant-cache, storage.js: bucket=storageClient) → NoSuchBucket → 500 на ALL sharp gallery-images всех 6 v3 сайтов с 2026-07-30 (gate проверял theme CSS из themes bucket (themeFiles, без sharp), не gallery-image URLs — пропустил). Fix: mc mb vds/variant-cache (пустой, кэш регенерируем — миграция старых entries НЕ нужна). maljarka portfolio 34/34 → 200 image/webp, tandemmebel logs NoSuchBucket ушли. minio-split Track A gap. Memory variant-cache-bucket-missing-on-vds-2025. Runbook maljarka-vds-deploy-runbook §Гочи + minio-split-cutover-runbook.

3. labtools.ru/products/press-forms/cylindrical — пустые product-cards. РАССЛЕДОВАНИЕ → workshop (victor/snolla)

User: «куда картинки делись?» на cylindrical. Найдено:

  • НЕ v3-регрессия — v2 (0.42.1, образ 566d41c) тоже отдаёт пустые карты (throwaway-staging проверил).
  • Pre-existing template + snolla-VM баг: cylindrical.liquid — единственный шаблон использует accessor {% assign product = product_link.product.item %} (Linked-item viewModel, .NET-паттерн). Остальные 8 шаблонов (accessories/presses/milling_bowl/pet_film/…) используют прямой {% for product in product_list %}product.path (работает).
  • Эмпирически: прямой product даёт title («Пресс-форма»), но path/list_image пустые; product_link.product.item даёт всё пусто. Из кода catalogCategory.productscatalogProductListgetProductViewModel напрямую возвращает product-VM с path/title/content-полями (list_image — content-field из fillViewModel).
  • Вывод user'а (владельца архитектуры): snolla неправильно рендерит viewModel типа Linked item. Фикс на стороне workshop (victor/snolla) — не infra.
  • Мой фикс (прямой product) откат — коммиты 5ae87fd (фикс) + ec9eb1e (revert) в victor/labtools.ru master, gitea чист (оригинал 0dc0b4e). Prod stack 17 НЕ тронут (0dc0b4e, healthy). Staging-контейнер + образ 5ae87fd вычищены, latest retag на 0dc0b4e.
  • Handoff workshop: snolla Node не резолвит Linked-item accessor product_link.product.item (работал в .NET). Воспроизведение: https://labtools.ru/products/press-forms/cylindrical — product-cards с пустыми href/src (v2 тоже). Каталог=Catalog (не Store). .NET-шаблон был правильный (по владельцу) — snolla должен поддержать Linked-item VM. Файл-якорь: victor/labtools.ru/apps/web/views/cylindrical.liquid:30-31.

Спроси user'а

  • maljarka восстановлена, variant-cache починен, labtools-cylindrical передан workshop (victor/snolla). Что дальше? Открытые треки: MinIO split Track A (books-vds 2020→2025 full migration — variant-cache bucket создан, остальное TODO). on-snolla-vds-migration task в .tasks помечен ready, но on.snolla LIVE с 07-20 — обновить на closed.

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

  • decomm-audit smoke = targeted host/VDS, не воркстейшн с локальным catch-all (false-positive «VDS=200»).
  • yarn.lock workspace-rename — переименование root/app package требует regen yarn.lock.
  • variant-cache bucket — при minio endpoint-flip проверять ВСЕ runtime-buckets (galleries/themes/assets/variant-cache); gate должен хитить gallery-image URL (sharp), не только theme CSS.
  • НЕ PS для Portainer (кириллица), НЕ push в docker.stostayer.ru:443, НЕ git clone на VDS (archive+scp). Креды → pass.

Коммиты сессии (.admin)

  • 494b1010 feat(maljarka): restore as 7th snolla site (stack 23) — compose+runbook+STATUS+index
  • 22f9748b meta(handoff): maljarka restore session
  • d82361d1 fix(minio-split): create variant-cache bucket on vds 2025
  • (этот хэндофф)

Коммиты victor/labtools.ru (расследование, оба откат)

  • 5ae87fd fix(cylindrical) — откат ec9eb1e (gitea master = оригинал 0dc0b4e)

Memory updates сессии

  • maljarka-lost-on-ruvds-decomm-restored
  • variant-cache-bucket-missing-on-vds-2025

(prev) maljarka restore — см. выше (этот же файл, секция выше)

Эта сессия — восстановление maljarka.tandemmebel.ru (7-й сайт тиража). ЗАВЕРШЁН — LIVE GREEN

User: «Мы где-то в тираже или раньше проебали сайт https://maljarka.tandemmebel.ru/. Давай найдем и попробуем восстановить». Полный тираж (по on-snolla Task B паттерну).

Root cause (найден)

maljarka.tandemmebel.ru.NET MoreThenCms tenant (тема Reversal 4881FC7F, siteId A2476738-E26C-49D5-95AD-958F42DCCDD0), служила на RUVDS IIS catch-all. В v3 тираж (6 Node сайтов) не входила — осталась на RUVDS. RUVDS декоммишнен 2026-07-21 → maljarka потеряла единственный хост; DNS перебросили на VDS, но Host()-правила+snolla-app с тем siteId не было → traefik 404. Аудит 21.07 «VDS=200» = false-positive с локального IIS воркстейшна (LAN-DNS, local .NET-admin catch-all поднят 20.07). Тираж v3 (30.07) не виноват — сайт потерян 21.07 на decomm RUVDS.

Что сделано (всё GREEN)

  • Репо: victor/maljarka.tandemmebel.ru создан на gitea, клон victor/on.snolla.com (lean-база, snolla 0.43.2/aws-sdk v3). Swap production.json (siteId A2476738, siteUrl, appName) + package names + regen yarn.lock под переименованный workspace (yarn install --immutable падал на старом on.snolla.com@workspace:. дескрипторе). Pushed, SHA 7f03d67.
  • Тема Reversal 4881FC7Fуже была в MinIO themes bucket (78 файлов), заливать не понадобилось (ключевой риск снят).
  • Реконструкция: views/layout.liquid = byte-identical рендеру локального .NET-admin (43730B, curl --noproxy '*' --resolve :80:127.0.0.1, sha256 64011be6…), {{ item.content }} inline после </section> (content пуст = parity). error_404/500 → Reversal+maljarka-бренд. 4 StaticPages отдаются из DB verbatim.
  • Build на VDS: git archive 7f03d67 → scp → docker build --build-arg VERDACCIO_TOKEN=<vitya JWT>registry.kzntsv.site/maljarka:7f03d67(+latest), digest df4e3642…. Push OK.
  • Throwaway-staging :5081 (8 shared секретов из live tandemmebel, network proxy) → completeness-gate GREEN: / byte-identical oracle, 4 staticpages 200 (sizes==DB clen), theme asset 200 103320B, unpublished /about/services/contacts/intro → 404 parity, sitemap-pages-1 1 loc / (+пустой blog-index benign).
  • Portainer стек 23 создан node-скриптом (JWT, НЕ PS — кириллица compose), env 8/8, mem_limit 512m, Host(maljarka.tandemmebel.ru). DNS уже VDS → LE issued on first hit: CN=maljarka.tandemmebel.ru, YR1, до 2026-10-29.
  • Live smoke GREEN: / 200 43730B byte-identical, title «Малярка от Тандеммебель», 4 staticpages 200, theme asset 200, robots/sitemap 200. Лог чист.
  • Коммит .admin 494b1010: compose + maljarka-vds-deploy-runbook.md + index + STATUS + pushed. Memory maljarka-lost-on-ruvds-decomm-restored.

Тираж snolla теперь 7/7

Сайт Стек Image Snolla
on.snolla.com 22 eb8c143 0.43.2
kupimknigi.spb.ru 21 5364353 0.43.2
labtools.ru 17 0dc0b4e 0.43.2
labtools.pro 19 a106622 0.43.2
emspb.ru 18 5afd8a1 0.43.2
tandemmebel.ru 20 9d51c09 0.43.2
maljarka.tandemmebel.ru 23 7f03d67 0.43.2

Спроси user'а

  • maljarka восстановлена и LIVE. Что дальше? Открытые треки: MinIO split Track A (books-vds 2020→2025, transparent). Или stostayer v3 (HOLD, ждёт GO user). Или закрыть on-snolla-vds-migration task (статус ⚕ ready в .tasks, но фактически on.snolla LIVE с 07-20 — обновить на closed).

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

  • decomm-audit smoke = targeted host/VDS, не воркстейшн с локальным catch-all (false-positive «VDS=200»).
  • yarn.lock workspace-rename — переименование root/app package требует regen yarn.lock (yarn install локально), иначе --immutable падает.
  • НЕ PS для Portainer (кириллица), НЕ push в docker.stostayer.ru:443, НЕ git clone на VDS (archive+scp).
  • Креды → pass (mssql-vds/sa-password, vds-kzntsv/full-env PORTAINER, gitea/admin-token).

(prev) tandemmebel.ru v3 cutover. ЗАВЕРШЁН — ТИРАЖ v3 БЫЛ 6/6 GREEN (теперь 7/7 с maljarka)

6-й сайт тиража v3 (после on-snolla, kupimknigi, labtools.ru, labtools.pro, emspb).

NB: handoff от prev-сессий флагал tandemmebel «BLOCKED на sharp-staging визуальном дефекте» — STALE. tandemmebel LIVE на VDS с 2026-07-12 (commit afb6e5f0 это фиксил в борде, memory тоже). User подтвердил в этой сессии: «да с чего ты взял что блокер, сайт уже давно на бою». Бамп прошёл чисто, без блокера.

Что сделано

  • Bump: @snollajs/snolla 0.42.1→0.43.2 в apps/web/package.json (commit 9d51c09) + resolutions-блок в root package.json (verbatim labtools.ru: @aws-sdk/client-s3 3.1005.0 + @smithy chain 5.3.11 — optional determinism) + реген yarn.lock (single @smithy/signature-v4@5.3.11 deduped, no dual-instance). Pushed victor/tandemmebel.ru master f4ddce6..9d51c09. Endpoint fix f4ddce6 (s3.endpoint→minio.vds.kzntsv.site) был в master с 2026-07-29, но в бегущем образе 8df10ee (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio.
  • Build на VDS: git archive 9d51c09~/build/tandemmebeldocker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKENregistry.kzntsv.site/tandemmebel:9d51c09(+latest), digest sha256:d14982c24dc7c61a334c8973e6f1c48147c7d3cbcc772b28af6c629431947b16, 476MB (v2 8df10ee был 583MB — v3 leaner), EXIT=0. yarn install --immutable в Docker прошёл (yarn.lock matches).
  • Staging :5020 parity-gate GREEN: throwaway контейнер из env живого стека 20 (8 секретов, --network proxy). robots md5 a01e4c60… identical (87B); sitemap index→5 sub-sitemaps → 184 locs == live 184 IDENTICAL (0 prod-only / 0 new-only); self-consistency 183×200 + 1×404 (/articles — prod=404 parity benign, не регрессия); / +557B = og:url/og:image request-host context (benign, byte-identical post-cutover); theme Gotham-Pro.css 200 4436B (v3 aws-sdk v3 S3-direct read из vds MinIO 2025).
    • Скрипт-баг поймал и исправил: $"\n" в bash = literal backslash-n, не newline → locs загрязнялись trailing \n → фейковые 404/301. Переписал gate на while read -r + temp-файлы (gate2.sh). Урок: всегда verify locs чистые перед status-чексом.
  • Portainer PUT stack 20 LIVE: node in-memory put-stack (НЕ PS — кириллица compose; Node 22 global fetch, GET /stacks/20 для Env + /stacks/20/file для StackFileContent), env 8/8 preserved, prune:false pullImage:true mem_limit 512m. PUT 200. Контейнер 9d51c09 healthy ~9s.
  • Live smoke GREEN: / 200 45742B, /projects 200 90758B, /sitemap.xml 200 (184 locs == parity), robots md5 a01e4c60…, /articles 404 parity, theme Gotham-Pro.css 200 4436B (v3 S3-direct). TLS CN=tandemmebel.ru, expire Oct 10 2026 (не тронут — in-place swap). Лог чист. Rollback = 8df10ee (v2 0.42.1, жив в registry).
  • Compose (admin source-of-truth) синхронно закоммичен 8df10ee9d51c09. tandemmebel-vds-deploy-runbook §0.43.2 + minio-split-cutover-runbook progress-table обновлены (6/6 GREEN).

v3 тираж — ФИНАЛЬНЫЙ статус (6/6 GREEN)

Сайт Стек Image Commit Snolla
on.snolla.com 22 eb8c143 eb8c143 0.43.2
kupimknigi.spb.ru 21 5364353 5364353 0.42.0→0.43.2
labtools.ru 17 0dc0b4e 0dc0b4e 0.43.2
labtools.pro 19 a106622 a106622 0.43.2
emspb.ru 18 5afd8a1 5afd8a1 0.43.2
tandemmebel.ru 20 9d51c09 9d51c09 0.43.2

Все 6 на vds MinIO 2025 (aws-sdk v3 S3-direct), все parity-gate GREEN, все TLS не тронуты. Rollback-теги v2 (0.42.1) живы в registry для каждого.

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

  • 69d3d0dd feat(tandemmebel): v3 cutover LIVE — snolla 0.42.1→0.43.2 (aws-sdk v2→v3)
  • fd48df62 feat(emspb): v3 cutover LIVE — snolla 0.42.1→0.43.2 (aws-sdk v2→v3)
  • c3c79b99 feat(labtools.pro): v3 cutover LIVE

Open треки

Трек Готовность Entry-point
B3 v3 тираж ЗАВЕРШЁН 6/6 GREEN все 6 runbook'ов §0.43.2
MinIO split Track A (books-vds minio 2020→2025) TODO — transparent, отдельно runbook §Track A
MinIO split B4 .NET catch-all админ s3 endpoint DONE 2026-07-30 — Web.config 6/6 endpoint flipped, creds verified, IIS recycled, login 200. Превью confirmed user'ом: оказался pre-existing баг S3-провайдера (KeyNotFoundException на ownerId в GalleriesStorage ctor) — фикс 09cb072d в MoreThenCms (drop-in DLL), 21/21 tests, live-verified runbook §B4
MinIO split B5 Obsidian Remotely Save endpoint DONE 2026-07-30 — endpoint flipped в vault (verified) 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 тираж завершён (6/6 GREEN). Что дальше? Открытые MinIO-split треки: Track A (books-vds minio 2020→2025 migration — transparent). B4 (.NET catch-all админ s3 endpoint) закрыт этой сессией (login 200; Asset Manager preview — confirm в админке). B5 (Obsidian Remotely Save) закрыт. ИЛИ stostayer v3-трек (HOLD, snolla-scope — ждёт stostayer-specific, НЕ подхватывать без GO user).
  • B4 закрыт. Track A — последний transparent фоновый шаг, закрывает распад books-vds minio.

Не делать (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-необходимость.
  • НЕ пушить образы в docker.stostayer.ru:443 (VPN-бан). Registry = registry.kzntsv.site (vds), build на VDS — ок.
  • Portainer PUT: node in-memory, НЕ PS Invoke-RestMethod (корраптит кириллицу compose). StackFileContent брать с /stacks/{id}/file, не /stacks/{id}.
  • bash $"\n" ≠ newline — это locale-translation, даёт literal \n. Для newline в bash: $'\n' или while read -r. Иначе locs загрязняются → фейковые status-коды в parity-gate.
  • VDS gitea-SSH нет — сборка на VDS через git archive (локально) → scp → extract, не git clone на VDS.
  • VDS SSH: ssh -i ~/.ssh/id_ed25519 vitya@89.253.255.94 (креды pass show vds-kzntsv/full-env, PORTAINER_API_KEY там же).
  • Дисциплина: runbook'и → .wiki/concepts/<slug>-runbook.md, не scripts/. Креды → pass, не plaintext в git.

Memory updates за сессию

  • UPDATE aws-sdk-v2-minio-2025-works-no-smithy-pin.md — «remaining 5 CMS sites» теперь STALE: все 6 v3 сайтов GREEN на 0.43.2, тираж завершён 2026-07-30. Строка про «config-endpoint bump only» устарела.
  • (handoff §v3 тираж — не memory.)