Files
admin/.tasks/NEXT_SESSION.md

108 lines
13 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-31T03:20:00Z
session_id: 2026-07-31-maljarka-restore
prev_session_id: 2026-07-30-tandemmebel-v3-cutover
---
# Next session handoff
## Эта сессия — восстановление maljarka.tandemmebel.ru (7-й сайт тиража). ЗАВЕРШЁН ✅ — LIVE GREEN
User: «Мы где-то в тираже или раньше проебали сайт https://maljarka.tandemmebel.ru/. Давай найдем и попробуем восстановить». Полный тираж (по on-snolla Task B паттерну).
### Root cause (найден)
`maljarka.tandemmebel.ru`**.NET MoreThenCms tenant** (тема Reversal `4881FC7F`, siteId `A2476738-E26C-49D5-95AD-958F42DCCDD0`), служила на **RUVDS IIS catch-all**. В v3 тираж (6 Node сайтов) **не входила** — осталась на RUVDS. **RUVDS декоммишнен 2026-07-21** → maljarka потеряла единственный хост; DNS перебросили на VDS, но `Host()`-правила+snolla-app с тем siteId не было → traefik 404. Аудит 21.07 «VDS=200» = **false-positive** с локального IIS воркстейшна (LAN-DNS, local .NET-admin catch-all поднят 20.07). **Тираж v3 (30.07) не виноват** — сайт потерян 21.07 на decomm RUVDS.
### Что сделано (всё GREEN)
- **Репо:** `victor/maljarka.tandemmebel.ru` создан на gitea, клон `victor/on.snolla.com` (lean-база, snolla 0.43.2/aws-sdk v3). Swap `production.json` (siteId A2476738, siteUrl, appName) + package names + **regen yarn.lock** под переименованный workspace (`yarn install --immutable` падал на старом `on.snolla.com@workspace:.` дескрипторе). Pushed, SHA `7f03d67`.
- **Тема Reversal** `4881FC7F`**уже была в MinIO** `themes` bucket (78 файлов), заливать не понадобилось (ключевой риск снят).
- **Реконструкция:** `views/layout.liquid` = **byte-identical** рендеру локального .NET-admin (43730B, `curl --noproxy '*' --resolve :80:127.0.0.1`, sha256 `64011be6…`), `{{ item.content }}` inline после `</section>` (content пуст = parity). error_404/500 → Reversal+maljarka-бренд. 4 StaticPages отдаются из DB verbatim.
- **Build на VDS:** `git archive 7f03d67` → scp → `docker build --build-arg VERDACCIO_TOKEN=<vitya JWT>``registry.kzntsv.site/maljarka:7f03d67`(+latest), digest `df4e3642…`. Push OK.
- **Throwaway-staging :5081** (8 shared секретов из live tandemmebel, network proxy) → completeness-gate GREEN: `/` byte-identical oracle, 4 staticpages 200 (sizes==DB clen), theme asset 200 103320B, unpublished /about/services/contacts/intro → 404 parity, sitemap-pages-1 1 loc `/` (+пустой blog-index benign).
- **Portainer стек 23** создан node-скриптом (JWT, НЕ PS — кириллица compose), env 8/8, mem_limit 512m, `Host(maljarka.tandemmebel.ru)`. DNS уже VDS → **LE issued on first hit**: CN=maljarka.tandemmebel.ru, YR1, до 2026-10-29.
- **Live smoke GREEN:** `/` 200 43730B byte-identical, title «Малярка от Тандеммебель», 4 staticpages 200, theme asset 200, robots/sitemap 200. Лог чист.
- **Коммит .admin** `494b1010`: compose + `maljarka-vds-deploy-runbook.md` + index + STATUS + pushed. Memory `maljarka-lost-on-ruvds-decomm-restored`.
### Тираж snolla теперь 7/7
| Сайт | Стек | Image | Snolla |
|---|---|---|---|
| on.snolla.com | 22 | eb8c143 | 0.43.2 |
| kupimknigi.spb.ru | 21 | 5364353 | 0.43.2 |
| labtools.ru | 17 | 0dc0b4e | 0.43.2 |
| labtools.pro | 19 | a106622 | 0.43.2 |
| emspb.ru | 18 | 5afd8a1 | 0.43.2 |
| tandemmebel.ru | 20 | 9d51c09 | 0.43.2 |
| **maljarka.tandemmebel.ru** | **23** | **7f03d67** | **0.43.2** |
### Спроси user'а
- maljarka восстановлена и LIVE. Что дальше? Открытые треки: MinIO split Track A (books-vds 2020→2025, transparent). Или stostayer v3 (HOLD, ждёт GO user). Или закрыть `on-snolla-vds-migration` task (статус ⚕ ready в .tasks, но фактически on.snolla LIVE с 07-20 — обновить на closed).
### Не делать (preemptive guards)
- **decomm-audit smoke = targeted host/VDS**, не воркстейшн с локальным catch-all (false-positive «VDS=200»).
- **yarn.lock workspace-rename** — переименование root/app package требует regen yarn.lock (`yarn install` локально), иначе `--immutable` падает.
- НЕ PS для Portainer (кириллица), НЕ push в docker.stostayer.ru:443, НЕ git clone на VDS (archive+scp).
- Креды → pass (mssql-vds/sa-password, vds-kzntsv/full-env PORTAINER, gitea/admin-token).
---
## (prev) tandemmebel.ru v3 cutover. ЗАВЕРШЁН ✅ — ТИРАЖ v3 БЫЛ 6/6 GREEN (теперь 7/7 с maljarka)
6-й сайт тиража v3 (после on-snolla, kupimknigi, labtools.ru, labtools.pro, emspb).
NB: handoff от prev-сессий флагал tandemmebel «BLOCKED на sharp-staging визуальном дефекте» — **STALE**.
tandemmebel LIVE на VDS с 2026-07-12 (commit afb6e5f0 это фиксил в борде, memory тоже). User подтвердил
в этой сессии: «да с чего ты взял что блокер, сайт уже давно на бою». Бамп прошёл чисто, без блокера.
### Что сделано
- **Bump:** `@snollajs/snolla 0.42.1→0.43.2` в `apps/web/package.json` (commit `9d51c09`) + `resolutions`-блок в root `package.json` (verbatim labtools.ru: `@aws-sdk/client-s3 3.1005.0` + `@smithy` chain 5.3.11 — optional determinism) + реген `yarn.lock` (single `@smithy/signature-v4@5.3.11` deduped, no dual-instance). Pushed victor/tandemmebel.ru master `f4ddce6..9d51c09`. Endpoint fix `f4ddce6` (s3.endpoint→minio.vds.kzntsv.site) был в master с 2026-07-29, но в бегущем образе `8df10ee` (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio.
- **Build на VDS:** `git archive 9d51c09``~/build/tandemmebel``docker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN``registry.kzntsv.site/tandemmebel:9d51c09`(+latest), digest `sha256:d14982c24dc7c61a334c8973e6f1c48147c7d3cbcc772b28af6c629431947b16`, 476MB (v2 8df10ee был 583MB — v3 leaner), EXIT=0. `yarn install --immutable` в Docker прошёл (yarn.lock matches).
- **Staging :5020 parity-gate GREEN:** throwaway контейнер из env живого стека 20 (8 секретов, `--network proxy`). robots md5 `a01e4c60…` identical (87B); sitemap index→5 sub-sitemaps → **184 locs == live 184 IDENTICAL** (0 prod-only / 0 new-only); **self-consistency 183×200 + 1×404** (`/articles` — prod=404 parity benign, не регрессия); `/` +557B = og:url/og:image request-host context (benign, byte-identical post-cutover); theme `Gotham-Pro.css` 200 4436B (v3 aws-sdk v3 S3-direct read из vds MinIO 2025).
- **Скрипт-баг поймал и исправил:** `$"\n"` в bash = literal backslash-n, не newline → locs загрязнялись trailing `\n` → фейковые 404/301. Переписал gate на `while read -r` + temp-файлы (gate2.sh). Урок: всегда verify locs чистые перед status-чексом.
- **Portainer PUT stack 20 LIVE:** node in-memory `put-stack` (НЕ PS — кириллица compose; Node 22 global fetch, GET `/stacks/20` для Env + `/stacks/20/file` для StackFileContent), env 8/8 preserved, `prune:false pullImage:true mem_limit 512m`. PUT 200. Контейнер `9d51c09` healthy ~9s.
- **Live smoke GREEN:** `/` 200 45742B, `/projects` 200 90758B, `/sitemap.xml` 200 (184 locs == parity), robots md5 `a01e4c60…`, `/articles` 404 parity, theme `Gotham-Pro.css` 200 4436B (v3 S3-direct). TLS CN=tandemmebel.ru, expire Oct 10 2026 (не тронут — in-place swap). Лог чист. **Rollback = `8df10ee`** (v2 0.42.1, жив в registry).
- Compose (admin source-of-truth) синхронно закоммичен `8df10ee``9d51c09`. tandemmebel-vds-deploy-runbook §0.43.2 + minio-split-cutover-runbook progress-table обновлены (6/6 GREEN).
## v3 тираж — ФИНАЛЬНЫЙ статус (6/6 GREEN)
| Сайт | Стек | Image | Commit | Snolla |
|---|---|---|---|---|
| on.snolla.com | 22 | `eb8c143` | eb8c143 | 0.43.2 |
| kupimknigi.spb.ru | 21 | `5364353` | 5364353 | 0.42.0→0.43.2 |
| labtools.ru | 17 | `0dc0b4e` | 0dc0b4e | 0.43.2 |
| labtools.pro | 19 | `a106622` | a106622 | 0.43.2 |
| emspb.ru | 18 | `5afd8a1` | 5afd8a1 | 0.43.2 |
| **tandemmebel.ru** | 20 | `9d51c09` | 9d51c09 | 0.43.2 |
Все 6 на vds MinIO 2025 (aws-sdk v3 S3-direct), все parity-gate GREEN, все TLS не тронуты.
Rollback-теги v2 (0.42.1) живы в registry для каждого.
## Recent commits (этот репо, .admin)
- `69d3d0dd` feat(tandemmebel): v3 cutover LIVE — snolla 0.42.1→0.43.2 (aws-sdk v2→v3)
- `fd48df62` feat(emspb): v3 cutover LIVE — snolla 0.42.1→0.43.2 (aws-sdk v2→v3)
- `c3c79b99` feat(labtools.pro): v3 cutover LIVE
## Open треки
| Трек | Готовность | Entry-point |
|---|---|---|
| **B3 v3 тираж** | ✅ **ЗАВЕРШЁН 6/6 GREEN** | все 6 runbook'ов §0.43.2 |
| MinIO split Track A (books-vds minio 2020→2025) | ⏳ TODO — transparent, отдельно | runbook §Track A |
| MinIO split B4 .NET catch-all админ s3 endpoint | ✅ DONE 2026-07-30 — `Web.config` 6/6 endpoint flipped, creds verified, IIS recycled, login 200. Превью confirmed user'ом: оказался pre-existing баг S3-провайдера (KeyNotFoundException на ownerId в GalleriesStorage ctor) — фикс 09cb072d в MoreThenCms (drop-in DLL), 21/21 tests, live-verified | runbook §B4 |
| MinIO split B5 Obsidian Remotely Save endpoint | ✅ DONE 2026-07-30 — endpoint flipped в vault (verified) | runbook §B5; memory `obsidian-remotely-save-endpoint-after-mirror` |
| books-task-runner-registry-auth-cred | 🔵 blocked — cred в config-volume, рабочий образ содержит СТАРЫЙ registryGc; тега master-a3734d5 в реестре нет | `.tasks/STATUS.md` §books-task-runner |
## Спроси user'а
- **v3 тираж завершён (6/6 GREEN).** Что дальше? Открытые MinIO-split треки: Track A (books-vds minio 2020→2025 migration — transparent). B4 (.NET catch-all админ s3 endpoint) ✅ закрыт этой сессией (login 200; Asset Manager preview — confirm в админке). B5 (Obsidian Remotely Save) ✅ закрыт. ИЛИ stostayer v3-трек (HOLD, snolla-scope — ждёт stostayer-specific, НЕ подхватывать без GO user).
- B4 ✅ закрыт. Track A — последний transparent фоновый шаг, закрывает распад books-vds minio.
## Не делать (preemptive guards)
- **verify end-to-end против живой цели, НЕ trust halted-bisect гипотезе** — и НЕ лепи «CONFIRMED» без live-теста (memory `aws-sdk-v3-smithy-sigv4-minio-regression`).
- **resolutions OPTIONAL, НЕ mandatory** — live verify доказал: 5.6.12 работает vs vds MinIO 2025. Resolutions = determinism-hardening, не SigV4-необходимость.
- **НЕ пушить образы в `docker.stostayer.ru:443`** (VPN-бан). Registry = `registry.kzntsv.site` (vds), build на VDS — ок.
- **Portainer PUT: node in-memory, НЕ PS Invoke-RestMethod** (корраптит кириллицу compose). `StackFileContent` брать с `/stacks/{id}/file`, не `/stacks/{id}`.
- **bash `$"\n"` ≠ newline** — это locale-translation, даёт literal `\n`. Для newline в bash: `$'\n'` или `while read -r`. Иначе locs загрязняются → фейковые status-коды в parity-gate.
- **VDS gitea-SSH нет** — сборка на VDS через `git archive` (локально) → scp → extract, не `git clone` на VDS.
- **VDS SSH:** `ssh -i ~/.ssh/id_ed25519 vitya@89.253.255.94` (креды `pass show vds-kzntsv/full-env`, PORTAINER_API_KEY там же).
- **Дисциплина: runbook'и → `.wiki/concepts/<slug>-runbook.md`**, не `scripts/`. Креды → `pass`, не plaintext в git.
## Memory updates за сессию
- UPDATE `aws-sdk-v2-minio-2025-works-no-smithy-pin.md` — «remaining 5 CMS sites» теперь STALE: **все 6 v3 сайтов GREEN на 0.43.2**, тираж завершён 2026-07-30. Строка про «config-endpoint bump only» устарела.
- (handoff §v3 тираж — не memory.)