Commit Graph

18 Commits

Author SHA1 Message Date
b299c7d5da deploy(tandemmebel): staging стек 20 → a173401 (FeedPages) — роуты 404→200, но grid+крошки ПУСТЫЕ (VM-баг у прогера)
Ребилд по ops-таску workshop: образ tandemmebel:a173401 (snolla 0.35.0/core
0.16.0/data 0.13.0, digest 6962bd97) собран на VDS, стек 20 передеплоен через
Portainer API (env 8/8, healthy). FeedPages чинит роутинг gallery 404→200 (12/12).

RED на рендер-чеке: gallery-grid пустой на всех роутах (staging /galleries/*/images
= 0 vs prod 24/80/62), breadcrumb itemprop=name пустые. Корень — FeedPage-VM не
прокидывает item в шаблон. Деплой чист; фикс на прогере. Пропинговал с уликами.
Cutover HELD.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-04 12:58:40 +03:00
5be6662c60 deploy(tandemmebel): SHARP staging GREEN — stack 20 on image 68b93a9, cutover held on operator
Пивот tandemmebel на in-process sharp завершён (snolla 0.34.0/core 0.15.0).

- Образ registry.kzntsv.site/tandemmebel:68b93a9 (digest 12288b15) собран на VDS из sha 68b93a95.
- Стек 20 обновлён на sharp-образ (env verbatim 8/8, PullImage:false). Контейнер healthy, лог чист.
- Compose: движок 0.34.0/0.15.0, imgproxy из tandem-пути убран (sharp in-process), egress без imgproxy.

Parity-smoke GREEN: nav 8/8; sitemap staging⊇prod (prod-only=0, +12 categories benign); 2012-посты 31/31;
redirects 301/301; sharp media = slug-URL 200 webp serve-bytes, 0 /imgproxy-рефов; variant-cache пишется
(32 объекта, NoSuchBucket снят); watermark визуально ✓ featured+lightbox, gallery-small чистый.

Находка (не блокер): осиротевший imgproxy-блок в production.json пина эмпирически мёртв (0 /imgproxy-рефов) → heads-up воркшопу вычистить.

HOLD cutover — DNS gated оператором (reg.ru → 89.253.255.94).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-04 11:51:19 +03:00
85fa2d7ad9 deploy(tandemmebel): staging GREEN on vds-kzntsv — stack 20, image 0facb35, cutover held on operator
Финал тиража tandemmebel. Ops-часть до cutover, всё зелёное.

- Образ registry.kzntsv.site/tandemmebel:0facb35 (snolla@0.32.2/core@0.13.8,
  digest 464d2f22, watermark-override в пине) собран НА VDS (обход traefik-499).
- Стек Portainer tandemmebel Id 20 (ep1), staging-rule Host(tandemmebel.vds.kzntsv.site),
  env verbatim из labtools стека 17 (8/8). Контейнер healthy, MSSQL+S3, listening :5000.
  Source-of-truth compose: host-stacks/vds-kzntsv/tandemmebel.compose.yml.
- PURGE imgproxy-nginx кэша (books-vds стек 29) — stale-clean featured ушли,
  featured отдаёт 27820B вотермарк без cache-bust.

Staging-smoke с VDS GREEN: status-parity 10/10; sitemap staging index (184) ⊇
prod (172) prod-only=0 + 12 /projects/categories/* (benign#3); trailing 301/301;
blog-post 200 +3.5KB (benign#2 imgproxy vs /galleries/ 26/26); 2012-посты 31/31;
theme 21/22 MD5-OK. Находка (не блокер): prod Gotham-Pro.css=0B пустой,
staging=4436B корректный → cutover чинит латентный прод-баг шрифта.

HOLD cutover — DNS-флип gated оператором (reg.ru → 89.253.255.94).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-04 08:34:36 +03:00
7127e92a4d ops(books-vds): add tandemmebel imgproxy watermark glyph (logo.png, sha256 e995...971fc)
Durable binary channel for [imgproxy-watermark-glyph-books-vds] — base64-in-task got
corrupted in transit (field truncation looped PNG tail, dropped IEND). This is the
verified-intact 348x42 RGBA wordmark. Admin: git show this path, sha256==e995...971fc,
then set IMGPROXY_WATERMARK_DATA=base64(this file) on imgproxy stack 29.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-04 07:43:09 +03:00
a9f4f3a673 deploy(labtools): 43e28ba LIVE on vds-kzntsv — cutover done, labtools.ru on VDS
DNS zone is on Yandex DNS (dns1/dns2.yandex.net), not reg.ru. Flip propagated
unevenly (dns2 first, dns1 lagged); cutover gate = BOTH authoritative Yandex NS
agree apex+www -> 89.253.255.94 (monitor waited for it) so LE HTTP-01 can't hit
RUVDS via a stale auth server and burn the rate-limit.

Stack 17 traefik-rule -> Host(labtools.ru)||Host(www.labtools.ru) via Portainer
PUT (env 8/8 preserved, pullImage=false). LE cert issued (~t+20s; brief self-signed
window during issuance). Live-smoke GREEN: both hosts 200 (nav+catalog+products),
redirects parity (trailing/lowercase/.php), sitemap index host=labtools.ru (this
tenant's siteUrl is non-www), theme assets byte-identical (RUVDS 301 apex->www made
the direct md5 an artifact; -L => MD5-OK). Staging host removed (->404). External:
apex->VDS 200; www still split-brain on RUVDS cache (200, identical content, TTL 6h).
RUVDS left intact as rollback.

Task closed. Whole batch done: labtools.ru + labtools.pro LIVE on VDS.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 12:42:57 +03:00
ed99f2225b deploy(labtools-pro): b LIVE on vds-kzntsv — cutover done, labtools.pro on VDS
DNS flip confirmed at authoritative ns1.reg.ru (Resolve-DnsName) + 8.8.8.8 ->
89.253.255.94 (labtools.pro/www; NOT labtools.ru). Earlier checks hit stale TTL
cache; authoritative NS was the truth.

Stack 19 traefik-rule -> Host(labtools.pro)||Host(www.labtools.pro) via Portainer
PUT (env 8/8 preserved, pullImage=false). LE cert issued instantly (ssl_verify=0).
Live-smoke GREEN: both hosts 200 (nav+catalog+products), redirects parity, sitemap
index host=www, real content (lang=en). Staging host removed (->404). External
check from RUVDS box: labtools.pro/www -> 89.253.255.94 HTTP 200 trusted cert.
RUVDS labtools.pro left intact as rollback.

Task closed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 12:07:52 +03:00
531d7f0fda deploy(labtools-pro): staging GREEN on vds-kzntsv — image 7bd9fae, stack 19, parity vs prod
Mirror of emspb deploy. Built registry.kzntsv.site/labtools-pro:7bd9fae on VDS
(guard: default.json absent), created Portainer stack labtools-pro (Id 19, env
verbatim from labtools stack 17). Container healthy, MSSQL+S3 connected.

Staging smoke vs www.labtools.pro (RUVDS) GREEN, run from VDS:
- nav + 3 catalog sections + products 200/200
- redirects (catalog#1->lshm-750, /Contacts lowercase, trailing) 301 parity
- sitemap: snolla index of 7 children, aggregate 25 URLs == prod set, host=www (R3)
- theme assets 7/7 md5-identical; Cache-Control absent (correct, CachingOptions=[])
- content pages real body, delta +155..222B (host length in canonical)

Cosmetic (not a defect, flagged to workshop): startup banner logs "labtools.ru
(snolla)" — scaffold constant; site identity is siteId 663F9410 in production.json.

Cutover (live DNS) is gated on operator. Runbook + compose committed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 11:38:56 +03:00
c3b722bb6d deploy(emspb): b6e361a LIVE on vds-kzntsv — staging GREEN + cutover done
- image registry.kzntsv.site/emspb:b6e361a (digest 8f5ba02) built on VDS from clean git-archive
- Portainer stack emspb (Id 18) traefik+LE; 8 runtime-env secrets reused verbatim from labtools stack-17
- staging smoke vs prod www.emspb.ru: 23/23 status-parity, theme CSS+image (MinIO) md5-identical, CC 86400
- cutover (operator flipped emspb.ru/www DNS -> VDS): traefik-rule Host(emspb.ru)||Host(www.emspb.ru),
  staging host emspb.vds.kzntsv.site removed post-cutover (-> 404), single LE cert,
  live smoke www.emspb.ru+emspb.ru 200 ssl_verify=0, canonical normalized, live == old-RUVDS byte-identical
- RUVDS IIS 80.64.31.36 intact = rollback path
- runbook .wiki/concepts/emspb-vds-deploy-runbook.md (mirror labtools)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 00:38:03 +03:00
a15fd65ae9 deploy(labtools): staging on vds-kzntsv GREEN — image 43e28ba, parity vs prod
- build registry.kzntsv.site/labtools:43e28ba on VDS from clean git-archive
  (no config/default.json), push from VDS (registry local)
- Portainer stack `labtools` (Id 17) on labtools.vds.kzntsv.site, container
  healthy (MSSQL mssql.kzntsv.site + MinIO minio.kzntsv.site), 8 secret-env in
  stack-env (not in image/git)
- smoke parity vs www.labtools.ru GREEN: menu pages 200/200, redirects
  (.php / trailing-slash / lowercase) 301 1:1, theme.css + /assets byte-identical
  from MinIO, Cache-Control max-age=86400
- add runbook .wiki/concepts/labtools-vds-deploy-runbook.md + stack source
  host-stacks/vds-kzntsv/labtools.compose.yml
- cutover DNS gated to operator (tomorrow 2026-07-02); RUVDS IIS 80.64.31.36
  prod untouched = rollback path

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 00:21:28 +03:00
027cc79d23 deploy(pilonuxt): GSC Product name fix LIVE on prod — c4e34d4
Rebuilt pilonuxt from monorepo master c4e34d4 (workspace Dockerfile,
sharp @img baked, live VERDACCIO_TOKEN). Canon delivery: build here
(425MB) -> docker save | ssh vds load -> push FROM vds -> Portainer
stack 16 pullImage:true (tag 6c6d52d->c4e34d4, fresh registry pull).

Acceptance MET (in-container smoke on VDS + prod smoke via curl
--resolve, bypassing LAN-DNS): 3 product pages 200, leading
<meta itemprop="name"> inside schema.org/Product = product title
(was only Brand 'Пилорама 98' before). 10 nav routes 200, no regression.
Compose SOT -> c4e34d4. Inbox victor/pilorama98.ru sent.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 09:56:16 +03:00
vitya
45ebe629c9 deploy(pilorama): GREEN on prod — SEO live via monorepo build 6c6d52d
4th layer fixed by peer (data 0.9.0->0.9.1). Rebuilt from 6c6d52d
(workspace Dockerfile + sharp @img copy), pushed from VDS, deployed stack 16.
Container smoke all 200: product title<=60 + meta 'доставка по СПб и ЛО';
/catalog/planken 'Планкен прямой и скошенный — купить в СПб'; products 200x3;
home/shipping/blog meta ok. stderr clean. Compose -> 6c6d52d.
Pending (cross-repo, needs push-ok): commit sharp Dockerfile + docker-deploy.md to monorepo.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:11:06 +03:00
103df9fa46 feat(deploy): pilonuxt 37412d0 — offers в микроразметку Product, GSC-фикс live
redeploy-pilonuxt-gsc-offers closed. Build workstation @37412d0 (verdaccio
build-secret) → push registry.kzntsv.site/pilonuxt:37412d0 → перекат Portainer
stack 16 (PUT API, PullImage). Acceptance: itemprop="offers" (price/currency/
availability/url) на странице товара, verified curl --resolve к VDS; меню+viewModel
200, без регрессии.

Попутно: registry.kzntsv.site зарегистрирован в Portainer (Custom Id 1) —
первый pull падал "no basic auth credentials" (Portainer не имел ни одного
registry; host docker login слетел). Теперь приватный registry авторизован
в Portainer постоянно.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 10:09:19 +03:00
9add1ac164 feat(deploy): pilonuxt CUTOVER LIVE on www.pilorama98.ru — deploy-pilonuxt-vds closed
vitya флипнул DNS pilorama98.ru+www → 89.253.255.94. Перенастроил traefik
роутер на боевые хосты (apex+www+vds-subdomain, LE cert), снял smoke
GTM-override (прод-аналитика вкл), выкатил 125a3e2 (фикс Продукция→/catalog).
Финальный smoke с VDS по www.pilorama98.ru: все страницы page 200/viewModel
200, картинки 200 webp, x-powered-by Nuxt (не IIS), cert valid, битый
футер-линк убран. Форма закрыта (vitya ok + pilonuxt dev-verified).
Stack 16. Задача 🟢 closed. Follow-ups: decommission старого IIS после soak.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 00:09:08 +03:00
2911f2b3e5 feat(deploy): pilonuxt 961a838 — content-api fixed, full re-smoke; 1 bug left (/products 404)
pilonuxt пофиксил content-api (@snollajs/data 0.9.1 + tedious traceInclude),
тег 961a838. Stack 16 перекатан. Полный re-smoke (весь меню 21 стр + viewModel
по каждому + Playwright браузер + скрин): viewModel 200 везде, страницы 200 с
реальным контентом, картинки 200 webp, консоль 0 ошибок, верстка целая.
Остался реальный баг: пункт меню «Продукция» → /products → 404. + форма не
тестилась (живой email). Cutover отложен до закрытия /products + формы.
.gitignore: smoke-артефакты (скрин, .playwright-mcp).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 23:59:56 +03:00
1725425972 feat(deploy): pilonuxt re-smoke GREEN on pilonuxt.vds.kzntsv.site (tag 3622662)
pilonuxt пофиксил дубль Vue в prod-бандле (resolutions @vue/*), тег 3622662
(36ec970 битый). Stack 16 перекатан. Smoke: / 200 SSR, /catalog 200 с
товарами из CMS, картинки imgproxy 200 webp + статика 200, внешний доступ
200 cert valid. Остаток: contacts-form email (живой, держу) + cutover
www.pilorama98.ru (решение vitya).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 22:59:57 +03:00
38e84ce20b feat(deploy): add pilonuxt VDS Portainer stack compose; block on pilonuxt Dockerfile fix
pilonuxt deploy на vds-kzntsv за Traefik. Compose готов (proxy net,
websecure, certresolver letsEncrypt, Host pilonuxt.vds.kzntsv.site, :3000,
GTM погашен на smoke-поддомене). Домен согласован с vitya: temp-поддомен
для smoke, cutover www.pilorama98.ru — отдельным шагом.

Сборка диагностирована, образ НЕ собран — Dockerfile pilonuxt падает в
чистом контейнере (локально замаскировано глоб. yarnrc + сетью):
  1. .yarnrc.yml без npmAlwaysAuth:true → YN0041 anonymous (whoami=vitya).
  2. Dockerfile не копирует scripts/+src/generated до yarn install →
     postinstall Cannot find module scripts/ensure-schema.mjs (YN0009).
По решению vitya сборка отдана pilonuxt (их репо/фикс), за admin — Portainer.
Inbox victor/pilonuxt отправлен с разбором. Задача 🔵 blocked до образа.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 22:01:48 +03:00
12c7dc5ab9 tasks(NEXT_SESSION): session-close — bookva tenant deep-debug + 6-bug post-mortem
Multi-fix session: bookva tenant works correctly после 6 fix'ов одной природы
(incomplete cutover-prep без e2e smoke). См. NEXT_SESSION.md § "What's LIVE"
+ § "Memory updates" + shared wiki concept tenant-overlay-config-volume-mount-path-pitfall.

Changes:
- host-stacks/books-vds/ops-mcp.compose.yml: add BOOKVA_MARIADB_PASSWORD env
  declaration + multi-tenant docs note. Stack 26 ещё не пере-PUT'нут на это,
  открытая микро-таска ops-mcp-multi-tenant-stack-activate в NEXT_SESSION.
- STATUS.md: 6-bug summary в latest update line.
- NEXT_SESSION.md: full rewrite с 14 recent commits, open треками, asks к user'у,
  memory updates про agenda.db.collection / composite jobId / scheduler envs /
  bookva auth tokens.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 18:32:29 +03:00
10e80dc036 tasks(books-ops-mcp-host-promote): 🟢 closed + host-stacks compose canonical
Stack 26 (books-ops-mcp) in-place PUT в host-level compose без container churn.
Stack 43 (bookva-ops-mcp) deleted. 2 Gitea secrets revoked.

New canonical: `host-stacks/books-vds/ops-mcp.compose.yml` (management-plane,
manual Portainer updates как traefik/portainer).

Design locks: location=.admin/host-stacks, deploy=manual Portainer,
MariaDB scope=slovo's only (Option A), config path unchanged.

Companion commits: `victor/books ae3ab14`, `victor/bookva-overlay 50f5bbb`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:04:15 +03:00