108 lines
13 KiB
Markdown
108 lines
13 KiB
Markdown
---
|
||
_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.) |