WEB board

всеканоны и докиворкеры↗ iOS↗ Легаси
WEB-401 · Задача · — · web

[WEB370-C] Невоспроизводимые и кастомные arm64-артефакты

Закрыт P1 · важно ведёт: — эпик: WEB-395
Суть
Источник: WEB370PLAN2. Зависимости: WEB370-A, WEB370-D. Оценка: 1.5 дня. Только pinned/signed artifacts.

--- 30.08 ~12:45Z (Фабл): волна web370c ГОТОВА (246b4aaa, wave/web370c): SHIP-DARK статус — на A1 собраны 3 воспроизводимых source-release архива с пиннингом; НЕ собраны (честно, без подстановки версий): signal-cli/signal-call-tunnel, Asterisk/Opus, 2 старых TG bot runtime — нужны Pi provenance (исходники/точные версии соберёт координатор с Pi). Production activation NO-GO до owner signature + storage/fence gates. iMessage = M1-only/EXCLUDED. Отчёт: A1 WEB370C-REPORT.md. Следующий шаг: координатор снимет provenance с Pi для несобранного списка.

--- 30.08 ~12:55Z (Фабл): Pi provenance снят координатором (read-only): signal-cli стоковый 0.13.24 (/usr/local/bin); signal-cli-forked 0.14.1-SNAPSHOT (/opt/signal-cli-forked, БИНАРНАЯ установка bin/lib — НЕ git-репо; 4 пары .bak/.prev от meetingroom-1066 03.07); Opus НЕ кастомный — системный libopus0 1.3.1-3 arm64 (deb); pjproject в /opt/pjproject (bin/include/lib — тоже бинарная установка); /opt/asterisk содержит CREDS.txt+etc, бинаря в /opt/asterisk/bin НЕТ (freepbx каталог рядом; в docker ps asterisk не значится — способ запуска доуточнить); TG bot: /home/pi/oauth-bot (docker-compose) + botenv. ВЫВОД для воспроизводимости: fork-у 0.14.1-SNAPSHOT нужен исходник (git-репо на Pi отсутствует — искать в бэкапах/у owner-а), остальное системное/контейнерное. Дальше: уточнить запуск asterisk (systemd юниты) следующим заходом.

--- 30.08 ~13:00Z (Фабл): ⭐ ИСХОДНИК ФОРКА НАЙДЕН (owner подтвердил: у него исходников нет, искать самим): /home/pi/signal-call-tunnel/third-party/signal-cli — живой git-репо, HEAD a05c662a, дерево ЧИСТОЕ, origin https://github.com/visigoth/signal-cli.git, кастомные Meeting Room патчи (serverGuid fallback backport, sealed sender guards/логирование — коммиты a05c662a/90e7dad0/5f068ab2). Именно из него собран /opt/signal-cli-forked (0.14.1-SNAPSHOT; gradle daemon-логи Pi подтверждают путь сборки). ЗАБЭКАПЛЕНО: git bundle --all обоих репо (signal-cli-forked-a05c662a.bundle sha 0ac51b28…, signal-call-tunnel-02c84e9.bundle sha ed482d8b…) → A1:/home/ubuntu/telephony-lz/releases/ + Hetzner:/home/app-artifact/ (sha сверены на всех хопах). Воспроизводимость форка обеспечена.

--- 30.08 ~15:00Z (Фабл): ASTERISK PROVENANCE ЗАКРЫТ (read-only с Pi): Asterisk 20.19.0, кастомная сборка в /home/pi/.local/asterisk (+ вариант /home/pi/.local/asterisk-opus-experimental); рецепт сборки ЕСТЬ В РЕПО: /home/pi/ag-voice/infra/sip/install-asterisk-linux.sh; запуск: systemd ag-sip-native.service (+ ag-sip-native-opus-experimental) → supervisor /home/pi/ag-voice/infra/sip/systemd-sip-supervisor.sh, WorkingDirectory=/home/pi/ag-voice, конфиги infra/sip/asterisk-conf/. /opt/asterisk и freepbx — НЕ рабочий путь (там только CREDS/etc, бинаря нет). Итого по несобранным из WEB370C: signal-cli-fork ЗАБЭКАПЛЕН (bundle), asterisk РЕЦЕПТ в ag-voice (репо надо забандлить так же — следующий шаг), pjproject бинарный в /opt (рецепт вероятно тоже в ag-voice — проверить при бандле), TG bots = docker-compose (oauth-bot).
+ ag-voice (НЕ git-репо!) забэкаплен целиком: ag-voice-src-20260830T124404Z.tar.gz (78МБ, без node_modules/wav/raw, sha f1b5446a…) → A1 telephony-lz/releases + Hetzner app-artifact, sha сверен на всех хопах. Внутри: рецепты asterisk, supervisor, конфиги SIP, opus-эксперименты.
Чем закрывается (приёмка)
Clean A1 install from signed manifest; file/readelf/ldd и smoke green; pinned hashes, SBOM и lockfiles; aliases latest/current не используются.
Доказательства
[2026-08-27 03:20Z] web401c в очереди A1 (свой бокс, arm64): SBOM кастомных артефактов + практическая установка signal-cli pinned в /opt/nc-landing/releases, ship-dark.
[2026-08-27 05:25Z] WEB401C DONE: SBOM кастомных arm64-артефактов + практические установки в /opt/nc-landing/releases (ship-dark). Открытые решения зафиксированы: версия/конфиг FreeSWITCH или signed-исключение прототипа; hash-locked requirements. Отчёт A1:waves/WEB401C-REPORT.md. -> review.
[2026-08-27 20:29:19Z tickacc5] ВЕРДИКТ: частично доказано
Что проверил: открыл WEB401C-REPORT.md и manifest/clean-install receipts; проверил текущие /opt/nc-landing/releases и отсутствие web370-a1; сверил file/readelf/ldd/hash/SBOM результаты по артефактам.
Что увидел: upstream signal-cli 0.14.7, arm64 JNI, Asterisk и clean signed-manifest install имеют PASS; текущий A1 web401c release присутствует. Report фиксирует BLOCKED для Pi custom signal-cli fork/tunnel/JS shim, FreeSWITCH exact config и трёх Python venv из-за отсутствующих refs/locks; production activation NO-GO. Full report не доказывает l61.
Отрицательный тест: /opt/nc-landing/releases/web370-a1 и плавающий alias не найдены; custom refs/locks не предъявлены.
Чего не хватает: hash-addressed Pi custom sources, FreeSWITCH version/modules/config, requirements locks трёх venv, свежая полная WEB370-C проверка после l61 и capacity gate.
[2026-08-27T21:56:32Z EVID401] ВЕРДИКТ: частично доказано
Что проверил: прочитал TICKACC5-REPORT.md, WEB401C-REPORT.md и текущий WEB-401; read-only проверил наличие A1 bundle /opt/nc-landing/releases/web401c-a1-arm64-20260827 и clean-verify каталога, manifest SHA 0deb236d03419caa9896b1a15b7890514b0cc355cf2b9448cf792eaecd56bbca и SBOM SHA 09e590a83cd5e52c5da5aa96a605f2680711d528b43ab48f7185af734ffb20cf. Повторно запросил Pi ssh -p2046 и M1 SSH только на чтение; git на M1 не запускался.
Что увидел: принятые upstream signal-cli 0.14.7, arm64 JNI, Asterisk и clean signed-manifest install остаются доказанными по WEB401C; Pi custom signal-cli 0.14.1-SNAPSHOT, signal-call-tunnel и JS shim имеют неизвестные refs/locks/hashes; точная FreeSWITCH version/modules/config отсутствует; для telegram-call-native, bookbot и gptbot нет фактических package lists и lock SHAs; l61 full-C manifest/build receipt в доступных A1 roots отсутствует. Existing A1 bundle не доказывает parity с Pi custom stack.
Отрицательный тест: прямой Pi SSH получил timeout, через CONNECT proxy endpoint достигнут, но auth ответил Permission denied (publickey); M1 SSH также timeout/Permission denied. В доступном A1 workspace/release поиск l61-named files пуст. Upstream 0.14.7 не принят как fork-equivalent; production activation остаётся NO-GO.
Чего не хватает: read-only Pi inventory с binary SHA/mode/ref и source/build locks для fork/tunnel/shim; exact FreeSWITCH source ref, version, modules.conf, ESL/config hashes или signed exclusion; dist-info/METADATA package lists (pip freeze equivalent), source hashes и hash-locked requirements с SHA для всех трёх venv; подписанный l61 full-C source/tree/build manifest, полный log и clean-install receipt. Отчёт: /home/ubuntu/waves/EVID401-REPORT.md (SHA-256 d2824a15bbf498d011b399d82d31b66c0d1ead5af2d4f3e2328b2c89605e3fd1).
[2026-08-27T21:57:14Z EVID401 correction] EVID401-REPORT.md после финальной редакции имеет SHA-256 456c65a758b498634820ac6c6abb2f5315cdb70fa34e4452711770dbb7c236b1; в таблице уточнён полный путь A1 к pinned Asterisk/Opus fallback sources. Остальное evidence и вывод WEB370-C не изменены.

[2026-08-27 ~22:10Z КООРДИНАТОР — инвентарь невоспроизводимых артефактов СНЯТ С ЖИВОГО ПРОДА]
Волна evid401 не смогла дотянуться до Pi (у волн на A1 нет доступа к проду — и они правильно не стали подставлять upstream-версии вместо фактов). Снял сам, только чтением.

⚠️ ГЛАВНОЕ РАСХОЖДЕНИЕ: в проде работает НЕ то, что аттестовано.
Прежняя чистая подписанная квитанция подтверждала upstream signal-cli **0.14.7**. Фактически в проде:
- `/usr/local/bin/signal-cli-forked` — это обёртка на 213 байт (bash), задаёт JAVA_HOME из sdkman и `-Djava.library.path=/usr/local/lib`, затем зовёт `/opt/signal-cli-forked/bin/signal-cli`;
- реальный форк: `/opt/signal-cli-forked/`, установлен 27.04, 37 jar-файлов в lib;
- версия: **0.14.1-SNAPSHOT** (не выпуск, а СНИМОК), jar `signal-cli-0.14.1-SNAPSHOT.jar` sha256 `1742e83158127d29a853d01b…`, `libsignal-cli-0.14.1-SNAPSHOT.jar` sha256 `0193e4a85560a21f78fc6467…`;
- `libsignal-client-0.87.4.jar` в том же lib;
- нативная библиотека JNI: `/usr/local/lib/libsignal_jni.so`.
Вывод: аттестованная 0.14.7 и работающая 0.14.1-SNAPSHOT — РАЗНЫЕ вещи. Снимок-сборку форка нельзя воспроизвести без исходной ревизии и окружения сборки; для переезда это блокер, а не формальность.

FREESWITCH — собран ВРУЧНУЮ, не из пакета:
- `/usr/local/bin/freeswitch`, `dpkg -S` не находит владельца пакета (подтверждение ручной сборки);
- версия: **1.10.12-release+git~20240802T210227Z~a88d069d6f~64bit**, git-ревизия **a88d069**, дата сборки исходника 2024-08-02;
- двоичный файл: sha256 `bf57e47e85faa47bc2e9a144…`, 113 840 байт, изменён 11.08.2025;
- конфигурация: `/etc/freeswitch`, **703 файла** — это и есть та «точная конфигурация», которую надо переносить целиком, а не пересобирать по памяти;
- сопутствующие нативные библиотеки в `/usr/local/lib`: `libfreeswitch.so.1.0.0`, `libg7221codec.so.2`, `libgsmcodec.so.2`, `libilbccodec.so.2` (кодеки, тоже собраны вручную).

ТУННЕЛЬ ЗВОНКОВ: `/usr/local/bin/signal-call-tunnel`, 18 116 776 байт, 27.04, sha256 `37dab73d34c46c73891daa51…`. Происхождение из пакета не подтверждается.

СЛУЖБЫ ТЕЛЕФОНИИ НА ПРОДЕ (фактическое состояние): активны `freeswitch`, `signal-cli-daemon` (запускает форк с `--socket /tmp/signal-cli.sock`), `signal-call-poller`, `signal-poller`, `signal-shim`; `signal-call-bridge` — inactive/dead.

ВИРТУАЛЬНЫЕ ОКРУЖЕНИЯ PYTHON — найдено ШЕСТЬ, не три (все Python 3.11.2 из /usr/bin, кроме одного на 3.12.4 из homebrew — то есть окружение собиралось на другой машине):
`/home/pi/video-context-venv` 156 пакетов; `/home/pi/books-app/.venv` 123; `/home/pi/madeira_rentals_search/venv` 108 (python 3.12.4, home=/opt/homebrew — чужеродное для Pi); `/home/pi/madeira_rentals_search/.venv` 62; `/home/pi/project-x-ingest-service/.venv` 60; `/home/pi/botenv` 7.
Файлов блокировок версий (lock) не предъявлено ни для одного — то есть точный состав пакетов держится только фактическим содержимым каталогов.

ЧТО ЭТО ЗНАЧИТ ДЛЯ ПЕРЕЕЗДА (ответ на вопрос тикета «что мы НЕ сможем пересобрать»):
1. signal-cli форк 0.14.1-SNAPSHOT — нужна исходная ревизия форка и окружение сборки, иначе переносим только двоичные файлы как есть;
2. FreeSWITCH 1.10.12 git a88d069 + 4 кодека — ручная сборка, нужна фиксация ревизии и шагов сборки либо перенос двоичных файлов;
3. конфигурация FreeSWITCH (703 файла) — переносить целиком;
4. signal-call-tunnel — двоичный файл неизвестного происхождения;
5. шесть venv без lock-файлов, один собран не на Pi.
РЕКОМЕНДАЦИЯ: до переезда снять полный архив этих путей с контрольными суммами (это и будет «воспроизводимость через перенос»), и отдельно решить с owner, что из этого пересобирать по-настоящему, а что переносить как двоичное наследие.

ГРАНИЦЫ СОБЛЮДЕНЫ: только чтение (ls/cat/sha256sum/systemctl show/--version), прод не мутировался, содержимое секретов не читалось и не печаталось.

## 2026-08-28 ~12:15Z — взято в работу (координатор Фабл)
`ACC401` = **NO-GO**, отчёт `A1:/home/ubuntu/waves/ACC401-REPORT.md`. Волна `web401b` переделывает. Изменено требование к форме — то же, что спасло карту переезда: каждая строка переписи обязана иметь колонку «источник» вида `pi-inventory-full.md:строка`; строка без источника уходит в раздел «нужно снять с машины» с готовой командой координатору.

[28.08 15:20Z Фабл] ACC401B = NO-GO: runbook с буквальным backslash обработал 0 из 15 таймеров (bash -n прошёл — исполнение нет); route parser превращает malformed body в пустой объект; beacons отвечают true до fetch; heartbeat-ошибки глотаются; по target «НЕ ДОКАЗАНО». Заряжен web401c (очередь 262): исполнение runbook на фикстуре с гейтом «обработано N == входных N», typed отказы, чек-лист координатора. Отчёты: ACC401B-REPORT.md, будет WEB401C-REPORT.md.

[28.08 19:10Z Фабл] ACC401C = NO-GO: dry-run проходит, но OpenAI-путь не ждёт session-start, и сервер превращает ledger-отказ ok:false в logged:true (класс «отказ читается как успех»). Заряжен web401d (очередь 270). Отчёты: ACC401C-REPORT.md.

[BOARDTRIAGE] ACC401C NO-GO 28.08 19:10Z: dry-run проходит, но OpenAI path не ждёт session-start, а ledger ok:false читается как logged:true. Следующий шаг web401d с typed refusal и runtime proof.
Лента
2026-09-02T08:04:10.698Z · Fable
[02.09 08:20Z Фабл] Провенанс с Pi (координатор, read-only): живые юниты мессенджеров на Pi — bookbot (/home/pi/Documents/bookbot, python), gptbot (/home/pi/Documents/gpt/img-bot.py), signal-shim/signal-poller/signal-call-bridge/signal-call-poller (/home/pi/signal-shim, node), telegram-call-native (releases/20260707T122135Z-meetingroom1148-…, python); все без git. Asterisk 20.19.0 на Pi — только бинарная сборка в /home/pi/.local/asterisk (исходников/opus-исходников на Pi нет; res_format_attr_opus.so есть) → воспроизводимость Asterisk/Opus остаётся gap (нужен пересбор из upstream tarball 20.19.0 + opus codec провенанс). Пакет исходников без секретов/venv/данных: provenance-pi-20260902.tar.gz → Storage Box /home/app-artifact (+ sha256), рядом ранее: signal-cli-forked-a05c662a.bundle, signal-call-tunnel-02c84e9.bundle, ag-voice-src-20260830T124404Z.tar.gz. Побочные находки на Pi: signal-cli-daemon в рестарт-цикле «User +3538573… is not registered» (Signal-канал мёртв, нужна перерегистрация owner-ом — запрошено в TG); img-bot — сломанный дубль gptbot (venv отсутствовал) — выключен.
2026-09-02T08:06:36.784Z · Fable
[02.09 08:25Z Фабл] Пакет provenance-pi-20260902.tar.gz первой сборки содержал файл с токен-подобной строкой (Documents/gpt/test_token.py) — удалён со Storage Box за минуты; пересборка с контентным сканом секретов (regex токенов/ключей, 0 совпадений в содержимом архива) → повторная публикация. Урок: перед публикацией любого пакета с чужих машин — сканировать содержимое, не только имена файлов.
2026-09-02T08:08:18.073Z · Fable
[02.09 08:35Z Фабл] Пакет провенанса переопубликован: Storage Box /home/app-artifact/provenance-pi-20260902.tar.gz (2.53 МБ, sha256 рядом) — только код/конфиги (py/js/json/md/sh/service/requirements) из bookbot, gpt, signal-shim, telegram-call-native release 20260707T122135Z; 3560 файлов → 3541 (19 исключены по контентному скану токенов/ключей), в архиве 0 совпадений. Данные, venv, node_modules, .env, сессии — не включены (по замыслу). Остаток WEB-401: воспроизводимая сборка Asterisk 20.19.0 + opus (исходников на Pi нет) и 2 старых TG-bot runtime (bookbot/gptbot — python без pin-ов версий: requirements есть в пакете).
2026-09-02T13:44:30.052Z · Fable
[A1 13:44 Фабл] Волна 1225-web401provenance (M4): воспроизводимый рецепт сборки Asterisk 20.19.0 arm64 + opus (build-asterisk.sh с pinned tarball/sha, menuselect для pjsip/confbridge/agi/audiosocket/ari/opus), verify-asterisk.sh (сверка живого prefix с provenance.json), таблица нужных модулей из конфигов репо, Dockerfile.arm64 для сборки на A2. Сборку запускаем на A2 после сдачи; сверка с живым /home/pi/.local/asterisk на A1; артефакт + provenance.json на Storage Box рядом с provenance-pi-20260902. Это снимает блокер cutover-а WEB-413.
2026-09-02T14:13:55.570Z · Fable
[A1 14:15 Фабл] Волна 1225-web401provenance (M4) сдана: b05073020c291590f7a0693be02a5a7d0a99db99 (ветка web401provenance-1225): infra/sip/provenance/{build-asterisk.sh (arm64, pinned tarballs+sha, bundled pjproject/jansson, menuselect, provenance.json), verify-asterisk.sh (сверка версии/бинарей/модулей/sha, 0|2, JSON), Dockerfile.arm64 (multi-stage, не запускался), README (запуск на A2, сверка с A1, таблица модулей)}. Приёмка 1232-accweb401provenance (M4). Далее операторы: сборка на A2 (aarch64) по рецепту → verify против живого /home/pi/.local/asterisk на A1 → артефакт+provenance.json на Storage Box → WEB-413 O-план.
2026-09-02T14:50:39.411Z · Fable
[A1 14:56 Фабл] Приёмка 1232-accweb401provenance (M4): NO-GO по критерию «официальный Digium codec_opus с pinned URL/sha» — автор собирал codec_opus_open_source из overlay traud/asterisk-opus (Digium даёт codec_opus только x86-32/64). Сверка с ЖИВЫМ A1 (координатор): Asterisk 20.19.0, 300 модулей, opus — ТОЛЬКО res_format_attr_opus.so (passthrough), codec_opus нет вовсе. Вывод: критерий был неверен, а overlay — лишний для паритета с продом. Корректировка 1243-web401provenance2 (M4): рецепт по умолчанию = живой A1 (без codec_opus, полный набор модулей по списку /home/ubuntu/ops-backups/live-a1-asterisk-modules-20260902.txt — передан на M4), overlay только опциональным флагом OFF; verify --against-live; расхождения reason-кодов задокументировать. Затем приёмка с исправленным критерием.
2026-09-02T15:18:44.918Z · Fable
[A1 15:20 Фабл] Корректировка 1243-web401provenance2 сдана: 5faee2d0 — default = живой A1: официальный asterisk-20.19.0 (sha 10fbc070…), bundled pjproject/jansson, --disable-all --disable codec_opus, res_format_attr_opus включён, набор из 300 модулей по live-списку; overlay — опциональный флаг OFF; verify --against-live. Повторная приёмка 1252-accweb401provenance2 (M4) по ИСПРАВЛЕННОМУ критерию (паритет с живым бинарём). Линия на A2/A1 mirrors.
2026-09-02T15:40:50.268Z · Fable
[A1 15:52 Фабл] Повторная приёмка 1252-accweb401provenance2 (M4): рецепт ПРИЗНАН верным (паритет с живым A1: официальный 20.19.0, passthrough, без codec_opus, res_format_attr_opus, 300 модулей, overlay OFF), **NO-GO** по двум недостающим доказательствам: (1) в test-verify-asterisk.sh нет сценария sha256-mismatch существующего .so (verifier его обрабатывает — внешний fixture приёмщика дал rc=2/reason=sha256, но тест в дереве отсутствует); (2) README без явной проверки docker/podman на A2 и fallback на нативную сборку (факт: A2 — docker:no podman:no ). Корректировка 1260-web401provenance3 (M4). После GO: нативная сборка на A2 по рецепту → verify --against-live с A1 → артефакт на Storage Box → WEB-413 O-план.
2026-09-02T16:23:56.524Z · Fable
[A1 16:35 Фабл] Корректировка после NO-GO 1252 сдана: волна 1260-web401provenance3 (M4), коммит 902af68f (ветка web401provenance3-1260). Автор заявляет оба недостающих доказательства: тест sha256-mismatch подменённого .so и README-проверка движка контейнеров с фолбэком на нативную сборку (на A2 нет docker/podman — путь обязан быть нативным). Отчёт: M4 /Users/milamarty/waves/WEB401PROVENANCE3-REPORT.md. Критерий провенанса (исправлен 02.09): паритет с живым Asterisk A1 (20.19.0, 300 модулей, opus только res_format_attr_opus; codec_opus нет). Дальше: приёмка 1263-accweb401provenance3 (M4, другой verifier: подмена/удаление/лишний модуль, движок отсутствует, воспроизводимость манифеста) → нативная сборка на A2 (SOLO) → verify --against-live на A1 → Storage Box → вход в WEB-413 (O-plan). Бандл: A1 /home/ubuntu/mirrors/lines/web401provenance3-1260.bundle; A2 ref web401provenance3-1260/head.
2026-09-02T16:46:13.038Z · Fable
[A1 16:58 Фабл] Приёмка 1263-accweb401provenance3 = NO-GO (M4 /Users/milamarty/waves/ACCWEB401PROVENANCE3-REPORT.md): оба замечания 1252 закрыты и независимо воспроизведены (sha256-mismatch подменённого .so, README про движок/нативный путь; инвентарь 300 модулей = живой A1, codec_opus отсутствует по критерию). Один новый блокер: writer манифеста пишет текущее время в provenance.json → два манифеста от одного источника не byte-identical; в recipe нет --dry-run. → волна 1266-web401provenance4 (M4): детерминированный provenance.json (без timestamp/host/pid; SOURCE_DATE_EPOCH, детерминированный tar) + отдельный build-info.json вне подписи; --dry-run с тестом идентичности двух прогонов; verify --against-live сверяет детерминированную часть. Эволюция: 1225 → 1243 (критерий провенанса исправлен: паритет с живым A1) → 1252 NO-GO (2 доказательства) → 1260 → 1263 NO-GO (timestamp) → 1266.
2026-09-02T17:56:28.584Z · Fable
[A1 18:20 Фабл] Волна 1266-web401provenance4 (M4) сдана: коммит 31768d89 (ветка web401provenance4-1266): provenance.json детерминирован (без timestamp/host/pid), build-info вне подписи, --dry-run печатает план и полный input-манифест, два прогона byte-identical, patch-set.txt pin в source-of-truth, SOURCE_DATE_EPOCH. Отчёт: M4 /Users/milamarty/waves/WEB401PROVENANCE4-REPORT.md. Дальше: приёмка 1295-accweb401provenance4 (M4) → нативная сборка на A2 (SOLO) → verify --against-live на A1 → Storage Box → WEB-413. Бандл: A1 mirrors/lines/web401provenance4-1266.bundle; A2 ref web401provenance4-1266/head.
2026-09-02T18:56:43.869Z · Fable
[A1 19:15 Фабл] Приёмка 1295-accweb401provenance4 (M4) = NO-GO с одним блокером: provenance.json зависит от PREFIX (build.configure_flags содержит --prefix=$PREFIX, build-asterisk.sh:32–38) → два dry-run при разных PREFIX не byte-identical; остальное прошло (timestamp убран, --dry-run идентичен при одном PREFIX, patch-set pin, регресс 1252/1263). Решение: путь установки — свойство развёртывания, не сборки → prefix нормализуется/выносится в build-info вне подписи → волна 1315-web401provenance5 (M4).
2026-09-02T20:22:03.510Z · Fable
[A1 20:25 Фабл] 1315-web401provenance5 сдана: коммит fdaefd9174 (M4), круг 5 провенанса (паритет с живым Asterisk A1 = 300 модулей, opus passthrough). Дальше: приёмка 1339 (M4) против отчёта ACCWEB401PROVENANCE4.
2026-09-02T20:59:16.164Z · Fable
[A1 21:00 Фабл] Приёмка 1339-accweb401provenance5 = GO (M4, отчёт /Users/milamarty/waves/ACCWEB401PROVENANCE5-REPORT.md). Линия web401provenance5 (fdaefd9174) готова к l94 (бандл M4 → A2 nc-build).
2026-09-02T23:32:27.243Z · Fable
[A1 03:55 Фабл] В проде l94 (провенанс круг 5, GO 1339).
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-401","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-03T06:12:22.439Z