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

48 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
_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
---
# 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-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).
### ОСТАЁТСЯ (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 чек.