diff --git a/.tasks-imported/NEXT-SESSION-PROMPT.md b/.tasks-imported/NEXT-SESSION-PROMPT.md new file mode 100644 index 0000000..bd36ed1 --- /dev/null +++ b/.tasks-imported/NEXT-SESSION-PROMPT.md @@ -0,0 +1,57 @@ +# Prompt для следующей сессии + +Скопируй этот блок и вставь как первое сообщение: + +--- + +Привет! Возвращаемся к **iis-on-host-migration**. **Перед началом обязательно прочти**: +1. `.wiki/concepts/iis-migration-2026-05-19-postmortem.md` — почему предыдущая попытка сломала prod +2. `.wiki/sources/iis-host-migration-2026-05-19.md` (Phase 9 в конце — про rollback) +3. `.wiki/concepts/recovery-architecture-snapshot.md` (актуальный VM-chain) + +**Кратко где мы сейчас (после rollback):** +- Prod снова через VM `snolla-recovery` (как было до session 2026-05-19). 11 main routes + 2 stayer routes в traefik → `host.docker.internal:18080/18180/18181` → VM IIS. +- На хосте есть **inert** артефакты предыдущей попытки миграции — НЕ удалять без явного решения: + - `C:\sites\{snolla, stostayer, stostayer.old, snolla-identity-manager}` — Web.config'и уже patched (sitePath, conn-strings). + - IIS sites/pools `snolla, stostayer, stostayer.old` готовы (.NET v4.0 Integrated, ApplicationPoolIdentity, ACL). + - Traefik backup-stamps `*.bak-phase3-2026-05-19`, `*.bak-stayer-switch-2026-05-19`, `*.bak-hostip-2026-05-19`. + +**Цель повторной попытки** — выполнить миграцию по recipe из post-mortem, без повторения 10 ошибок: + +1. **Backend port — НЕ :80.** Использовать `:18080` на хосте (старый VM NAT port forward, теперь свободен после `unregistervm` или после остановки VM). Или другой свободный (НЕ совпадающий с traefik publish-ports `:8000, :4443, :8080`). Это избегает Docker NAT loop. +2. **Smoke test с `-MaximumRedirection 0` / `--max-redirs 0`** + read first response. Если `Location` == request URL или близко → loop, fail fast. +3. **Тест из НЕ-LAN сети** (телефон через мобильный интернет, VPS curl) до commit'a — не доверять local smoke. +4. **Параллельный run VM x 24h+** — НЕ savestate'ить VM на следующий же день. Держать как hot fallback хотя бы сутки реального трафика. +5. **Atomic revert plan ДО старта** — backup всех traefik yml, написать "если что — paste this" revert-команду заранее. + +**Не делай без моего "да":** +- Любые traefik patches (меняет prod-трафик). +- Любые destructive операции на `C:\sites\`, `C:\nas-recovery\vm-sites\`, snolla.ova. +- Глушить VM до подтверждённой 24h+ стабильности host'а. +- Push в git (gitea пока на мёртвой синке, и autopush не разрешён в любом случае). + +**Контекстные пароли** (в Web.config / .env, не в чате): +- MSSQL SA: `C:\Users\vitya\projects\docker\diskstation\mssql\.env` +- snolla CMS conn: user `snolla`, password в `C:\sites\snolla\Web.config` (`fXkH4@8O%3pc`) +- stostayer (новый): user `stayer_site`, password в `C:\sites\stostayer\Web.config` (`^I9D)LB)DK)8J#xBDG$t}W&_ioaT!M!LF`, XML-escape!) +- VM SSH: `~/.ssh/id_ed25519_snolla_vm` → `vitya@127.0.0.1:8022` (NAT-forward) +- VM admin password: `Pryakhin9` + +Поехали — но **сначала прочти post-mortem полностью**. + +--- + +## Что почитать AI-агенту перед началом (для самопроверки контекста) + +- `.wiki/overview.md` — точки входа +- **`.wiki/concepts/iis-migration-2026-05-19-postmortem.md`** ← critical (10 ошибок + recipe) +- `.wiki/sources/iis-host-migration-2026-05-19.md` (включая Phase 9 в конце) +- `.wiki/sources/nas-recovery-session-2026-05-18.md` — почему вообще этот хост +- `.wiki/concepts/recovery-architecture-snapshot.md` — актуальный VM-chain +- `.wiki/entities/snolla-recovery-vm.md` — VM active prod +- `.wiki/entities/windows-recovery-host.md` — host inert artifacts +- `.wiki/concepts/cms-config-rewrite-pattern.md` — UTF-8 BOM +- `.wiki/concepts/webconfig-password-xml-escape.md` — `&` → `&` в conn-string +- `.tasks/STATUS.md` +- `.tasks/iis-on-host-migration.md` — Phase 1-9 история +- Это сообщение diff --git a/.tasks-imported/STATUS.md b/.tasks-imported/STATUS.md new file mode 100644 index 0000000..76687e7 --- /dev/null +++ b/.tasks-imported/STATUS.md @@ -0,0 +1,139 @@ +# Task Board +_Updated: 2026-05-21_ + +## 🟢 [cms-admin-assets-root-folders-seed] — seed 15 missing root AssetsFolder rows в DB, admin assets открывается +**Status:** done (2026-05-19 вечер). Browser-verified user'ом на pilorama98/emspb. Detail в [[cms-admin-assets-root-folder-seed]]. +**Result:** 15 rows inserted (idempotent NOT EXISTS query). Affected: emspb.ru, pilorama98.ru, labtools.pro, kupimknigi.spb.ru, sestech.ru, aquamax.spb.ru, artmone.pro, priemka-kvartiry.ru, profund.spb.ru, ics-artmaterials.com, _voda-indigo.ru + 4 sites с NULL PrimaryDomain. Inserted FolderId/OwnerId captured в `.tasks/cms-admin-assets-root-folders-seed.inserted-rows.txt` для atomic revert. +**Long-term TODO (deferred):** null-guard в `AssetsJsonViewModelBuilder.Build` (CMS code) — defensive fix чтобы не crash'ить если root missing. Требует recompile `MoreThenCms.Admin.dll`, ждёт build env (`vds-kzntsv-bootstrap`). +**Branch:** master + +--- + +## 🟢 [cms-port-leak-fix] — утечка `:8089`/`:4443` в admin URLs закрыта через URL Rewrite serverVariables +**Status:** done (2026-05-19 вечер; verified user-side в браузере, остальные 10 cms работают). Detailed wiki concept — [[cms-server-port-leak-fix]]. +**Root cause:** `MoreThenCms.Admin\Mis\Web\Mvc\UrlHelpers\UrlHelpers.cs:14-37` `Url.SiteRoot()` читает `SERVER_PORT`/`SERVER_PORT_SECURE` из server vars, и в attempt2-host setup `SERVER_PORT=8089` → leak. Десятки .cshtml файлов (admin views + `_Layout`/`_LogInLayout`) рендерят это в `mis.siteRoot` и `