Постмортем инцидента 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>
6.9 KiB
6.9 KiB
_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/snollalib/viewModels/index.js:7-8—import markdown from 'markdown-it'; markdown();(инстанс выброшен) →markdown.renderundefined → крашfillViewModelна markdown-поле-шаблонах. Латентный ~3 мес (с коммита1e3f8972026-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 запёк exact0.7.4→ фиксовая 0.7.7 легла top-level, content-api юзал свою nested баговую 0.7.4. Первый деплой 0.3.21 не починил (регрессии нет). yarnresolutions/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→pscpSSH:20435 →sudo docker load→ Portainer PUT стека 16pullImage: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 23b1a47cwiki(stostayer): ingest stostayer-admin-minio-config95168e30meta(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 чек.