102 lines
12 KiB
Markdown
102 lines
12 KiB
Markdown
---
|
||
_last_updated_: 2026-07-30T14:30:00Z
|
||
session_id: 2026-07-30-labtools-v3-cutover
|
||
prev_session_id: 2026-07-30-kupimknigi-v3-cutover
|
||
---
|
||
|
||
# Next session handoff
|
||
|
||
## Предыдущая сессия — kupimknigi.spb.ru v3 cutover. ЗАВЕРШЁН ✅
|
||
|
||
## Эта сессия — 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.
|
||
|
||
## 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 — labtools.ru** | ✅ LIVE 2026-07-30 | эта сессия — см. ↑ §Эта сессия |
|
||
| **B3 v3 — kupimknigi** | ✅ LIVE 2026-07-30 | prev session |
|
||
| **B3 v3 — on.snolla.com** | ✅ LIVE 2026-07-30 | prev session |
|
||
| **B3 v3 — остальные 3 сайта** (labtools.pro/emspb/tandemmebel) | ⏳ TODO — v3-паттерн отработан на 3 сайтах (3 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'а
|
||
- **Следующий сайт = labtools.pro** (user выбрал 2026-07-30, конец этой сессии — НЕ начат, работа в следующей сессии). Стек 19, возможно общий кодбейс с labtools.ru — проверить, можно парой. 3/6 GREEN (on-snolla, kupimknigi, labtools.ru). Остались после: **emspb** (стек 18), **tandemmebel** (стек 20 — был BLOCKED на sharp-staging визуальном дефекте, проверить перед бампом). Паттерн отработан x3: bump `@snollajs/snolla→0.43.2` + resolutions → build на VDS → staging :50XX parity-gate → Portainer PUT env-preserving.
|
||
- 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.) |