meta(handoff): NEXT_SESSION — MinIO split B3 on-snolla pilot LIVE, 5 sites + Track A/B4/B5 TODO

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-07-30 13:24:24 +03:00
parent 443713e8b3
commit 8cd1201046

View File

@@ -1,48 +1,63 @@
---
_last_updated_: 2026-07-24T11:15:00Z
session_id: 2026-07-24-stostayer-markdown-render-fix
prev_session_id: 2026-07-21-stostayer-web-0320-deploy
_last_updated_: 2026-07-30T10:25:00Z
session_id: 2026-07-30-minio-split-on-snolla-pilot
prev_session_id: 2026-07-24-stostayer-markdown-render-fix
---
# Next session handoff
## Эта сессия — починка 404/500 на body_repair_service (stostayer.ru). ЗАВЕРШЁН ✅
## Эта сессия — MinIO split, Track B3 пилот on-snolla S3-direct-path. ЗАВЕРШЁН ✅
stostayer.new сообщил: страницы `/kuzovnoj-malyarnij-remont/{zamena-elementov,rihtovka-kuzova,remont-bamperov,pokraska}` отдают 404. Корень оказался **двойной**, чинено координированно с snolla + stostayer.new.
Пилот on-snolla: in-place image bump боевого стека 22 под MinIO split (CMS-медиа → vds minio).
Подтвердил главный риск runbook'а — aws-sdk v2 vs MinIO 2025 — **работает без @smithy pin**.
### Что сделано
- **Корень 1 (код, snolla):** `@snollajs/snolla` `lib/viewModels/index.js:7-8``import markdown from 'markdown-it'; markdown();` (инстанс выброшен) → `markdown.render` undefined → краш `fillViewModel` на markdown-поле-шаблонах. Латентный ~3 мес (с коммита `1e3f897` 2026-04-21). snolla починила → `@snollajs/snolla@0.7.7` (0.7.x legacy-line) + `@snollajs/core@0.26.1` (master + TDD).
- **Корень 2 (упаковка, exact-pin-staleness):** `@snollajs/content-api@0.8.0` декларил `@snollajs/snolla: workspace:*` → при publish yarn запёк exact `0.7.4` → фиксовая 0.7.7 легла top-level, content-api юзал свою **nested баговую 0.7.4**. Первый деплой 0.3.21 не починил (регрессии нет). yarn `resolutions`/patch НЕ спасают (не форсят exact-pin опубликованного пакета — stostayer.new эмпирически проверил). Решено публикацией **`@snollajs/content-api@0.8.2`** с `^0.7.7` (snolla), stostayer.new забампил `^0.8.2` (`ace20a1`) → одна snolla 0.7.7.
- **Деплой 0.3.22:** собрал локально offline, транспорт **без push в `docker.stostayer.ru:443`** (бан-гочи) — `docker save|gzip``pscp` SSH:20435 → `sudo docker load` → Portainer PUT стека 16 `pullImage:false`. Verify: 4 URL → **200** публично через Angie/TLS, в логах нет `markdown.render`.
- **Wiki:** NEW `concepts/stostayer-markdown-render-404-incident-2026-07.md` (постмортем), index.md + log.md обновлены.
- **Memory:** NEW `stostayer-deploy-image-via-pscp-load-avoid-443-push.md` (pscp+load+pullImage:false техника + pre-build чек yarn.lock single-snolla).
- **Build на VDS** образа `registry.kzntsv.site/on-snolla:07db7e3` (digest 9d757d97) из `victor/on.snolla.com@07db7e3`
(config endpoint `minio.kzntsv.site → minio.vds.kzntsv.site`, snolla 0.42.1 v2, **без бампа package.json**
user-решение: сплит без snolla version bump). Push в registry OK (build-warning VERDACCIO_TOKEN в ARG — известный follow-up, не блокер).
- **Throwaway-staging :5077** из env живого контейнера (8 секретов). robots/home/sitemap 200.
- **S3-direct gate (главный):** theme asset `/themes/c406…/bootstrap.min.css` на staging → **200, 97324 B == live-public**
(aws-sdk v2 → vds minio 2025 — compat подтверждена, нет SignatureDoesNotMatch/403).
- **Sitemap parity** staging==live 3/3 IDENTICAL (`/`, `/c`, `/yandex_…`); `/c`→404 parity с продом.
- **Portainer PUT стека 22** env-preserving (8/8), `prune:false, pullImage:true` → 200. Node-скрипт in-memory
(GET+PUT, без temp-файлов — curl `/tmp/` vs node `/tmp/` расходятся на Windows). Container 07db7e3 healthy, mem_limit 512m preserved.
- **Live-smoke** `https://on.snolla.com`: theme asset 200 97324 B, `/`,`/robots`,`/sitemap`,`/yandex` 200, `/c` 404 parity.
TLS cert не тронут (LE YR1, CN=on.snolla.com, до Oct 18). Логи: `Server Listening`, aws-sdk v2 EOL warning (ожидаемо), нет крашей.
- **Закрытие:** compose source-of-truth `host-stacks/vds-kzntsv/on-snolla.compose.yml` обновлён (тег 07db7e3 + endpoint + rollback-коммент);
`scripts/minio-split-cutover/runbook.md` (новый) — Track B progress-таблица; commit `443713e8`.
- **Memory:** NEW `aws-sdk-v2-minio-2025-works-no-smithy-pin.md`@smithy SigV4 regression = v3-only, v2 идёт без пина.
### ОСТАЁТСЯ (vitya решает сам со snolla — НЕ поднимать admin-сессии)
- **Cleanup `workspace-caret-interpackage-deps`** (snolla-таска: `workspace:*``workspace:^` по монорепо, чтоб класс exact-pin-staleness не повторялся). Scope-вопрос snolla: covers ли 0.7.x legacy-line content-api или только master + перенос peerDep-паттерна (master 0.12.0) на 0.7.x. **vitya сказал «я порешаю это со snolla»** — не админ-scope, не подхватывать.
- Multi-tenant находка (факультатив): на shared MoreThenCms-БД kupimknigi нашлись 2 чужих siteId (`919219B3`, `5A826EB9`, шаблоны `article_markdown`/`test` с markdown-полем) — если на snolla 0.7.x, тоже крашились; фикс закроет при их пересборке. Mapping siteId→сайт — за vitya (site-реестр).
### План отката
PUT стека 22 назад на тег `473923e494db` (rollback-тег в registry, pred endpoint `minio.kzntsv.site`/books-vds, миррор там жив).
RUVDS DECOMM 2026-07-21 — rollback только образ-тегом.
## Recent commits (этот репо, .admin)
- (этот коммит) `wiki(stostayer): ingest markdown-render-404 incident postmortem + NEXT_SESSION`
- `23b1a47c` wiki(stostayer): ingest stostayer-admin-minio-config
- `95168e30` meta(handoff): NEXT_SESSION — RUVDS DECOMM 2026-07-21
- `443713e8` feat(on-snolla): MinIO split S3-direct-path cutover — stack 22 bump 473923e494db->07db7e3
- `71dee93e` @wiki: alias pilonuxt -> pilorama98.ru in prose
- `5a93ac78` wiki(snolla): ingest local admin HTTPS binding
## Open треки (из STATUS.md, не этой сессии)
## Open треки
| Трек | Готовность | Entry-point |
|---|---|---|
| tandemmebel-web-vds-deploy | 🔵 blocked — оператор нашёл НОВЫЙ визуальный дефект на sharp-staging (стек 20, https://tandemmebel.vds.kzntsv.site), специфику не назвал, «чиним в новой сессии». Cutover HELD | `.tasks/STATUS.md` §tandemmebel; sharp-staging жив на стеке 20 |
| on-snolla-vds-migration | 🟢 blocked by snolla-local-admin-restore — on.snolla.com (siteId B9ECDB50…) RUVDS IIS → VDS Node snolla-app 0.42.1, реконструкция шаблонов | `.wiki/concepts/snolla-local-admin-and-on-snolla-migration-design.md` §Task B |
| snolla-local-admin-restore | ⚪ ready — восстановить локальный .NET-админ (catch-all IIS `snolla`) копированием `C:\sites\snolla\` с RUVDS; `<alias>.snolla.com/admin` через hosts-override | design doc §Task A |
| books-task-runner-registry-auth-cred | 🔵 blocked — cred в config-volume, но рабочий образ (88f2bee) содержит СТАРЫЙ registryGc; тега master-a3734d5 в реестре нет → CI не собрал v2-DELETE rewrite. In-app dryRun ждёт build+deploy | `.tasks/STATUS.md` §books-task-runner |
| **MinIO split B3 — остальные 5 сайтов** | ⏳ TODO — пилот on-snolla GREEN, паттерн отработан | `scripts/minio-split-cutover/runbook.md` §B3 + progress-таблица |
| MinIO split Track A (books-vds minio 2020→2025) | ⏳ TODO — transparent, отдельно | runbook.md §Track A |
| MinIO split B4 .NET catch-all админ s3 endpoint | ⏳ TODO — `C:\sites\snolla\Web.config` serviceURL → minio.vds.kzntsv.site | runbook.md §B4 |
| MinIO split B5 Obsidian Remotely Save endpoint | ⏳ TODO — obsidian бакет смиррорен (B1), можно менять endpoint | runbook.md §B5; memory `obsidian-remotely-save-endpoint-after-mirror` |
| tandemmebel-web-vds-deploy | 🔵 blocked — оператор нашёл визуальный дефект на sharp-staging (стек 20), специфику не назвал | `.tasks/STATUS.md` §tandemmebel |
| books-task-runner-registry-auth-cred | 🔵 blocked — cred в config-volume, но рабочий образ содержит СТАРЫЙ registryGc; тега master-a3734d5 в реестре нет | `.tasks/STATUS.md` §books-task-runner |
## Спроси user'а
- (нет новых ask-items — инцидент закрыт; cleanup vitya берёт на себя со snolla)
- Какой следующий сайт из 5 бампить (kupimknigi/labtools/labtools.pro/emspb)? tandemmebel BLOCKED на визуальном дефекте — не трогать пока оператор.
- snolla-евый v3-трек (0.43.1/0.7.8/0.17.2 для stostayer) — HOLD, отдельная история; НЕ подхватывать без GO user (snolla ждёт).
## Не делать (preemptive guards)
- **НЕ лезть в прод-БД stostayer** (MSSQL `stostayer`/MariaDB) — vitya явно остановил при попытке SQL-запроса в начале сессии. Диагностика через логи контейнера + исходники node_modules, не через DB-запросы. SQL-свопы по чужим прод-БД — только если vitya дал go на read-доступ конкретному агенту.
- **НЕ пушить образы в `docker.stostayer.ru:443`** с нашего VPN-egress — единичный large-push тоже банит VPN-IP (см. [[stostayer-push-ban-single-large-push]]). Транспорт образа через pscp SSH:20435 + docker load + `pullImage:false` (отработано, бана нет).
- **НЕ подхватывать cleanup `workspace-caret-interpackage-deps`** — vitya решает со snolla сам.
- **НЕ встраивать JSON-payload в double-quoted `bash -c`** при Portainer PUT — кавычки payload ломают аргумент → 500. Писать payload в файл (`jq > /tmp/p.json`), `curl -d @/tmp/p.json`.
- Pre-build чек перед деплоем snolla-фиксов: `grep -E "^\"@snollajs/snolla@npm:" yarn.lock` → ОДНА версия; в образе `docker run --rm --entrypoint sh <img> -c 'find /usr/src/app -path "*@snollajs/snolla/package.json"'` → одна копия. Без этого деплой «успешно» не починит (exact-pin-staleness).
- **НЕ бампить snolla-пакеты** на 6 CMS-сайтах — user решил сплит через config-endpoint только, сайты на 0.42.1 v2. snolla v3-трек — HOLD (stostayer-scope).
- **НЕ пушить образы в `docker.stostayer.ru:443`** с нашего VPN-egress — бан-гочи (см. [[stostayer-push-ban-single-large-push]]). Registry = `registry.kzntsv.site` (vds), build на VDS — ок.
- **НЕ лезть в прод-БД** stostayer (MSSQL/MariaDB) — vitya остановил. Диагностика через логи контейнера + исходники.
- **Portainer PUT: НЕ через PS Invoke-RestMethod** (корраптит кириллицу в compose). Node-скрипт in-memory (GET+PUT), НЕ встраивать JSON-payload в double-quoted `bash -c`. API-key работает для stack PUT (200) — JWT не нужен (JWT только для stack CREATE).
- **curl `/tmp/` vs node `/tmp/` расходятся на Windows** (MSYS vs Win-путь) — НЕ писать temp-файлы через curl `-o /tmp/` и читать из node. In-memory в одном node-скрипте.
- **После stack GET** (возвращает env-values с секретами) — вычищать temp-файлы. In-memory скрипт = нет утечки.
## Memory updates за сессию
- NEW `stostayer-deploy-image-via-pscp-load-avoid-443-push.md` — pscp+load+pullImage:false техника (без :443 push) + pre-build single-snolla чек.
- NEW `aws-sdk-v2-minio-2025-works-no-smithy-pin.md` — v2 vs MinIO 2025 работает без пина; @smithy regression v3-only; 5 сайтов = config-endpoint bump.
- MEMORY.md index обновлён.