WEB-319 · Задача · — · web
ИНФРА: артефакт раздулся 171→621 МБ (physical materialization симлинка?) + убрать лишние звенья доставки A1→Интел→M1→Pi
Закрыт
P1 · важно
ведёт: backup-opus
Суть
# Артефакт раздулся 171 МБ → 621 МБ (×3.6) + лишние звенья доставки A1→Интел→M1→Pi
## Факты (из вахт OPS-STATUS-LIVE, 22.08)
| Артефакт | bytes | SHA |
|---|---:|---|
| me2-standalone-linux-arm64-3dd52177 (21.08) | 170,919,640 | bd1760c8…7bc7 |
| me2-standalone-linux-arm64-da501c43 (22.08, WEB-308) | 170,921,641 | ed02468c…43ca |
| L31 R3 (31c6ed5c) | 621,130,003 | 04101635…e5d9f |
| **L31 R4 = serving 26116cff** | **621,166,757** | a3c1c9d6…2d595 |
Исходник 31-й против da501c43 — всего 86 файлов, +9168/−413 строк. Код такого прироста не даёт: **+450 МБ появились в упаковке, не в коде.**
## Главный подозреваемый (прямо из вахты R4, 22.08)
«Первый postbuild честно rc=1 на **external dependency symlink**; разрешённая R3 **physical materialization** дала повторный postbuild rc=0» — т.е. внешняя зависимость, которая раньше жила симлинком ВНЕ артефакта, при сборке 31-й была ФИЗИЧЕСКИ вкопирована внутрь. Ровно с R3 (первой 621-МБ сборки) размер и утроился.
## Что сделать (bounded волна, offline)
1. Развернуть оба артефакта (da501c43 и 26116cff — оба лежат на Pi в releases/) и сделать du-диф по каталогам верхнего уровня: где именно +450 МБ (ожидаемо: материализованная зависимость / prisma engines / dup node_modules).
2. Вердикт: (а) законный рост (зависимость реально нужна в рантайме и раньше недокопировалась — тогда это ФИКС бага упаковки, задокументировать) или (б) паразитный (dev-зависимость/дубликат/кеш — выкинуть из упаковки, вернуть ~171 МБ).
3. Если (б): починить packaging-скрипт + негативный тест «артефакт > порога → сборка красная» (перф-гейт размера, родня WEB-227).
## Вторая часть: лишние звенья доставки
Сейчас: A1 (сборка) → Интел (ноут) → M1 → Pi — 4 звена, SHA сверяется на каждом (хорошо), но 621 МБ едут три раза (медленно; Интел-звено ещё и на 250 КБ/с истории).
Варианты:
- **A1 → M1 → Pi** (убрать Интел): M1 уже имеет ключ к A1 (~/.ssh/oracle-a1) и к Pi; длинные переносы и так положено гонять с M1 (память m4-direct-transfer-key). Выигрыш: −1 звено, ноут не участвует. Рекомендую как дефолт немедленно.
- **A1 → Pi напрямую** (−2 звена): Pi публично доступен (mailhub.duckdns.org:2046); НО требует положить Pi-ключ на облачный A1 — расширение зоны доверия прод-доступа. Решение owner; если да — ключ строго ограниченный (command= в authorized_keys только на приём файла в staging-каталог).
- SHA-сверка обязательна на источнике и назначении в любом варианте (двух точек достаточно, промежуточные не добавляют гарантий).
## Эволюция вопроса
- Вахта 22.08 (R3 build READY 621,130,003 bytes; R4 621,166,757 + «physical materialization» симлинка) — OPS-STATUS-LIVE.
- Доставка «A1→Intel→M1→Pi с совпавшими SHA» — вахта 22.08 (L31 R3 GO).
- Память контура: m4-direct-transfer-key (длинные переносы с M1, Интел-звено медленное), m4-lima-deploy-runbook (артефактный путь для M4-сборок), auditor-delivery-size-and-cover (лимиты каналов).
- WEB-227 (перф-гейты размеров) — образец гейта.
- Эпик приёмки посадок: WEB-314; сборочные тикеты 31-й: WEB-311, WEB-313.
## 23.08 02:00 UTC — корень ДОКАЗАН du-дифом (координатор, read-only на Pi)
| каталог | da501c43 (171МБ tar) | 26116cff (621МБ tar) |
|---|---:|---:|
| node_modules | 331 МБ | **2223 МБ** |
| — из них .pnpm | 302 МБ | **2193 МБ** |
| .next | 234 МБ | 192 МБ |
| остальное | ~66 МБ | ~66 МБ |
- В прод-артефакте 26116cff лежат DEV-пакеты: @types, @playwright, @tailwindcss — рост ПАРАЗИТНЫЙ.
- Подтверждена гипотеза: «physical materialization» символьного node_modules при сборке R4 скопировала весь workspace pnpm-стор вместо пруненного production-набора standalone.
- Запущена фикс-волна web319-pack на A1 (ветка agent/web319-pack-20260823): материализация только production-набора + гейт «tar > 300МБ → сборка красная» + 3 негатива.
- Часть 2 (цепочка доставки): дефолт уже переключён на A1→M1→Pi (Интел исключён, память обновлена); прямой A1→Pi — ждёт решения owner.
## 23.08 web319-pack — WEB319_PACK_FIX_READY
- commit: 1f39f30e (agent/web319-pack-20260823, base 26116cff)
- report: /home/ubuntu/waves/WEB319-PACK-REPORT.md
- production-only standalone audit added; dev-store packages (@types, @playwright, @tailwindcss) and external node_modules symlinks fail closed
- tar size gate: >300 MiB => rc!=0
- tests: 9/9 passed; polluted R4 tree rejected read-only at 2.2G node_modules / 621166757-byte tar
- clean rebuild/package not run: available R4 tree is intentionally polluted and was not modified
- deploy: not performed
## 23.08 08:30 UTC — ФИКС ДОКАЗАН на сборке 32: артефакт 170.7 МБ (было 621)
- build32 с web319-упаковкой: артефакт rel-ca69400c.tar.gz = 170,741,649 bytes (162.8 MiB) — раздувание УСТРАНЕНО (было 621МБ).
- web319 size-гейт сработал: 170741649 <= 314572800 (300 МБ ceiling), suite 10/10.
- Нюанс: гейт сперва отверг 4 «dev-labelled» бакета — оказались false-positive (traced-транзитивы ws/esbuild/baseline-browser-mapping по Next NFT); уточнён на trace-bound классификацию. standalone 449 бакетов против 1669 workspace — dev-мусор НЕ материализуется.
- Часть 2 (доставка): артефакт 32 доставлен A1→M1→Pi напрямую (Интел исключён — новый дефолт).
## 2026-08-23 BOARDSWEEP: STALE-NOT-DEPLOYED
- Evidence: Ticket body says the web319 packaging fix was not deployed; canonical has no bound serving pointer for it. buildFixed=ca69400c is not resolvable/ancestral in wt-sweep. No artifact transfer/deploy performed.
- buildFixed: ca69400c; canonical: v4-081ff4fb5 / 081ff4fb5f6110f8001daec7ed910ccef2e395dc.
- Status preserved by sweep: review.
Доказательства
[2026-08-24 STALEREV против 61bc04462; в проде с посадки 45 v4-5a4edbac3] Вердикт SERVED: реализация+тесты доказаны в target tree; принято по приёмке 45-тикетного разбора. Отчёт: A1 /home/ubuntu/waves/STALEREVIEW-REPORT.md (STALEREVIEW_DONE).
Замечен в сборке
26116cff
Починено в
v4-5a4edbac3
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-319","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-24T14:29:00.632Z