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

151 lines
19 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-31T10:00:00Z
session_id: 2026-07-31-maljarka-restore-variantcache-labtools
prev_session_id: 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.products``catalogProductList``getProductViewModel` напрямую возвращает 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/tandemmebel``docker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN``registry.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) синхронно закоммичен `8df10ee``9d51c09`. 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.)