Files
admin/.tasks/NEXT_SESSION.md

13 KiB
Raw Blame History

_last_updated_, session_id, prev_session_id
_last_updated_ session_id prev_session_id
2026-07-31T03:20:00Z 2026-07-31-maljarka-restore 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/tandemmebeldocker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKENregistry.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) синхронно закоммичен 8df10ee9d51c09. 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.)