Files
admin/.tasks/NEXT_SESSION.md
vitya 43aa674e5b wiki(stostayer): ingest markdown-render-404 incident postmortem + NEXT_SESSION
Постмортем инцидента 2026-07-24: 404/500 на body_repair_service (stostayer.ru) =
двойной корень. (1) код-баг snolla: viewModels/index.js `import markdown from
'markdown-it'; markdown();` — инстанс выброшен, markdown.render undefined, краш на
markdown-поле-шаблонах (латентный ~3 мес с коммита 1e3f897 2026-04-21). (2) упаковка
exact-pin-staleness: @snollajs/content-api@0.8.0 `workspace:*` запёк
@snollajs/snolla:0.7.4 exact → фиксовая 0.7.7 легла top-level, content-api юзал
nested баговую 0.7.4. yarn resolutions/patch не форсят exact-pin опубликованного
пакета — решено публикацией @snollajs/content-api@0.8.2 (^0.7.7).

Деплой stostayer-web:0.3.22 через pscp SSH:20435 + sudo docker load + Portainer PUT
pullImage:false (без push в docker.stostayer.ru:443, бана нет). 4 URL → 200 публично.
Pre-build чек yarn.lock single-snolla ловит класс. Cleanup
workspace-caret-interpackage-deps — за vitya+snolla.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-24 14:37:53 +03:00

6.9 KiB
Raw Blame History

_last_updated_, session_id, prev_session_id
_last_updated_ session_id prev_session_id
2026-07-24T11:15:00Z 2026-07-24-stostayer-markdown-render-fix 2026-07-21-stostayer-web-0320-deploy

Next session handoff

Эта сессия — починка 404/500 на body_repair_service (stostayer.ru). ЗАВЕРШЁН

stostayer.new сообщил: страницы /kuzovnoj-malyarnij-remont/{zamena-elementov,rihtovka-kuzova,remont-bamperov,pokraska} отдают 404. Корень оказался двойной, чинено координированно с snolla + stostayer.new.

Что сделано

  • Корень 1 (код, snolla): @snollajs/snolla lib/viewModels/index.js:7-8import 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|gzippscp 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).

ОСТАЁТСЯ (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-реестр).

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

Open треки (из STATUS.md, не этой сессии)

Трек Готовность 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

Спроси user'а

  • (нет новых ask-items — инцидент закрыт; cleanup vitya берёт на себя со 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).

Memory updates за сессию

  • NEW stostayer-deploy-image-via-pscp-load-avoid-443-push.md — pscp+load+pullImage:false техника (без :443 push) + pre-build single-snolla чек.