From 94b0ae04ea687b5eb7bd683850a11a6c552496f0 Mon Sep 17 00:00:00 2001 From: vitya Date: Thu, 30 Jul 2026 19:01:45 +0300 Subject: [PATCH] =?UTF-8?q?meta(handoff):=20tandemmebel=20v3=20cutover=20L?= =?UTF-8?q?IVE=20=E2=80=94=20=D1=82=D0=B8=D1=80=D0=B0=D0=B6=20v3=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B2=D0=B5=D1=80=D1=88=D1=91=D0=BD=206/6=20GREEN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude --- .tasks/NEXT_SESSION.md | 141 +++++++++++++---------------------------- 1 file changed, 43 insertions(+), 98 deletions(-) diff --git a/.tasks/NEXT_SESSION.md b/.tasks/NEXT_SESSION.md index 9950c6d..5e41d1f 100644 --- a/.tasks/NEXT_SESSION.md +++ b/.tasks/NEXT_SESSION.md @@ -1,125 +1,70 @@ --- -_last_updated_: 2026-07-30T14:45:00Z -session_id: 2026-07-30-emspb-v3-cutover -prev_session_id: 2026-07-30-labtools-pro-v3-cutover +_last_updated_: 2026-07-30T16:05:00Z +session_id: 2026-07-30-tandemmebel-v3-cutover +prev_session_id: 2026-07-30-emspb-v3-cutover --- # Next session handoff -## Эта сессия — emspb.ru v3 cutover. ЗАВЕРШЁН ✅ +## Эта сессия — tandemmebel.ru v3 cutover. ЗАВЕРШЁН ✅ — ТИРАЖ v3 ЗАКОНЧЕН (6/6 GREEN) -5-й сайт тиража v3 (после on-snolla, kupimknigi, labtools.ru, labtools.pro). Тот же паттерн, отработан чисто. **5/6 GREEN.** emspb = стек 18, in-place bump (DNS на VDS с 2026-07-02). +6-й и последний сайт тиража v3 (после on-snolla, kupimknigi, labtools.ru, labtools.pro, emspb). +Тот же паттерн, отработан чисто. **6/6 v3 сайтов GREEN.** tandemmebel = стек 20, in-place bump (DNS на VDS с 2026-07-12). + +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 `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/emspb` → `docker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN` → `registry.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) синхронно закоммичен `95a5c42`→`5afd8a1`. emspb-vds-deploy-runbook §0.43.2 + minio-split-cutover-runbook progress-table обновлены. +- **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). -## Предыдущая сессия — labtools.pro v3 cutover. ЗАВЕРШЁН ✅ +## 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 | -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-pro` → `docker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN` → `registry.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 `0610432`→`a106622`). -- **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/labtools` → `docker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN` → `registry.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/kupimknigi` → `docker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN` → `registry.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-snolla` → - `docker 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. +Все 6 на vds MinIO 2025 (aws-sdk v3 S3-direct), все parity-gate GREEN, все TLS не тронуты. +Rollback-теги v2 (0.42.1) живы в registry для каждого. ## 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 +- `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 — 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` | +| **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 | ⏳ 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). +- **v3 тираж завершён (6/6 GREEN).** Что дальше? Открытые MinIO-split треки: Track A (books-vds minio 2020→2025 migration — transparent), B4 (.NET catch-all админ s3 endpoint → `C:\sites\snolla\Web.config`), B5 (Obsidian Remotely Save endpoint — бакет смиррорен, готов менять). ИЛИ stostayer v3-трек (HOLD, snolla-scope — ждёт stostayer-specific, НЕ подхватывать без GO user). +- B4/B5 — это последние MinIO-split шаги, закрывают распад 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-необходимость. Не пугать framing «упадёт без resolutions». +- **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 — ок. -- **НЕ лезть в прод-БД** 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/-runbook.md`**, не `scripts/`. `scripts/` только для executable. Креды → `pass`, не plaintext в git. -- **VDS gitea-SSH нет** (Permission denied publickey) — сборка на VDS через `git archive` (локально) → transfer → extract, не `git clone` на 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/-runbook.md`**, не `scripts/`. Креды → `pass`, не plaintext в git. ## 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.) \ No newline at end of file +- 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.) \ No newline at end of file