From 5e06640b7a27fb5972a6f4717a999edf4178f668 Mon Sep 17 00:00:00 2001 From: Hermes Date: Mon, 2 Nov 2026 01:04:43 +0600 Subject: [PATCH 01/55] [2026-11-02] kraken: family/documents/movies-watchlist.md family/documents/movies-watchlist.md.bak-questions --- family/documents/movies-watchlist.md | 2 +- family/documents/movies-watchlist.md.bak-questions | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/family/documents/movies-watchlist.md b/family/documents/movies-watchlist.md index f084aa2d..b08cdf96 100755 --- a/family/documents/movies-watchlist.md +++ b/family/documents/movies-watchlist.md @@ -125,8 +125,8 @@ related: - [ ] Triangle of Sadness 2022 - [ ] ❓ Babylon - Вавилон (2022) ★7.3 + - Babylon (2019) ★6.1 - Вавилон (2014) ★6.6 - - Вавилон 5 (1994) ★8.0 - [ ] Everything Everywhere All at Once 2022 - Всё везде и сразу (2022) ★7.7 - Almost Everything You Ever Wanted to Know About Everything Everywhere All at Once (2022) ★10.0 diff --git a/family/documents/movies-watchlist.md.bak-questions b/family/documents/movies-watchlist.md.bak-questions index 1006d6f3..0ac0e6ef 100755 --- a/family/documents/movies-watchlist.md.bak-questions +++ b/family/documents/movies-watchlist.md.bak-questions @@ -18,6 +18,13 @@ related: - "[[family/documents/karaoke-songs]]" --- ## Новинки - 👍/👎 + - [ ] 🗓️ [Большие гонки. Пегас III](https://www.kinopoisk.ru/film/11026619/) (2026) IMDb 6.5 + - [ ] 🗓️ [5 сантиметров в секунду](https://www.kinopoisk.ru/film/8230870/) (2025) IMDb 7.3 + - [ ] 🗓️ [Плетёный муж](https://www.kinopoisk.ru/film/11095481/) (2026) IMDb 8.0 KP 7.4 + - [ ] 🗓️ [Заговор «Кондор»](https://www.kinopoisk.ru/film/14827448/) (2025) IMDb 6.7 + - [ ] 🗓️ [Маленькие создания](https://www.kinopoisk.ru/film/14827447/) (2025) IMDb 6.9 + - [ ] 🗓️ [Монитор смерти](https://www.kinopoisk.ru/film/14260677/) (2026) IMDb 6.2 + - [ ] 🗓️ [Ограбление по-бразильски](https://www.kinopoisk.ru/film/14827446/) (2025) IMDb 7.3 - [ ] 🗓️ [Увидеть всё](https://www.kinopoisk.ru/film/14001130/) (2026) IMDb 9.3 - [ ] 🗓️ [Отверженные](https://www.kinopoisk.ru/film/7856055/) (2026) IMDb 7.0 - [ ] 🗓️ [Мама. Зло внутри](https://www.kinopoisk.ru/film/8550743/) (2025) IMDb 6.2 KP 5.4 @@ -89,6 +96,7 @@ related: - [ ] 🗓️ [Астрал. Могильный ритуал 2](https://www.kinopoisk.ru/film/11825624/) (2026) IMDb 6.8 ## Фильмы + - [ ] Увидеть всё 2026 - [ ] Gods don't give gifts - [ ] Свет вокруг 2005 - [ ] 🗓️ [Рассекая волны: экспедиция «Лас Бальсас»](https://www.kinopoisk.ru/film/12432920/) (2025) IMDb 9.1 @@ -117,8 +125,8 @@ related: - [ ] Triangle of Sadness 2022 - [ ] ❓ Babylon - Вавилон (2022) ★7.3 + - Babylon (2019) ★6.1 - Вавилон (2014) ★6.6 - - Вавилон 5 (1994) ★8.0 - [ ] Everything Everywhere All at Once 2022 - Всё везде и сразу (2022) ★7.7 - Almost Everything You Ever Wanted to Know About Everything Everywhere All at Once (2022) ★10.0 From 9affc498d0c8c9ec2207cc5dd895e44b31684b8f Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 2 Nov 2026 07:34:36 +0600 Subject: [PATCH 02/55] [2026-11-02] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index 06592409..9b93509d 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -64,11 +64,17 @@ Compose: Настройки 3x-ui находятся на Taiga в `/mnt/RED_2TB/docker/xray-admin/x-ui.db`. Для пользователя `vless-space` используется цепочка: ```text -space-master → sub1-sweden-yt +space-master → sub1-sweden (prefix; также матчится sub1-sweden-yt) space-failover → sub1-poland-yt space-auto → sub1-* / leastLoad ``` +Исправление 2026-11-02: подписка больше не содержала `sub1-sweden-yt` (актуальный тег — `sub1-sweden`), поэтому основной selector не находил кандидатов. Резервирование тоже было ошибочным: Xray `fallbackTag` принимает **outbound**, а не другой balancer. В журнале — `non existing outTag: space-failover`; Lidarr показывал `Invalid response received from LidarrAPI`, вложенная причина — TLS `unexpected EOF`. + +В постоянном `settings.xrayTemplateConfig` исправлен prefix основного selector и добавлены два outbound типа `loopback`: `space-failover` → inboundTag `space-failover-loopback`, `space-auto` → inboundTag `space-auto-loopback`. Соответствующие routing-правила отправляют их на одноимённые balancer и стоят **перед** правилом `vless-space-via-subscription`, чтобы не возвращаться на основной маршрут. Остальные клиенты, подписка и observatory не изменялись. + +Приёмка на живом Lidarr: `/api/v1/search` для «Четыре», «Четыре позиции Бруно», «4 Позиции Бруно» и Radiohead — HTTP 200; `artist/lookup` находит `4 Позиции Бруно` (`c0e9bf2e-9c31-4ff1-8e23-0021652a9015`). Обе резервные ступени проверены временным override `space-master` на соответствующий loopback: поиск HTTP 200; override затем снят, основной выбор `sub1-sweden`. Ошибок `non existing outTag` после рестарта — 0. Бэкап SQLite (через backup API, с WAL) и шаблонов до/после: `/mnt/RED_2TB/docker/xray-admin/lidarr-search-fix-20261102T013142Z/`. Откат — вернуть только значение `xrayTemplateConfig` из `template-before.json` и перезапустить `xray-admin`; весь файл БД поверх живого контейнера не копировать. + Master и первый failover не должны быть заменены общим `leastLoad`: смена egress-IP между challenge и повторным запросом инвалидирует Cloudflare-cookie. Lidarr должен иметь: From b029a4775cdca75966c194e441cafd409b9e180a Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 2 Nov 2026 07:54:54 +0600 Subject: [PATCH 03/55] [2026-11-02] eagle: personal/tech/flaresolverr-taiga.md --- personal/tech/flaresolverr-taiga.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/personal/tech/flaresolverr-taiga.md b/personal/tech/flaresolverr-taiga.md index 51216f02..0d0bed14 100755 --- a/personal/tech/flaresolverr-taiga.md +++ b/personal/tech/flaresolverr-taiga.md @@ -28,7 +28,7 @@ Prowlarr ```text vless-space - └─ space-master: sub1-sweden-yt + └─ space-master: sub1-sweden └─ space-failover: sub1-poland-yt └─ space-auto: текущий leastLoad по подписке ``` @@ -96,11 +96,13 @@ FlareSolverr requestTimeout = 180 seconds Текущая цепочка: ```text -space-master selector=[sub1-sweden-yt] fallback=space-failover +space-master selector=[sub1-sweden] fallback=space-failover space-failover selector=[sub1-poland-yt] fallback=space-auto space-auto selector=[sub1-] strategy=leastLoad ``` +Актуально после исправления 2026-11-02: `sub1-sweden` — prefix selector; `fallbackTag` ссылаются на одноимённые **outbound типа loopback**, которые через отдельные inboundTag/routing-правила передают трафик следующему balancer. Ссылка `fallbackTag` прямо на balancer не работает. Подробности и проверка обеих резервных ступеней — [[family/how-to/arr-stack-taiga]]. + Не использовать общий `leastLoad` как первый уровень для RuTracker/Kinozal: он может менять egress между соединениями. `maxRTT` и `tolerance` фильтруют кандидатов, но не делают выбор sticky. Перед изменением базы сохранять backup. После изменения проверить сгенерированный `/app/bin/config.json` и выполнить `xray -test`; не редактировать сгенерированный файл напрямую. From b7284adc02ffed5938886935c92590cf1851a03f Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 2 Nov 2026 07:59:59 +0600 Subject: [PATCH 04/55] [2026-11-02] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index 9b93509d..aace7377 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -196,6 +196,14 @@ GET индексатора возвращает `********`. Нельзя исп ## Troubleshooting +### Monitored без скачиваний: MASTER BOOT RECORD, 2026-11-02 + +На живом хосте у MASTER BOOT RECORD (`artistId=97`) все 12 альбомов monitored, файлов и истории загрузок нет. Prowlarr оказался остановлен с 2026-10-28 (`ExitCode=137`, `OOMKilled=false`; причину остановки отдельно не установили). До остановки журнал содержал `database is locked`. Все активные индексаторы Lidarr были в карантине. База Prowlarr прошла `PRAGMA quick_check=ok`; контейнер запущен без изменения настроек качества. После штатного перезапуска FlareSolverr подтверждён вход в RuTracker (parsed HTML logged-in=true), затем прошли одиночные тесты RuTracker в Prowlarr и RuTracker/NoNaMe Club/Kinozal в Lidarr. Health Lidarr — `[]`. + +Вторая независимая причина: у артиста профиль `MP3 (default)`, FLAC запрещён. Интерактивный поиск VIRUS.DOS нашёл FLAC с 13 сидами, но вернул точный отказ `FLAC is not wanted in profile`. В общем поиске RuTracker также есть раздачи дискографии; наличие такой раздачи не подтверждает наличие отдельного подходящего релиза для альбомного поиска. + +После refresh только этого артиста и повторного `MissingAlbumSearch` через 3 активных индексатора команда `87994` завершилась: `Completed search for 12 albums. 0 reports downloaded.` Очередь и история MASTER BOOT RECORD остались пустыми. Это не результат «скачивание исправлено»: доступ к индексаторам восстановлен, но подходящие загрузки в текущем профиле не выбраны. Профиль MP3 и мониторинг не менялись; разрешение FLAC не следует из самого вопроса о monitored. + | Симптом | Проверка | Исправление | |---|---|---| | SkyHook 403 | host config Lidarr и VLESS log | proxy `vless-proxy:1081`, local bypass оставить включённым | From 4bde65b0059935f9616e2c1c8ad3471764798ca4 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 2 Nov 2026 08:45:42 +0600 Subject: [PATCH 05/55] [2026-11-02] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index aace7377..4b68cd9c 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -200,7 +200,11 @@ GET индексатора возвращает `********`. Нельзя исп На живом хосте у MASTER BOOT RECORD (`artistId=97`) все 12 альбомов monitored, файлов и истории загрузок нет. Prowlarr оказался остановлен с 2026-10-28 (`ExitCode=137`, `OOMKilled=false`; причину остановки отдельно не установили). До остановки журнал содержал `database is locked`. Все активные индексаторы Lidarr были в карантине. База Prowlarr прошла `PRAGMA quick_check=ok`; контейнер запущен без изменения настроек качества. После штатного перезапуска FlareSolverr подтверждён вход в RuTracker (parsed HTML logged-in=true), затем прошли одиночные тесты RuTracker в Prowlarr и RuTracker/NoNaMe Club/Kinozal в Lidarr. Health Lidarr — `[]`. -Вторая независимая причина: у артиста профиль `MP3 (default)`, FLAC запрещён. Интерактивный поиск VIRUS.DOS нашёл FLAC с 13 сидами, но вернул точный отказ `FLAC is not wanted in profile`. В общем поиске RuTracker также есть раздачи дискографии; наличие такой раздачи не подтверждает наличие отдельного подходящего релиза для альбомного поиска. +Уточнённая диагностика MP3, 2026-11-02: проверка одного FLAC-релиза VIRUS.DOS была недостаточна для объяснения отсутствия загрузок MP3. Нужно выполнять **поиск по артисту** `GET /api/v1/release?artistId=97`, без `albumId`: альбомный поиск добавляет название отдельного альбома и может не находить пак дискографии. Lidarr поддерживает дискографии — утверждать обратное нельзя. + +На RuTracker есть MP3-пак `Master Boot Record - Discography (15 Albums) - 2016-2024, MP3, 160-320 kbps`, тема `5969222`, размер 1 998 105 001 байт, 23 сида при проверке. Поиск по артисту в Lidarr находит его и возвращает **два точных отказа**: `1.9 GB is larger than maximum allowed 690.3 MB` и `MP3-160 is not wanted in profile`. Диапазон 160–320 из названия распознан как MP3-160; в профиле `MP3 (default)` MP3-160 выключен, разрешены MP3-VBR-V2/MP3-256/MP3-VBR-V0/MP3-320. Сам факт, что раздача MP3, не означает соответствия этим ограничениям. Лимиты качества/размера и ручной override раздачи не менялись. + +Другие MP3 из того же поиска также имеют отдельные причины отказа: Realtime Execution — `Unable to parse albums from release name`; VirtuaVerse — `Unable to parse release`; сингл Secret Track — `Unable to parse albums from release name`. Проверенный FLAC-релиз VIRUS.DOS отклонён с `FLAC is not wanted in profile`, но это не объяснение отказа имеющейся MP3-дискографии. После refresh только этого артиста и повторного `MissingAlbumSearch` через 3 активных индексатора команда `87994` завершилась: `Completed search for 12 albums. 0 reports downloaded.` Очередь и история MASTER BOOT RECORD остались пустыми. Это не результат «скачивание исправлено»: доступ к индексаторам восстановлен, но подходящие загрузки в текущем профиле не выбраны. Профиль MP3 и мониторинг не менялись; разрешение FLAC не следует из самого вопроса о monitored. From 693ddf026ac9a0faaac349a6c7ee1965826eae0a Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 2 Nov 2026 09:11:06 +0600 Subject: [PATCH 06/55] [2026-11-02] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index 4b68cd9c..4dfcf914 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -198,15 +198,23 @@ GET индексатора возвращает `********`. Нельзя исп ### Monitored без скачиваний: MASTER BOOT RECORD, 2026-11-02 -На живом хосте у MASTER BOOT RECORD (`artistId=97`) все 12 альбомов monitored, файлов и истории загрузок нет. Prowlarr оказался остановлен с 2026-10-28 (`ExitCode=137`, `OOMKilled=false`; причину остановки отдельно не установили). До остановки журнал содержал `database is locked`. Все активные индексаторы Lidarr были в карантине. База Prowlarr прошла `PRAGMA quick_check=ok`; контейнер запущен без изменения настроек качества. После штатного перезапуска FlareSolverr подтверждён вход в RuTracker (parsed HTML logged-in=true), затем прошли одиночные тесты RuTracker в Prowlarr и RuTracker/NoNaMe Club/Kinozal в Lidarr. Health Lidarr — `[]`. +Перед исправлением у MASTER BOOT RECORD (`artistId=97`) все 12 альбомов были monitored, файлов и истории загрузок не было. Prowlarr оказался остановлен с 2026-10-28 (`ExitCode=137`, `OOMKilled=false`; причину остановки отдельно не установили). До остановки журнал содержал `database is locked`. Все активные индексаторы Lidarr были в карантине. База Prowlarr прошла `PRAGMA quick_check=ok`; контейнер запущен без изменения настроек качества. После штатного перезапуска FlareSolverr подтверждён вход в RuTracker (parsed HTML logged-in=true), затем прошли одиночные тесты RuTracker в Prowlarr и RuTracker/NoNaMe Club/Kinozal в Lidarr. Health Lidarr — `[]`. Уточнённая диагностика MP3, 2026-11-02: проверка одного FLAC-релиза VIRUS.DOS была недостаточна для объяснения отсутствия загрузок MP3. Нужно выполнять **поиск по артисту** `GET /api/v1/release?artistId=97`, без `albumId`: альбомный поиск добавляет название отдельного альбома и может не находить пак дискографии. Lidarr поддерживает дискографии — утверждать обратное нельзя. -На RuTracker есть MP3-пак `Master Boot Record - Discography (15 Albums) - 2016-2024, MP3, 160-320 kbps`, тема `5969222`, размер 1 998 105 001 байт, 23 сида при проверке. Поиск по артисту в Lidarr находит его и возвращает **два точных отказа**: `1.9 GB is larger than maximum allowed 690.3 MB` и `MP3-160 is not wanted in profile`. Диапазон 160–320 из названия распознан как MP3-160; в профиле `MP3 (default)` MP3-160 выключен, разрешены MP3-VBR-V2/MP3-256/MP3-VBR-V0/MP3-320. Сам факт, что раздача MP3, не означает соответствия этим ограничениям. Лимиты качества/размера и ручной override раздачи не менялись. +На RuTracker есть MP3-пак `Master Boot Record - Discography (15 Albums) - 2016-2024, MP3, 160-320 kbps`, тема `5969222`, размер 1 998 105 001 байт, 23 сида при проверке. Поиск по артисту в Lidarr находит его и возвращает **два точных отказа**: `1.9 GB is larger than maximum allowed 690.3 MB` и `MP3-160 is not wanted in profile`. Диапазон 160–320 из названия распознан как MP3-160; в профиле `MP3 (default)` MP3-160 выключен, разрешены MP3-VBR-V2/MP3-256/MP3-VBR-V0/MP3-320. Сам факт, что раздача MP3, не означает соответствия этим ограничениям. На этом этапе диагностики лимиты качества/размера и ручной override раздачи не менялись; фактическое исправление описано ниже. Другие MP3 из того же поиска также имеют отдельные причины отказа: Realtime Execution — `Unable to parse albums from release name`; VirtuaVerse — `Unable to parse release`; сингл Secret Track — `Unable to parse albums from release name`. Проверенный FLAC-релиз VIRUS.DOS отклонён с `FLAC is not wanted in profile`, но это не объяснение отказа имеющейся MP3-дискографии. -После refresh только этого артиста и повторного `MissingAlbumSearch` через 3 активных индексатора команда `87994` завершилась: `Completed search for 12 albums. 0 reports downloaded.` Очередь и история MASTER BOOT RECORD остались пустыми. Это не результат «скачивание исправлено»: доступ к индексаторам восстановлен, но подходящие загрузки в текущем профиле не выбраны. Профиль MP3 и мониторинг не менялись; разрешение FLAC не следует из самого вопроса о monitored. +Первый диагностический `MissingAlbumSearch` через 3 активных индексатора (команда `87994`) завершился с 0 загрузок. Этот результат не означал отсутствия MP3 на RuTracker: требовались поиск по артисту и проверка точных отказов пакета, указанных выше. + +**Фактическое исправление 2026-11-02, проверено до импорта:** создан отдельный профиль `MBR MP3 160-320` (`qualityProfileId=5`) — MP3-160/192/224/256/320 и MP3-VBR-V2/V0. Он назначен только `artistId=97`; общий `MP3 (default)` и глобальные Quality Definitions не менялись. Конкретный MP3-пак RuTracker `5969222` выбран через `POST /api/v1/release` из кеша поиска по артисту с `artistId=97`: выполнен разовый ручной обход только оставшегося отказа по размеру. Бэкап артиста и исходного профиля: `/mnt/RED_2TB/docker/arr/lidarr/mbr-fix-20261102T025546Z/`. + +**Итог end-to-end:** Transmission torrent `270`, hash `C485573C679DBF7E185BD72E08B11B4ACD7F5D97`, скачан на 100%, ошибок 0, оставлен на раздаче. В `/mnt/RED_2TB/storage/Music/MASTER BOOT RECORD` проверен **101 непустой MP3**, 1 302 439 874 байта; Lidarr подтверждает **11 полностью заполненных альбомов из 12**. Новый `Computer Metal` (2026-10-30) отсутствует в пакете 2016–2024; отдельный поиск `/release?albumId=1172` через 3 индексатора вернул 0 результатов. Он остаётся monitored/ожидающим, не заменён концертным `Realtime Execution`. + +После импорта в очереди оставались предупреждения по дополнительным EP/OST/WAREZ из пакета, которых нет в текущем каталоге артиста, и ожидаемому, но отсутствующему Computer Metal. Завершённый пак убран только из отслеживаемой очереди штатным `DELETE /queue/?removeFromClient=false&blocklist=false&skipRedownload=false&changeCategory=false`. Торрент и исходные файлы сохранены, релиз не блокировался, импортированные файлы проверены. После очистки — 0 строк MBR в очереди, torrent 100%/seeding, health Lidarr `[]`. + +Откат профиля: вернуть только артисту 97 прежний `qualityProfileId=1` из `artist-before.json`; не менять общий профиль всей библиотеки. Не удалять скачанные/импортированные файлы при откате настройки. | Симптом | Проверка | Исправление | |---|---|---| From 82bf0c0af8a487dd1dd8897a49d2edad6700b470 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 2 Nov 2026 09:56:49 +0600 Subject: [PATCH 07/55] [2026-11-02] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 47 ++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index 4dfcf914..8d1b2e2d 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -1,14 +1,19 @@ --- title: Arr stack — TrueNAS Taiga created: '2026-05-23' -updated: '2026-09-29' +updated: '2026-11-02' type: tech namespace: family -tags: [arr, taiga, truenas, media, operations] +tags: + - arr + - taiga + - truenas + - media + - operations related: - - "[[personal/tech/flaresolverr-taiga]]" - - "[[family/how-to/truenas-infrastructure]]" - - "[[family/how-to/arr-stack-kraken]]" + - '[[personal/tech/flaresolverr-taiga]]' + - '[[family/how-to/truenas-infrastructure]]' + - '[[family/how-to/arr-stack-kraken]]' --- # Arr stack — TrueNAS Taiga @@ -17,7 +22,7 @@ related: ## Текущее состояние -Проверено 2026-09-29 после полного `force-recreate`: +Базовая приёмка 2026-09-29 после полного `force-recreate`; актуальные исправления Lidarr/индексаторов и общий автопоиск от 2026-11-02 описаны ниже: - `flaresolverr`, `prowlarr`, `radarr`, `sonarr`, `lidarr`, `jellyfin`, `transmission` запущены. - `docker compose config -q` проходит. @@ -208,13 +213,39 @@ GET индексатора возвращает `********`. Нельзя исп Первый диагностический `MissingAlbumSearch` через 3 активных индексатора (команда `87994`) завершился с 0 загрузок. Этот результат не означал отсутствия MP3 на RuTracker: требовались поиск по артисту и проверка точных отказов пакета, указанных выше. -**Фактическое исправление 2026-11-02, проверено до импорта:** создан отдельный профиль `MBR MP3 160-320` (`qualityProfileId=5`) — MP3-160/192/224/256/320 и MP3-VBR-V2/V0. Он назначен только `artistId=97`; общий `MP3 (default)` и глобальные Quality Definitions не менялись. Конкретный MP3-пак RuTracker `5969222` выбран через `POST /api/v1/release` из кеша поиска по артисту с `artistId=97`: выполнен разовый ручной обход только оставшегося отказа по размеру. Бэкап артиста и исходного профиля: `/mnt/RED_2TB/docker/arr/lidarr/mbr-fix-20261102T025546Z/`. +**Временный обход, впоследствии отменён и заменён общим исправлением ниже:** был создан отдельный профиль `MBR MP3 160-320` (`qualityProfileId=5`) — MP3-160/192/224/256/320 и MP3-VBR-V2/V0. Он назначен только `artistId=97`; общий `MP3 (default)` и глобальные Quality Definitions не менялись. Конкретный MP3-пак RuTracker `5969222` выбран через `POST /api/v1/release` из кеша поиска по артисту с `artistId=97`: выполнен разовый ручной обход только оставшегося отказа по размеру. Бэкап артиста и исходного профиля: `/mnt/RED_2TB/docker/arr/lidarr/mbr-fix-20261102T025546Z/`. **Итог end-to-end:** Transmission torrent `270`, hash `C485573C679DBF7E185BD72E08B11B4ACD7F5D97`, скачан на 100%, ошибок 0, оставлен на раздаче. В `/mnt/RED_2TB/storage/Music/MASTER BOOT RECORD` проверен **101 непустой MP3**, 1 302 439 874 байта; Lidarr подтверждает **11 полностью заполненных альбомов из 12**. Новый `Computer Metal` (2026-10-30) отсутствует в пакете 2016–2024; отдельный поиск `/release?albumId=1172` через 3 индексатора вернул 0 результатов. Он остаётся monitored/ожидающим, не заменён концертным `Realtime Execution`. После импорта в очереди оставались предупреждения по дополнительным EP/OST/WAREZ из пакета, которых нет в текущем каталоге артиста, и ожидаемому, но отсутствующему Computer Metal. Завершённый пак убран только из отслеживаемой очереди штатным `DELETE /queue/?removeFromClient=false&blocklist=false&skipRedownload=false&changeCategory=false`. Торрент и исходные файлы сохранены, релиз не блокировался, импортированные файлы проверены. После очистки — 0 строк MBR в очереди, torrent 100%/seeding, health Lidarr `[]`. -Откат профиля: вернуть только артисту 97 прежний `qualityProfileId=1` из `artist-before.json`; не менять общий профиль всей библиотеки. Не удалять скачанные/импортированные файлы при откате настройки. +На итоговой конфигурации MBR уже возвращён на общий `qualityProfileId=1`; временный профиль 5 удалён. Описание отдельного профиля выше сохранено как история временного обхода, а не инструкция по текущей настройке. Скачанные/импортированные файлы и раздача сохранены. + +### Общее исправление автозагрузки monitored-артистов, 2026-11-02 + +Причины были общими: профиль отбрасывал MP3 ниже 256/VBR-V2, лимит размера отклонял смешанные MP3-дискографии, а альбомный MissingAlbumSearch не находил пакеты по названию артиста. RSS каждые 15 минут проверяет новые публикации, но сам по себе не обеспечивает повторный поиск старых отсутствующих альбомов. + +Исправлена общая настройка: + +- В `MP3 (default)` (1) и `Standard` (3) разрешены также MP3-128/160/192/224; ранее разрешённые MP3 сохранены. FLAC не включался. +- Только у MP3 Quality Definitions `maxSize=null` (без верхнего лимита), чтобы размер смешанной дискографии не отклонялся по длительности части каталога. Другие форматы не менялись. +- Все текущие артисты используют общий профиль 1, включая MBR. Индивидуальные профили и ручной выбор раздачи для исправления не требуются. +- Общий список выбранных пользователем monitored-артистов сохранён: в момент проверки 36 из 1241. Остальная библиотека не включена в загрузку. + +Постоянный автоматический поиск: + +- TrueNAS cronjob **4**, enabled, каждые 15 минут, пользователь `truenas_admin`; команда `/usr/bin/python3 /mnt/RED_2TB/docker/arr/lidarr-autosearch/lidarr_autosearch.py`. +- До 5 артистов за запуск; берутся только monitored-артисты с отсутствующими monitored-альбомами, уже вышедшими по дате. Артисты с активной загрузкой/поиском пропускаются, flock исключает пересечение запусков. +- Штатная команда `ArtistSearch` ищет дискографии и использует обычный механизм решений Lidarr. Для Various Artists используется `MissingAlbumSearch`, чтобы не искать все сборники разом. Скрипт не выбирает конкретные релизы через `POST /release`. +- Повтор для того же набора отсутствующего — через 24 часа; новый набор отсутствующего допускает поиск без суточного ожидания. Состояние — `state.json`, журнал — `runs.jsonl` рядом со скриптом. +- Если артист включён, `monitorNewItems=all`, а **все** существующие альбомы выключены, их monitoring восстанавливается. Частичный выбор альбомов, выключенные артисты и `monitorNewItems=none` сохраняются. Изменённые ID альбомов записываются в журнал для точного отката. +- Пустой каталог сначала получает `RefreshArtist` с `artistIds=[id]` и **`isNewArtist=true`**: этот флаг ограничивает последующее сканирование папкой артиста. Без него Lidarr ставит сканирование всей `/storage/Music` даже при одном ArtistIds. + +На установке первоначальная версия обновления пустого каталога создала четыре лишних полных сканирования (88200/88205/88211/88214) перед импортом. Ошибка исправлена в автоматизации. Важный нюанс Lidarr: `DELETE /command/id` убирает queued-команду только из оперативной очереди, она возвращается из SQLite после рестарта. Для этих четырёх точно проверенных собственных задач выполнена резервная копия БД и перевод в `Cancelled=5` при остановленном Lidarr; никакие другие команды/файлы не удалялись. + +Бэкап общих профилей, ограничений и исходного мониторинга: `/mnt/RED_2TB/docker/arr/lidarr/global-autosearch-fix-20261102T032053Z/`. Бэкап до отмены собственных сканирований: `lidarr-autosearch/cancel-owned-rescans-/`. До изменения cron сохранён `cronjobs-before.json`. При откате восстанавливать только затронутые настройки из JSON; не подменять целую живую БД и не удалять музыку. + +Проверки: 9 автоматических тестов на NAS и локально (границы monitoring, частичный выбор, повторы, активные загрузки, будущие альбомы, Various Artists, область сканирования). Реальный запуск через TrueNAS `cronjob.run 4` завершился SUCCESS; штатные ArtistSearch автоматически отправили раздачи Infected Mushroom, Muse, Savant, Eminem, Rammstein, Ундервуд, Высоцкого, Пушного и других в Transmission. Проверены фактические принятые байты и завершённые раздачи, не только строки очереди. После освобождения импорта в истории подтверждены новые `trackFileImported`: Infected Mushroom 34, Savant 44, Muse 20, Billy Talent 10, Пневмослон 37 (срез проверки 2026-11-02, загрузки продолжаются). Реальные непустые MP3 по `importedPath` дополнительно проверены на диске. Повторных полных сканирований от этого запуска больше нет. | Симптом | Проверка | Исправление | |---|---|---| From a1df634838cf2588f6a144d671623e83b9f6afd2 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 2 Nov 2026 10:12:03 +0600 Subject: [PATCH 08/55] [2026-11-02] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index 8d1b2e2d..81f04934 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -221,6 +221,14 @@ GET индексатора возвращает `********`. Нельзя исп На итоговой конфигурации MBR уже возвращён на общий `qualityProfileId=1`; временный профиль 5 удалён. Описание отдельного профиля выше сохранено как история временного обхода, а не инструкция по текущей настройке. Скачанные/импортированные файлы и раздача сохранены. +### Общая обработка названий RuTracker и очереди Transmission, 2026-11-02 + +Дополнительная проверка Rodrigo y Gabriela (812), Diablo Swing Orchestra (700), Триагрутрики (890) выявила включённый в Prowlarr RuTracker `russianLetters=true` (**Strip Russian letters**). Он удалял кириллицу, оставляя названия без имени Триагрутрики и слова «Дискография»; у Diablo оставалось `- / Discography`, которое Lidarr разбирал с неверным именем артиста. Общая настройка изменена на **false** через штатный API с настоящими credentials из SQLite, остальные поля сохранены. Отдельно штатный парсер Lidarr не поддерживает русские слова для диско/коллекций; это закрывает общая нормализация в автопоиске ниже. + +Transmission ограничивал загрузки пятью слотами, зависшие раздачи занимали их до 30 минут. Общая очередь теперь 10 слотов, `queue-stalled-enabled=true`, `queue-stalled-minutes=5`; исходные параметры сохранены. Не считать строку queued доказательством принятых байтов: проверять `downloadedEver`, percentDone и историю импорта. Проверка общей нормализации через штатные решения уже добавила в Transmission MP3-дискографию Diablo Swing Orchestra (6 Albums, 2003–2021), Rodrigo y Gabriela (11 CD, 2001–2023), коллекцию Триагрутрики (2018–2022). Её более старый пак 128–320 пока штатно отклонён из-за недавнего AAC-256 Базирования в очереди (`Recent grab event in history is of equal or higher quality`); запрет не обходился, недостающие альбомы остаются в повторном поиске. Завершённое предупреждение импорта теперь не блокирует поиск других отсутствующих альбомов того же артиста; активные загрузки и importPending блокируют, как раньше. + +Бэкап Prowlarr SQLite и исходного indexer JSON, параметров очереди: `/mnt/RED_2TB/docker/arr/lidarr/rutracker-title-fix-20261102T040020Z/`. До замены worker сохранены файлы в `lidarr-autosearch/before-pack-normalization-20261102T040501Z/`, перед снятием суточного ожидания — `state-before-title-retry-reset.json`. Откат — вернуть только `russianLetters` и параметры Transmission из JSON, при необходимости предыдущий worker. Не восстанавливать всю живую БД. + ### Общее исправление автозагрузки monitored-артистов, 2026-11-02 Причины были общими: профиль отбрасывал MP3 ниже 256/VBR-V2, лимит размера отклонял смешанные MP3-дискографии, а альбомный MissingAlbumSearch не находил пакеты по названию артиста. RSS каждые 15 минут проверяет новые публикации, но сам по себе не обеспечивает повторный поиск старых отсутствующих альбомов. @@ -236,7 +244,7 @@ GET индексатора возвращает `********`. Нельзя исп - TrueNAS cronjob **4**, enabled, каждые 15 минут, пользователь `truenas_admin`; команда `/usr/bin/python3 /mnt/RED_2TB/docker/arr/lidarr-autosearch/lidarr_autosearch.py`. - До 5 артистов за запуск; берутся только monitored-артисты с отсутствующими monitored-альбомами, уже вышедшими по дате. Артисты с активной загрузкой/поиском пропускаются, flock исключает пересечение запусков. -- Штатная команда `ArtistSearch` ищет дискографии и использует обычный механизм решений Lidarr. Для Various Artists используется `MissingAlbumSearch`, чтобы не искать все сборники разом. Скрипт не выбирает конкретные релизы через `POST /release`. +- Штатная команда `ArtistSearch` ищет дискографии и использует обычный механизм решений Lidarr. Для Various Artists используется `MissingAlbumSearch`, чтобы не искать все сборники разом. После поиска проверяются отклонённые из-за разбора MP3-паки: общая нормализация переводит «Дискография»/«полная дискография»/«Коллекция» в Discography, убирает начальные жанровые теги и конечные псевдонимы только при точном совпадении основного имени артиста. Требуется диапазон лет; числовые годы и качество не изменяются. `/parse` обязан подтвердить тот же artistId, discography=true и выбранные monitored-альбомы. Затем `POST /release/push` повторно проводит релиз через **полный RSS decision engine**, включая ограничения профиля/историю/сидов; принудительный `POST /release` не используется. За запуск принимается не более одного нормализованного пака на артиста; сначала более широкий по выбранным альбомам. Упоминания артиста у другого исполнителя и совместные имена не переназначаются. - Повтор для того же набора отсутствующего — через 24 часа; новый набор отсутствующего допускает поиск без суточного ожидания. Состояние — `state.json`, журнал — `runs.jsonl` рядом со скриптом. - Если артист включён, `monitorNewItems=all`, а **все** существующие альбомы выключены, их monitoring восстанавливается. Частичный выбор альбомов, выключенные артисты и `monitorNewItems=none` сохраняются. Изменённые ID альбомов записываются в журнал для точного отката. - Пустой каталог сначала получает `RefreshArtist` с `artistIds=[id]` и **`isNewArtist=true`**: этот флаг ограничивает последующее сканирование папкой артиста. Без него Lidarr ставит сканирование всей `/storage/Music` даже при одном ArtistIds. @@ -245,7 +253,7 @@ GET индексатора возвращает `********`. Нельзя исп Бэкап общих профилей, ограничений и исходного мониторинга: `/mnt/RED_2TB/docker/arr/lidarr/global-autosearch-fix-20261102T032053Z/`. Бэкап до отмены собственных сканирований: `lidarr-autosearch/cancel-owned-rescans-/`. До изменения cron сохранён `cronjobs-before.json`. При откате восстанавливать только затронутые настройки из JSON; не подменять целую живую БД и не удалять музыку. -Проверки: 9 автоматических тестов на NAS и локально (границы monitoring, частичный выбор, повторы, активные загрузки, будущие альбомы, Various Artists, область сканирования). Реальный запуск через TrueNAS `cronjob.run 4` завершился SUCCESS; штатные ArtistSearch автоматически отправили раздачи Infected Mushroom, Muse, Savant, Eminem, Rammstein, Ундервуд, Высоцкого, Пушного и других в Transmission. Проверены фактические принятые байты и завершённые раздачи, не только строки очереди. После освобождения импорта в истории подтверждены новые `trackFileImported`: Infected Mushroom 34, Savant 44, Muse 20, Billy Talent 10, Пневмослон 37 (срез проверки 2026-11-02, загрузки продолжаются). Реальные непустые MP3 по `importedPath` дополнительно проверены на диске. Повторных полных сканирований от этого запуска больше нет. +Проверки: 15 автоматических тестов на NAS и локально (границы monitoring, частичный выбор, повторы, активные загрузки, будущие альбомы, Various Artists, область сканирования). Реальный запуск через TrueNAS `cronjob.run 4` завершился SUCCESS; штатные ArtistSearch автоматически отправили раздачи Infected Mushroom, Muse, Savant, Eminem, Rammstein, Ундервуд, Высоцкого, Пушного и других в Transmission. Проверены фактические принятые байты и завершённые раздачи, не только строки очереди. После освобождения импорта в истории подтверждены новые `trackFileImported`: Infected Mushroom 34, Savant 44, Muse 20, Billy Talent 10, Пневмослон 37 (срез проверки 2026-11-02, загрузки продолжаются). Реальные непустые MP3 по `importedPath` дополнительно проверены на диске. Повторных полных сканирований от этого запуска больше нет. | Симптом | Проверка | Исправление | |---|---|---| From 4d6f1e6df3f9d2f0ccf7cd589ba5e5799d41741d Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 2 Nov 2026 10:17:09 +0600 Subject: [PATCH 09/55] [2026-11-02] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index 81f04934..7837509d 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -227,6 +227,10 @@ GET индексатора возвращает `********`. Нельзя исп Transmission ограничивал загрузки пятью слотами, зависшие раздачи занимали их до 30 минут. Общая очередь теперь 10 слотов, `queue-stalled-enabled=true`, `queue-stalled-minutes=5`; исходные параметры сохранены. Не считать строку queued доказательством принятых байтов: проверять `downloadedEver`, percentDone и историю импорта. Проверка общей нормализации через штатные решения уже добавила в Transmission MP3-дискографию Diablo Swing Orchestra (6 Albums, 2003–2021), Rodrigo y Gabriela (11 CD, 2001–2023), коллекцию Триагрутрики (2018–2022). Её более старый пак 128–320 пока штатно отклонён из-за недавнего AAC-256 Базирования в очереди (`Recent grab event in history is of equal or higher quality`); запрет не обходился, недостающие альбомы остаются в повторном поиске. Завершённое предупреждение импорта теперь не блокирует поиск других отсутствующих альбомов того же артиста; активные загрузки и importPending блокируют, как раньше. +Приёмка передачи данных: в 04:13:53 UTC для проверки выполнен один `torrent-start-now` для уже добавленных паков 327/328/329 (без смены настроек артистов и без выбора релизов вручную). К 04:14:09 фактически принято: Diablo 1 528 404 байта, Триагрутрика 3 567 967, Rodrigo 2 736 128; все status=4/downloading, error=0, подключены сиды. Перед этим они ожидали очереди, поэтому нули в статистике файлов не означали отсутствие найденных раздач. Импорт этих паков на момент среза ещё не завершён; не утверждать полное заполнение каталогов. + +Реальный повторный запуск общего worker через TrueNAS `cronjob.run 4` (job 2688, 04:09–04:10 UTC) завершился **SUCCESS**. В нём то же правило применилось к Агате Кристи и сохранило штатный отказ по уже имеющемуся качеству/cutoff; это подтверждает отсутствие принудительного обхода настроек. + Бэкап Prowlarr SQLite и исходного indexer JSON, параметров очереди: `/mnt/RED_2TB/docker/arr/lidarr/rutracker-title-fix-20261102T040020Z/`. До замены worker сохранены файлы в `lidarr-autosearch/before-pack-normalization-20261102T040501Z/`, перед снятием суточного ожидания — `state-before-title-retry-reset.json`. Откат — вернуть только `russianLetters` и параметры Transmission из JSON, при необходимости предыдущий worker. Не восстанавливать всю живую БД. ### Общее исправление автозагрузки monitored-артистов, 2026-11-02 From ca515b5470da77d2626f08866da01f061197b352 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 2 Nov 2026 11:22:04 +0600 Subject: [PATCH 10/55] [2026-11-02] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index 7837509d..d14a57bd 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -221,6 +221,22 @@ GET индексатора возвращает `********`. Нельзя исп На итоговой конфигурации MBR уже возвращён на общий `qualityProfileId=1`; временный профиль 5 удалён. Описание отдельного профиля выше сохранено как история временного обхода, а не инструкция по текущей настройке. Скачанные/импортированные файлы и раздача сохранены. +### Полная сверка Obsidian watchlist с Lidarr, 2026-11-02 + +По явному запросу пользователя применён **весь текущий** `family/plans/lidarr-artist-watchlist.md`, включая тиры B/C и дельту библиотеки. Раньше заметка была списком без синхронизации с Lidarr; автопоиск обслуживал только уже monitored-артистов. Фактически в заметке 176 уникальных позиций: 175 исполнителей и Atomic Heart как серия из шести OST. Добавлен 91 отсутствовавший исполнитель, включён 61 ранее unmonitored; 23 уже отслеживались. Проверено: у всех 175 `monitored=true`, `monitorNewItems=all`. Существующий мониторинг вне списка сохранён. + +Одного совпадения имени недостаточно: `Agatha Christie` в импортированной библиотеке оказалась английской писательницей (120), GMS — рэпером (463), Atomic Heart — trance-исполнителем (493). Эти посторонние записи остались выключены. Правильные соответствия: Агата Кристи (25; подтверждена альбомами из Spotify/Yandex), Growling Mad Scientists (1282), шесть Atomic Heart OST у Various Artists (альбомы 9622–9627). Для Camellia используется каноническое имя かめりあ, для Корсики — Коrsика; остальные неоднозначные имена сверены по жанрам и MusicBrainz ID. + +Дополнительная причина нулевых каталогов: Standard разрешал только студийные Album. Создан общий **metadataProfileId=3, Watchlist music** и назначен всем 175 исполнителям: официальные Album/EP/Single, Studio/Soundtrack. Качество осталось общим **qualityProfileId=1**. Профили остальных артистов не менялись. Проверка ранее пустых каталогов после обновления: Christopher Larkin — 10 релизов, Darren Korb — 35, VINAI — 26 синглов, Marnik — 20 синглов; OVERWERK — 33 релиза (3 Album, 6 EP, 24 Single). Получение подробных метаданных и загрузки продолжаются. + +У 15 старых импортированных записей сохранился `AddOptions.Monitor=None`: `ArtistScannedHandler` применяет его **после** завершения RefreshArtist, снова выключает альбомы и затем удаляет AddOptions. Обычный PUT артиста этот внутренний параметр не меняет. Он штатно отработан сканированием только 15 соответствующих папок (`RescanFolders` 88783, completed), затем проверен мониторинг альбомов всего списка. Полного сканирования `/storage/Music` и прямого редактирования SQLite не выполнялось. Общий worker теперь после обновления пустого каталога ждёт его RescanFolders и повторно проверяет мониторинг перед поиском; частичный выбор альбомов сохраняется. Регрессионный тест воспроизводит поздний сброс после RefreshArtist. + +Снимок сопоставлений/приоритетов: `/mnt/RED_2TB/docker/arr/lidarr-autosearch/watchlist.json`. Worker соблюдает A → B → C → дельта; выключенных пользователем в Lidarr артистов сам не включает. Это **снимок сверки**, cron напрямую Obsidian не читает: последующие правки заметки требуют новой сверки. Исходная заметка со списками не переписывалась. + +Первоначальный общий backfill запущен отдельным процессом с `--max-artists 175`, тем же worker, flock и состоянием; журнал `initial-backfill.log` в каталоге сверки. Регулярный cron 4 остаётся enabled, каждые 15 минут. Подтверждён штатный grab OVERWERK State и двух альбомов Заточки; массовый проход также добавляет Ott, Plini и других. Не считать grab/queued уже импортированными файлами. + +Бэкапы, все исходные artist/album JSON, результаты проверки и manifest: `/mnt/RED_2TB/docker/arr/lidarr/watchlist-reconcile-20261102T042134Z/`. До изменения worker: `lidarr-autosearch/before-watchlist-fix-20261102T044754Z/`. В каталоге сверки также сохранены прежние metadata profiles. Откат — только флаги/профили затронутых записей из JSON; новые записи при необходимости оставлять unmonitored, не удалять музыку. Все 17 тестов worker прошли локально и на NAS. + ### Общая обработка названий RuTracker и очереди Transmission, 2026-11-02 Дополнительная проверка Rodrigo y Gabriela (812), Diablo Swing Orchestra (700), Триагрутрики (890) выявила включённый в Prowlarr RuTracker `russianLetters=true` (**Strip Russian letters**). Он удалял кириллицу, оставляя названия без имени Триагрутрики и слова «Дискография»; у Diablo оставалось `- / Discography`, которое Lidarr разбирал с неверным именем артиста. Общая настройка изменена на **false** через штатный API с настоящими credentials из SQLite, остальные поля сохранены. Отдельно штатный парсер Lidarr не поддерживает русские слова для диско/коллекций; это закрывает общая нормализация в автопоиске ниже. @@ -257,7 +273,7 @@ Transmission ограничивал загрузки пятью слотами, Бэкап общих профилей, ограничений и исходного мониторинга: `/mnt/RED_2TB/docker/arr/lidarr/global-autosearch-fix-20261102T032053Z/`. Бэкап до отмены собственных сканирований: `lidarr-autosearch/cancel-owned-rescans-/`. До изменения cron сохранён `cronjobs-before.json`. При откате восстанавливать только затронутые настройки из JSON; не подменять целую живую БД и не удалять музыку. -Проверки: 15 автоматических тестов на NAS и локально (границы monitoring, частичный выбор, повторы, активные загрузки, будущие альбомы, Various Artists, область сканирования). Реальный запуск через TrueNAS `cronjob.run 4` завершился SUCCESS; штатные ArtistSearch автоматически отправили раздачи Infected Mushroom, Muse, Savant, Eminem, Rammstein, Ундервуд, Высоцкого, Пушного и других в Transmission. Проверены фактические принятые байты и завершённые раздачи, не только строки очереди. После освобождения импорта в истории подтверждены новые `trackFileImported`: Infected Mushroom 34, Savant 44, Muse 20, Billy Talent 10, Пневмослон 37 (срез проверки 2026-11-02, загрузки продолжаются). Реальные непустые MP3 по `importedPath` дополнительно проверены на диске. Повторных полных сканирований от этого запуска больше нет. +Проверки: 17 автоматических тестов на NAS и локально (границы monitoring, частичный выбор, повторы, активные загрузки, будущие альбомы, Various Artists, область сканирования). Реальный запуск через TrueNAS `cronjob.run 4` завершился SUCCESS; штатные ArtistSearch автоматически отправили раздачи Infected Mushroom, Muse, Savant, Eminem, Rammstein, Ундервуд, Высоцкого, Пушного и других в Transmission. Проверены фактические принятые байты и завершённые раздачи, не только строки очереди. После освобождения импорта в истории подтверждены новые `trackFileImported`: Infected Mushroom 34, Savant 44, Muse 20, Billy Talent 10, Пневмослон 37 (срез проверки 2026-11-02, загрузки продолжаются). Реальные непустые MP3 по `importedPath` дополнительно проверены на диске. Повторных полных сканирований от этого запуска больше нет. | Симптом | Проверка | Исправление | |---|---|---| From 04eb31dfaa54b1d596bb26a9859d0f8e757dda71 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 2 Nov 2026 11:27:09 +0600 Subject: [PATCH 11/55] [2026-11-02] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index d14a57bd..3d7f69ab 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -233,7 +233,7 @@ GET индексатора возвращает `********`. Нельзя исп Снимок сопоставлений/приоритетов: `/mnt/RED_2TB/docker/arr/lidarr-autosearch/watchlist.json`. Worker соблюдает A → B → C → дельта; выключенных пользователем в Lidarr артистов сам не включает. Это **снимок сверки**, cron напрямую Obsidian не читает: последующие правки заметки требуют новой сверки. Исходная заметка со списками не переписывалась. -Первоначальный общий backfill запущен отдельным процессом с `--max-artists 175`, тем же worker, flock и состоянием; журнал `initial-backfill.log` в каталоге сверки. Регулярный cron 4 остаётся enabled, каждые 15 минут. Подтверждён штатный grab OVERWERK State и двух альбомов Заточки; массовый проход также добавляет Ott, Plini и других. Не считать grab/queued уже импортированными файлами. +Первоначальный общий backfill запущен отдельным процессом с `--max-artists 175`, тем же worker, flock и состоянием; журнал `initial-backfill.log` в каталоге сверки. Регулярный cron 4 остаётся enabled, каждые 15 минут. Подтверждён штатный grab OVERWERK State и двух альбомов Заточки; массовый проход также добавляет Ott, Plini и других. Не считать grab/queued уже импортированными файлами. Для проверки фактического обмена найденные раздачи OVERWERK и Заточки запущены из очереди одним `torrent-start-now`; у OVERWERK подтверждено 34 432 822 принятых байта, error=0. На этом срезе Заточка ещё ожидала пиров, импорт этих примеров ещё не подтверждён. Подробные замеры сохранены в `example-download-validation.json`. Бэкапы, все исходные artist/album JSON, результаты проверки и manifest: `/mnt/RED_2TB/docker/arr/lidarr/watchlist-reconcile-20261102T042134Z/`. До изменения worker: `lidarr-autosearch/before-watchlist-fix-20261102T044754Z/`. В каталоге сверки также сохранены прежние metadata profiles. Откат — только флаги/профили затронутых записей из JSON; новые записи при необходимости оставлять unmonitored, не удалять музыку. Все 17 тестов worker прошли локально и на NAS. From 310af66b64fb6f0fd69baba743bc4a5df05aea7d Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 2 Nov 2026 13:29:06 +0600 Subject: [PATCH 12/55] [2026-11-02] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index 3d7f69ab..bb6b82f4 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -60,7 +60,7 @@ Compose: ## Маршрутизация -1. Lidarr → `api.lidarr.audio` идёт через `http://vless-proxy:1081`. +1. Метаданные Lidarr → `lidarr-metadata-search:5001/api/v0.4` → `api.lidarr.audio`; дополнительный поиск имён → MusicBrainz. Оба внешних запроса идут через `http://vless-proxy:1081`. 2. FlareSolverr/Chrome → RuTracker идёт через `socks5://vless-proxy:1080`. 3. Локальный Transmission идёт напрямую по `transmission:9091`. @@ -221,6 +221,18 @@ GET индексатора возвращает `********`. Нельзя исп На итоговой конфигурации MBR уже возвращён на общий `qualityProfileId=1`; временный профиль 5 удалён. Описание отдельного профиля выше сохранено как история временного обхода, а не инструкция по текущей настройке. Скачанные/импортированные файлы и раздача сохранены. +### Общий поиск имён и псевдонимов без ручного MBID, 2026-11-02 + +Подтверждено живыми запросами: штатный `api.lidarr.audio/search` на Frugit возвращал Fruit/Fruity, хотя прямой lookup по MusicBrainz ID работал, а MusicBrainz находил Frugit по имени. Разовое добавление Frugit (1334) по ID было обходом и успело выполниться до просьбы пользователя остановить ручные исправления; оно не исправляло общий поиск. После этого новые артисты вручную не добавлялись. + +Установлен общий read-only сервис `lidarr-metadata-search`, источник на NAS `/mnt/RED_2TB/docker/arr/metadata-search/metadata_search.py`, compose рядом `metadata-search.compose.yml`. Он передаёт остальные запросы официальному серверу без преобразования; поиск artist/all дополняет точными совпадениями имён, sort-name и сохранённых псевдонимов MusicBrainz. Подробные данные получает у прежнего сервера по автоматически найденному MBID. Индивидуальной таблицы артистов или исключений нет; сервис не вызывает API добавления артистов в библиотеку. Существующие точные основные имена сохраняют порядок перед дополнительными псевдонимами. + +Штатная настройка `GET/PUT /api/v1/config/metadataprovider/1`: `metadataSource=http://lidarr-metadata-search:5001/api/v0.4`. Остальные поля metadata provider сохранены без изменений; перезапуск Lidarr не требовался. Docker: Python 3.12 Alpine, UID 950, read-only, без опубликованных портов, сеть media_net, restart unless-stopped, healthcheck и лимит памяти 256 MiB. Оба внешних источника используют прежний `vless-proxy:1081`; маршрут и IP не переключались. Запросы к каждому источнику ограничены интервалом 1.1 секунды, ответы кешируются; 429/Retry-After соблюдаются, при лимите lookup-запросы к тому же провайдеру не выполняются. + +Приёмка проведена сначала отдельно, затем через **реальные API Lidarr**: `/search?term=Frugit` и `/artist/lookup?term=Frugit` находят правильного Frugit по имени; `/search?term=Camellia` включает японского かめりあ наряду с одноимёнными артистами; Radiohead остаётся первым точным совпадением. Отдельно проверен поиск альбома OK Computer и неизменная передача POST album lookup. MusicBrainz относительный score для точного псевдонима Camellia был 81: нельзя отбрасывать подтверждённый точный alias только из-за относительного рейтинга. Health Lidarr после переключения — `[]`. Все 32 теста (17 worker + 15 поиска) прошли локально, 15 тестов поиска также прошли на NAS. + +Бэкап исходного и итогового metadata provider config и приёмки: `/mnt/RED_2TB/docker/arr/metadata-search/activation-20261102T071556Z/`. Откат — через тот же API вернуть JSON `metadata-provider-before.json` (прежний metadataSource был пустым); только затем останавливать сервис, чтобы не оставить Lidarr с недоступным источником. Сервис требуется для текущего MetadataSource и поднимается Docker автоматически. Проверки сохраняются в `shadow-validation.json` и `native-validation.json`; секретов в этих JSON нет. + ### Полная сверка Obsidian watchlist с Lidarr, 2026-11-02 По явному запросу пользователя применён **весь текущий** `family/plans/lidarr-artist-watchlist.md`, включая тиры B/C и дельту библиотеки. Раньше заметка была списком без синхронизации с Lidarr; автопоиск обслуживал только уже monitored-артистов. Фактически в заметке 176 уникальных позиций: 175 исполнителей и Atomic Heart как серия из шести OST. Добавлен 91 отсутствовавший исполнитель, включён 61 ранее unmonitored; 23 уже отслеживались. Проверено: у всех 175 `monitored=true`, `monitorNewItems=all`. Существующий мониторинг вне списка сохранён. From 8a5077afd91dd8104a1dce4fe01439e1891c028f Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 2 Nov 2026 14:04:40 +0600 Subject: [PATCH 13/55] [2026-11-02] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index bb6b82f4..785e550d 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -276,8 +276,8 @@ Transmission ограничивал загрузки пятью слотами, - TrueNAS cronjob **4**, enabled, каждые 15 минут, пользователь `truenas_admin`; команда `/usr/bin/python3 /mnt/RED_2TB/docker/arr/lidarr-autosearch/lidarr_autosearch.py`. - До 5 артистов за запуск; берутся только monitored-артисты с отсутствующими monitored-альбомами, уже вышедшими по дате. Артисты с активной загрузкой/поиском пропускаются, flock исключает пересечение запусков. -- Штатная команда `ArtistSearch` ищет дискографии и использует обычный механизм решений Lidarr. Для Various Artists используется `MissingAlbumSearch`, чтобы не искать все сборники разом. После поиска проверяются отклонённые из-за разбора MP3-паки: общая нормализация переводит «Дискография»/«полная дискография»/«Коллекция» в Discography, убирает начальные жанровые теги и конечные псевдонимы только при точном совпадении основного имени артиста. Требуется диапазон лет; числовые годы и качество не изменяются. `/parse` обязан подтвердить тот же artistId, discography=true и выбранные monitored-альбомы. Затем `POST /release/push` повторно проводит релиз через **полный RSS decision engine**, включая ограничения профиля/историю/сидов; принудительный `POST /release` не используется. За запуск принимается не более одного нормализованного пака на артиста; сначала более широкий по выбранным альбомам. Упоминания артиста у другого исполнителя и совместные имена не переназначаются. -- Повтор для того же набора отсутствующего — через 24 часа; новый набор отсутствующего допускает поиск без суточного ожидания. Состояние — `state.json`, журнал — `runs.jsonl` рядом со скриптом. +- Штатная команда `ArtistSearch` ищет дискографии и использует обычный механизм решений Lidarr. Для Various Artists используется `MissingAlbumSearch`, чтобы не искать все сборники разом. После поиска проверяются MP3-паки: общая нормализация переводит «Дискография»/«полная дискография»/«Коллекция» в Discography и распознаёт явное число ≥2 Albums/альбомов с диапазоном лет. Начальные жанровые теги и конечные псевдонимы убираются только при точном совпадении основного имени артиста. `/parse` обязан подтвердить тот же artistId, discography=true и выбранные monitored-альбомы. Затем `POST /release/push` проводит релиз через полный RSS decision engine. Если единственные отказы — `Existing files meets cutoff:` / `Existing files on disk is of equal or higher preference:`, пакет содержит реально отсутствующие вышедшие monitored-альбомы и эта раздача ещё не была grabbed, общий worker автоматически вызывает `POST /release` с исходными guid/indexerId из кеша поиска и ID отсутствующего альбома как привязкой. Это ограниченный обход блокировки частично скачанных паков; отказы по формату, качеству профиля, сидам, блоклисту и чужому артисту не обходятся. Native import распознаёт все папки альбомов внутри пакета и сохраняет свои проверки качества. За запуск принимается не более одного пака на артиста; сначала более широкий по выбранным альбомам. Персональных исключений по артистам нет. +- Повтор для того же набора отсутствующего — через 24 часа; новый набор отсутствующего или новая версия общей политики поиска допускают поиск без суточного ожидания. Текущая `SEARCH_POLICY_VERSION=2`: обновление общего правила повторно рассматривает всех подходящих артистов без ручного сброса Savant или других отдельных ID. Состояние — `state.json`, журнал — `runs.jsonl` рядом со скриптом. - Если артист включён, `monitorNewItems=all`, а **все** существующие альбомы выключены, их monitoring восстанавливается. Частичный выбор альбомов, выключенные артисты и `monitorNewItems=none` сохраняются. Изменённые ID альбомов записываются в журнал для точного отката. - Пустой каталог сначала получает `RefreshArtist` с `artistIds=[id]` и **`isNewArtist=true`**: этот флаг ограничивает последующее сканирование папкой артиста. Без него Lidarr ставит сканирование всей `/storage/Music` даже при одном ArtistIds. From 7b68a7bf58ce47064d96d9126dfdecce50d8e9d2 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 2 Nov 2026 14:09:45 +0600 Subject: [PATCH 14/55] [2026-11-02] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index 785e550d..68e30b21 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -285,7 +285,7 @@ Transmission ограничивал загрузки пятью слотами, Бэкап общих профилей, ограничений и исходного мониторинга: `/mnt/RED_2TB/docker/arr/lidarr/global-autosearch-fix-20261102T032053Z/`. Бэкап до отмены собственных сканирований: `lidarr-autosearch/cancel-owned-rescans-/`. До изменения cron сохранён `cronjobs-before.json`. При откате восстанавливать только затронутые настройки из JSON; не подменять целую живую БД и не удалять музыку. -Проверки: 17 автоматических тестов на NAS и локально (границы monitoring, частичный выбор, повторы, активные загрузки, будущие альбомы, Various Artists, область сканирования). Реальный запуск через TrueNAS `cronjob.run 4` завершился SUCCESS; штатные ArtistSearch автоматически отправили раздачи Infected Mushroom, Muse, Savant, Eminem, Rammstein, Ундервуд, Высоцкого, Пушного и других в Transmission. Проверены фактические принятые байты и завершённые раздачи, не только строки очереди. После освобождения импорта в истории подтверждены новые `trackFileImported`: Infected Mushroom 34, Savant 44, Muse 20, Billy Talent 10, Пневмослон 37 (срез проверки 2026-11-02, загрузки продолжаются). Реальные непустые MP3 по `importedPath` дополнительно проверены на диске. Повторных полных сканирований от этого запуска больше нет. +Проверки обновления паков: 23 теста worker проходят на NAS и локально, вместе с 15 тестами общего поиска — 38 локальных тестов. Проверены границы monitoring, частичный выбор, повторы, версия политики, активные загрузки, будущие альбомы, Various Artists, область сканирования, многоальбомные заголовки и ограниченный обход только блокировок уже имеющихся файлов. Отдельный тест проверяет использование исходного кешированного guid и отсутствующего albumId. Бэкап worker/tests/state перед обновлением: `/mnt/RED_2TB/docker/arr/lidarr-autosearch/backup-partial-packs-20261102T080214Z/`. Реальная приёмка Savant: общий обработчик автоматически распознал RuTracker 3956208 «11 Albums, 3 Singles — 2011–2015», проверил native decisions и отправил пакет 2 111 099 121 байт в Transmission, torrent 654, hash `FD6BC3D0651C28EF81368B923216CFA18D5BA773`. Подтверждены grabbed в Lidarr и строки очереди с тем же downloadId; это один торрент, представленный в Lidarr по альбомам. При проверке torrent status=3 (ожидает очереди Transmission), ошибок нет, принятых байт ещё 0 — загрузку и импорт завершёнными не считать. В файлах пакета подтверждены недостающие ISM, Vario, Overworld и треки Cult. Пакет заканчивается 2015 годом и не содержит Mortals, Slasher, Alchemist 2: они остаются в поиске. Очередь Transmission включена (10 загрузок, stalled=5 минут); другие торренты передают данные, суммарно около 29,9 МБ/с при проверке. Cron 4 проверен enabled, `*/15`, Health Lidarr — `[]`. Реальный запуск через TrueNAS `cronjob.run 4` завершился SUCCESS; штатные ArtistSearch автоматически отправили раздачи Infected Mushroom, Muse, Savant, Eminem, Rammstein, Ундервуд, Высоцкого, Пушного и других в Transmission. Проверены фактические принятые байты и завершённые раздачи, не только строки очереди. После освобождения импорта в истории подтверждены новые `trackFileImported`: Infected Mushroom 34, Savant 44, Muse 20, Billy Talent 10, Пневмослон 37 (срез проверки 2026-11-02, загрузки продолжаются). Реальные непустые MP3 по `importedPath` дополнительно проверены на диске. Повторных полных сканирований от этого запуска больше нет. | Симптом | Проверка | Исправление | |---|---|---| From 70e68145b8cb10a7e56f1c074459922416ffc6e0 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 15:55:06 +0600 Subject: [PATCH 15/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- .../cpm-project-summary-2026-11-03.md | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 work/projects/cpm-project-summary-2026-11-03.md diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md new file mode 100644 index 00000000..84621111 --- /dev/null +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -0,0 +1,63 @@ +--- +tags: + - work + - cpm + - summary +updated: '2026-11-03' +status: draft +--- +# CPM stuck-messaging project: where we are, Nov/3 + +Internal metrics, keep out of public PRs. Task: [CPM: root-cause the stuck embedded extension messaging](https://app.asana.com/1/137249556945/project/72649045549333/task/1216761517055116?focus=true). Details: [[cpm-post-release-analysis-2026-10-27]], [[cpm-status-2026-10-15]]. + +Goal: permanent stuck reports below 1% of DAU (0.2-0.5% counts as success). + +## What the project has achieved + +- Telemetry that attributes failures (public since Oct/5). We can now see what state the extension was in when a page got no response. +- Fixed the deterministic per-tab bugs: tab merging, Close Other Tabs, pinned tabs and window close (macOS). +- Reproduced the main failure patterns on real WebKit, with the event sequences matched to production. +- Oct/26 release (macOS 1.213 / iOS 7.243): new episode telemetry, recovery for slow wake, error 6 retry and slow startup, restart after a networking process crash. +- Nov/2 release (1.214 / 7.244): stable extension origin (P3, only on OS 26.6+), and the fix for browser error pages being counted as CPM failures. +- Result so far: the noise is gone, permanent failures are not. On iOS 26.6+, startup-missing and no-view reports are down by over 90% against 7.243 on the same day. Permanent share of DAU is about the same as before. + +## Hypotheses and fixes that did not work out + +- Deallocation race fix and its A/B test: cancelled because the metrics were too blurry, flag never activated. Data showed no relation to the released fixes. +- Slow wake fix (P1): shipped, no measurable effect on the wake group. The background is ready in under 1s, so the loss happens after that. +- Hung or crashed background process: not the cause, under 1% of failures show it. +- Memory pressure, feature flag toggling, "failed load blocks forever": not reproduced or ruled out as a global cause. +- Lost message after wake: could not be reproduced in WebKit tests (0 lost in ~1,500 wakes, also with real pages and the ad blocker running). +- Late page reload fix: default off and never fired. +- Graveyard mitigation: not supported by the data, not pursued. + +## Fixes going public next week (Nov/9) + +- Upgrade-before-load ([#7767](https://github.com/duckduckgo/apple-browsers/pull/7767)): load the new extension version first on launch, instead of an outdated one. + - Expected: removes part of the "extension updated" group (macOS 0.26% DAU, iOS 0.05%). Launch upgrades only, so partial. +- Error 6 restart ([#7730](https://github.com/duckduckgo/apple-browsers/pull/7730)): restart the stuck background when the failed view is still retained. + - Expected: up to 0.08% DAU on iOS, negligible on macOS. Partial, most error 6 reports only have it in history. +- Together: macOS 1.89% to about 1.6%, iOS 0.44% to about 0.3-0.35%. Upper bounds, not measured. + +## Data now (% of DAU, 1.214 / 7.244, Nov/2) + +One day, early adopters, macOS has about 9k DAU. Treat as a rough picture. + +- Permanent stuck = no response for 5 minutes, confirmed by a repeat or a reload. Browser-wide = 2+ tabs, one-tab = single tab. +- macOS: any failure 15.1% (28.5% on 1.213 days 1-2), permanent 1.89% (2.87% on 1.213 days 1-2, but the mature 1.213 population is also at 1.9%). + - Browser-wide 1.22%, one-tab 0.68%. + - Idle wake 0.68%, tab not connected (P6) 0.42%, other 0.30%, extension updated 0.26%, recent load 0.19%. +- iOS: any failure 8.0%, permanent 0.44% (0.39% on 7.243 days 1-2). + - Browser-wide 0.26%, one-tab 0.18%. + - Recent load 0.18%, error 6 0.08%, idle wake 0.06%, extension updated 0.05%, other 0.04%. +- iOS is already under the 1% target. macOS stays above it after the Nov/9 fixes. +- Unaddressed on macOS: idle wake (35% of permanent) and P6 (22%). Nothing in flight for either. +- Extension install and load errors are rare (thousandths of a percent), not worth the time. + +## Plan + +- Clean up what did not work: remove the never-activated flags and experiment code (deallocation race, graveyard, late reload), the unused readiness pixels and the old debug pixels. Keep the kill-switch flags on fixes that change behavior until their effect is measured. +- Rebuild the metrics as a permanent small set: one episode report with a fixed format, rates against DAU, a sample of healthy navigations as baseline. Drop the tokens and flags that did not help. Publish old and new formats for one release to keep the trend. +- Add extension lifecycle metrics to diagnose the wake problem: where the init message stops (page, background, native checks, dashboard update, answer back to the page). Plus a check of the background state when a failure is reported. Needs a privacy review and extension and app releases, so data in 1-2 release cycles. +- Mitigations to decide on, not planned yet: retry the init from the page when no answer arrives, and a keep-warm A/B for the background. Both work without knowing the cause. +- Open: P6 has no fix, and the wake group will not be solved without the new metrics. If they show nothing actionable, close the project and reset the target. From 68e617a17fdc123b8fb1d143aae973f55bbb1364 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 18:17:28 +0600 Subject: [PATCH 16/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- .../cpm-project-summary-2026-11-03.md | 88 ++++++++++++++----- 1 file changed, 66 insertions(+), 22 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 84621111..eef0e8aa 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -14,28 +14,46 @@ Goal: permanent stuck reports below 1% of DAU (0.2-0.5% counts as success). ## What the project has achieved -- Telemetry that attributes failures (public since Oct/5). We can now see what state the extension was in when a page got no response. -- Fixed the deterministic per-tab bugs: tab merging, Close Other Tabs, pinned tabs and window close (macOS). -- Reproduced the main failure patterns on real WebKit, with the event sequences matched to production. -- Oct/26 release (macOS 1.213 / iOS 7.243): new episode telemetry, recovery for slow wake, error 6 retry and slow startup, restart after a networking process crash. -- Nov/2 release (1.214 / 7.244): stable extension origin (P3, only on OS 26.6+), and the fix for browser error pages being counted as CPM failures. -- Result so far: the noise is gone, permanent failures are not. On iOS 26.6+, startup-missing and no-view reports are down by over 90% against 7.243 on the same day. Permanent share of DAU is about the same as before. +Success criteria: permanent stuck reports below 1% of DAU (0.2-0.5% counts as success). Permanent = no response for 5 minutes, confirmed by a repeat or a reload. -## Hypotheses and fixes that did not work out +Progress against it (1.213 / 7.243 days 1-2 → 1.214 / 7.244 day 1): -- Deallocation race fix and its A/B test: cancelled because the metrics were too blurry, flag never activated. Data showed no relation to the released fixes. -- Slow wake fix (P1): shipped, no measurable effect on the wake group. The background is ready in under 1s, so the loss happens after that. -- Hung or crashed background process: not the cause, under 1% of failures show it. -- Memory pressure, feature flag toggling, "failed load blocks forever": not reproduced or ruled out as a global cause. -- Lost message after wake: could not be reproduced in WebKit tests (0 lost in ~1,500 wakes, also with real pages and the ad blocker running). -- Late page reload fix: default off and never fired. -- Graveyard mitigation: not supported by the data, not pursued. +- iOS: 0.43% → 0.44% of DAU. Inside the target. +- macOS: 2.87% → 1.89% of DAU (any failure 28.5% → 15.1%). Target not reached yet. Nov/9 fixes bring it to about 1.6%. + +Breakage measurement, built and corrected: + +- Production telemetry for the stuck extension: one episode report with failure groups, tab scope, repeat count, and rates against DAU. Before it we could not separate stuck from recovered failures or attribute a cause. [Improve telemetry](https://app.asana.com/1/137249556945/task/1219531810004069?focus=true), [TD: failure pixels attribution](https://app.asana.com/1/137249556945/task/1218619301158188?focus=true). +- Error pages were reported as breakages on macOS. Fixed, so the macOS figure is now accurate: any failure 28.5% → 15.1%, permanent 2.87% → 1.89% of DAU. [Fix false-positive breakage reports for error pages](https://app.asana.com/1/137249556945/task/1220003778559452?focus=true). + +Breakage fixes shipped, with what each did: + +- Stable extension origin ([P3: stable baseURL fix](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [Disable stable baseURL fix for OS<26.6](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true), OS 26.6+): removes a 1.5 to 32 s startup blackout after an origin change. iOS 26.6+ startup-missing and no-view reports down over 90%. +- macOS pinned tab lost on window close ([P5: pinned tab after windowDidClose](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true)) and tab merging ([Fix Tab Merging causing CPM failure](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true)): reproduced and fixed. P5 tests 9 pass with fix → 5 expected failures with it off → 27 pass. +- Wake and startup recovery ([P1&P2[&P4]: Fix init loss on background unload](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true)): applied to 2,026 iOS / 89 macOS episodes on Oct/26. +- Network process restart ([Fix CPM breakage on network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true)): applied 476 iOS / 277 macOS times on Oct/26. +- Public Nov/9: [Restart extension context when error 6 leaves the background view alive](https://app.asana.com/1/137249556945/task/1219939142983214?focus=true) (up to 0.08% DAU iOS) and [Upgrade Web Extensions before loading](https://app.asana.com/1/137249556945/task/1220004977087625?focus=true) (macOS 0.26%, iOS 0.05% DAU). + +Causes proved by reproduction: + +- iOS error-6 loop: stale failed background ([WebExtensions breakage harness](https://app.asana.com/1/137249556945/task/1219531810004071?focus=true)). Fixed by the Nov/9 error 6 restart. +- Origin change cleaning the cache before startup (fixed by P3). +- macOS P6: a tab without a controller never answers. 0.42% of DAU, no fix yet. + +Hypotheses tested and rejected: + +- [Deallocation race fix](https://app.asana.com/1/137249556945/task/1217907325352233?focus=true), [A/B](https://app.asana.com/1/137249556945/task/1218356681060819?focus=true), [flag activation](https://app.asana.com/1/137249556945/task/1219036128743441?focus=true): flag never activated, data showed no relation. +- Hung or crashed background process: under 1% of failures show it. +- Lost message after wake: 0 lost in ~1,500 wakes in WebKit tests ([Reproduce the issue](https://app.asana.com/1/137249556945/task/1217907325352231?focus=true)). +- [Reload/recover on the Stuck signal](https://app.asana.com/1/137249556945/task/1218744813699968?focus=true): 46% of macOS episodes still got no response after it. Late page reload: 0 fires in production. +- Memory pressure, feature flag toggling, "failed load blocks forever": not reproduced. +- Graveyard mitigation: not supported by the data. ## Fixes going public next week (Nov/9) -- Upgrade-before-load ([#7767](https://github.com/duckduckgo/apple-browsers/pull/7767)): load the new extension version first on launch, instead of an outdated one. +- [Upgrade Web Extensions before loading](https://app.asana.com/1/137249556945/task/1220004977087625?focus=true): load the new extension version first on launch, instead of an outdated one. - Expected: removes part of the "extension updated" group (macOS 0.26% DAU, iOS 0.05%). Launch upgrades only, so partial. -- Error 6 restart ([#7730](https://github.com/duckduckgo/apple-browsers/pull/7730)): restart the stuck background when the failed view is still retained. +- [Restart extension context when error 6 leaves the background view alive](https://app.asana.com/1/137249556945/task/1219939142983214?focus=true): restart the stuck background when the failed view is still retained. - Expected: up to 0.08% DAU on iOS, negligible on macOS. Partial, most error 6 reports only have it in history. - Together: macOS 1.89% to about 1.6%, iOS 0.44% to about 0.3-0.35%. Upper bounds, not measured. @@ -44,7 +62,7 @@ Goal: permanent stuck reports below 1% of DAU (0.2-0.5% counts as success). One day, early adopters, macOS has about 9k DAU. Treat as a rough picture. - Permanent stuck = no response for 5 minutes, confirmed by a repeat or a reload. Browser-wide = 2+ tabs, one-tab = single tab. -- macOS: any failure 15.1% (28.5% on 1.213 days 1-2), permanent 1.89% (2.87% on 1.213 days 1-2, but the mature 1.213 population is also at 1.9%). +- macOS: any failure 15.1%, permanent 1.89%. The earlier 28.5% / 2.87% on 1.213 included error pages, so the drop is the metric fix. Mature 1.213 is also at ~1.9%. - Browser-wide 1.22%, one-tab 0.68%. - Idle wake 0.68%, tab not connected (P6) 0.42%, other 0.30%, extension updated 0.26%, recent load 0.19%. - iOS: any failure 8.0%, permanent 0.44% (0.39% on 7.243 days 1-2). @@ -56,8 +74,34 @@ One day, early adopters, macOS has about 9k DAU. Treat as a rough picture. ## Plan -- Clean up what did not work: remove the never-activated flags and experiment code (deallocation race, graveyard, late reload), the unused readiness pixels and the old debug pixels. Keep the kill-switch flags on fixes that change behavior until their effect is measured. -- Rebuild the metrics as a permanent small set: one episode report with a fixed format, rates against DAU, a sample of healthy navigations as baseline. Drop the tokens and flags that did not help. Publish old and new formats for one release to keep the trend. -- Add extension lifecycle metrics to diagnose the wake problem: where the init message stops (page, background, native checks, dashboard update, answer back to the page). Plus a check of the background state when a failure is reported. Needs a privacy review and extension and app releases, so data in 1-2 release cycles. -- Mitigations to decide on, not planned yet: retry the init from the page when no answer arrives, and a keep-warm A/B for the background. Both work without knowing the cause. -- Open: P6 has no fix, and the wake group will not be solved without the new metrics. If they show nothing actionable, close the project and reset the target. +Cleanup, this week: + +- [Feature flags cleanup](https://app.asana.com/1/137249556945/task/1220159402040629?focus=true) (task is empty in Asana, content below). Registry tasks per flag: + - Remove the fix and the flag, they did not work or never ran: + - [cpmBackgroundGraveyardTreatment](https://app.asana.com/1/137249556945/task/1218860893478440?focus=true): graveyard mitigation, not supported by data. + - [cpmLateBackgroundDocumentRecovery](https://app.asana.com/1/137249556945/task/1219588497257482?focus=true): late page reload, default off, 0 fires. + - [cpmMessagingHangRecovery](https://app.asana.com/1/137249556945/task/1218855001659655?focus=true): reload on the stuck signal, 46% still no response; decide keep or remove. + - [cpmBackgroundLoadRecovery](https://app.asana.com/1/137249556945/task/1219701603183698?focus=true): P1/P2 wake and retry, no measurable effect. + - Remove the diagnostics flags together with the diagnostics layer: + - [cpmDiagnosticsRecorder](https://app.asana.com/1/137249556945/task/1218785444896174?focus=true): recorder and unresponsive token. + - [cpmBackgroundDelegateProxy](https://app.asana.com/1/137249556945/task/1218782530802146?focus=true): delegate proxy for diagnostics. + - Keep the fix, remove the failsafe flag once its effect is measured: + - [cpmNetworkProcessRecovery](https://app.asana.com/1/137249556945/task/1219701603183695?focus=true): network restart. + - [cpmStableBaseURL](https://app.asana.com/1/137249556945/task/1219728649844711?focus=true): stable origin; flag state is not visible in pixels, check the remote config first. + - [webExtensionSharedPinnedTabWindowClose](https://app.asana.com/1/137249556945/task/1219660990760563?focus=true): P5. + - [webExtensionStateRestorationGate](https://app.asana.com/1/137249556945/task/1218931841045393?focus=true): session restoration race. + - [cpmBackgroundLoadRestart](https://app.asana.com/1/137249556945/task/1219970564251181?focus=true): error 6 restart, after Nov/9 data. +- [Pixel data cleanup](https://app.asana.com/1/137249556945/task/1220159402040630?focus=true) (task is empty in Asana, content below): + - Remove the treatment pixels that only say "applied": background_wake, background_load_retry, install/upgrade readiness, late_document_reload, network_process_recovery_applied, startup_response_missing. + - Remove the temporary episode parameters that only served the investigation (bg_events and the other debug fields), after the new metrics are live. + +Metrics, next two weeks: + +- Permanent small set: one episode report with a fixed format, rates against DAU, a sample of healthy navigations as baseline. Old and new formats published together for one release to keep the trend. Added to the health indicators dashboard. Task to create. +- Extension lifecycle metrics to diagnose the wake problem: where the init message stops (page, background, native checks, dashboard update, answer back to the page), plus a background state check when a failure is reported. Needs a privacy review and extension and app releases, data in 1-2 release cycles. Task to create. +- Data check of the Nov/9 fixes: [Analyze attribution data after stage 3](https://app.asana.com/1/137249556945/task/1220159402040627?focus=true). + +Decide later: + +- Mitigations that do not need the cause: retry the init from the page when no answer arrives, keep-warm A/B for the background. +- P6 has no fix. The wake group will not be solved without the new metrics. If they show nothing actionable, close the project and reset the target. From b6381351bea3d8e538c6e041875c3533fca7da72 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 18:22:34 +0600 Subject: [PATCH 17/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- .../cpm-project-summary-2026-11-03.md | 41 ++++++++----------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index eef0e8aa..d9ed4f82 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -10,25 +10,18 @@ status: draft Internal metrics, keep out of public PRs. Task: [CPM: root-cause the stuck embedded extension messaging](https://app.asana.com/1/137249556945/project/72649045549333/task/1216761517055116?focus=true). Details: [[cpm-post-release-analysis-2026-10-27]], [[cpm-status-2026-10-15]]. -Goal: permanent stuck reports below 1% of DAU (0.2-0.5% counts as success). - ## What the project has achieved Success criteria: permanent stuck reports below 1% of DAU (0.2-0.5% counts as success). Permanent = no response for 5 minutes, confirmed by a repeat or a reload. -Progress against it (1.213 / 7.243 days 1-2 → 1.214 / 7.244 day 1): +Progress against it (now = 1.214 / 7.244, Nov/2): -- iOS: 0.43% → 0.44% of DAU. Inside the target. -- macOS: 2.87% → 1.89% of DAU (any failure 28.5% → 15.1%). Target not reached yet. Nov/9 fixes bring it to about 1.6%. - -Breakage measurement, built and corrected: - -- Production telemetry for the stuck extension: one episode report with failure groups, tab scope, repeat count, and rates against DAU. Before it we could not separate stuck from recovered failures or attribute a cause. [Improve telemetry](https://app.asana.com/1/137249556945/task/1219531810004069?focus=true), [TD: failure pixels attribution](https://app.asana.com/1/137249556945/task/1218619301158188?focus=true). -- Error pages were reported as breakages on macOS. Fixed, so the macOS figure is now accurate: any failure 28.5% → 15.1%, permanent 2.87% → 1.89% of DAU. [Fix false-positive breakage reports for error pages](https://app.asana.com/1/137249556945/task/1220003778559452?focus=true). +- iOS: 0.44% of DAU (0.43% on 7.243). Inside the target. +- macOS: 1.89% of DAU. Target not reached yet. Nov/9 fixes should bring it to about 1.6% (estimate, upper bound). Breakage fixes shipped, with what each did: -- Stable extension origin ([P3: stable baseURL fix](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [Disable stable baseURL fix for OS<26.6](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true), OS 26.6+): removes a 1.5 to 32 s startup blackout after an origin change. iOS 26.6+ startup-missing and no-view reports down over 90%. +- Stable extension origin ([P3: stable baseURL fix](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [Disable stable baseURL fix for OS<26.6](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true), OS 26.6+): in a lab reproduction an origin change delays extension startup by 1.5 to 32 s depending on cache size, a stable origin by 0.1 s. Not measured in production. iOS 26.6+ startup-missing and no-view reports are down over 90% vs 7.243 (cohort comparison, P3 state not visible in the pixels). - macOS pinned tab lost on window close ([P5: pinned tab after windowDidClose](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true)) and tab merging ([Fix Tab Merging causing CPM failure](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true)): reproduced and fixed. P5 tests 9 pass with fix → 5 expected failures with it off → 27 pass. - Wake and startup recovery ([P1&P2[&P4]: Fix init loss on background unload](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true)): applied to 2,026 iOS / 89 macOS episodes on Oct/26. - Network process restart ([Fix CPM breakage on network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true)): applied 476 iOS / 277 macOS times on Oct/26. @@ -37,7 +30,7 @@ Breakage fixes shipped, with what each did: Causes proved by reproduction: - iOS error-6 loop: stale failed background ([WebExtensions breakage harness](https://app.asana.com/1/137249556945/task/1219531810004071?focus=true)). Fixed by the Nov/9 error 6 restart. -- Origin change cleaning the cache before startup (fixed by P3). +- Origin change delaying extension startup (lab reproduction with real cache sizes; production impact not measured). - macOS P6: a tab without a controller never answers. 0.42% of DAU, no fix yet. Hypotheses tested and rejected: @@ -62,7 +55,7 @@ Hypotheses tested and rejected: One day, early adopters, macOS has about 9k DAU. Treat as a rough picture. - Permanent stuck = no response for 5 minutes, confirmed by a repeat or a reload. Browser-wide = 2+ tabs, one-tab = single tab. -- macOS: any failure 15.1%, permanent 1.89%. The earlier 28.5% / 2.87% on 1.213 included error pages, so the drop is the metric fix. Mature 1.213 is also at ~1.9%. +- macOS: any failure 15.1%, permanent 1.89%. - Browser-wide 1.22%, one-tab 0.68%. - Idle wake 0.68%, tab not connected (P6) 0.42%, other 0.30%, extension updated 0.26%, recent load 0.19%. - iOS: any failure 8.0%, permanent 0.44% (0.39% on 7.243 days 1-2). @@ -78,19 +71,19 @@ Cleanup, this week: - [Feature flags cleanup](https://app.asana.com/1/137249556945/task/1220159402040629?focus=true) (task is empty in Asana, content below). Registry tasks per flag: - Remove the fix and the flag, they did not work or never ran: - - [cpmBackgroundGraveyardTreatment](https://app.asana.com/1/137249556945/task/1218860893478440?focus=true): graveyard mitigation, not supported by data. - - [cpmLateBackgroundDocumentRecovery](https://app.asana.com/1/137249556945/task/1219588497257482?focus=true): late page reload, default off, 0 fires. - - [cpmMessagingHangRecovery](https://app.asana.com/1/137249556945/task/1218855001659655?focus=true): reload on the stuck signal, 46% still no response; decide keep or remove. - - [cpmBackgroundLoadRecovery](https://app.asana.com/1/137249556945/task/1219701603183698?focus=true): P1/P2 wake and retry, no measurable effect. + - [cpmBackgroundGraveyardTreatment](https://app.asana.com/1/137249556945/task/1218860893478440?focus=true): graveyard mitigation, not supported by data. + - [cpmLateBackgroundDocumentRecovery](https://app.asana.com/1/137249556945/task/1219588497257482?focus=true): late page reload, default off, 0 fires. + - [cpmMessagingHangRecovery](https://app.asana.com/1/137249556945/task/1218855001659655?focus=true): reload on the stuck signal, 46% still no response; decide keep or remove. + - [cpmBackgroundLoadRecovery](https://app.asana.com/1/137249556945/task/1219701603183698?focus=true): P1/P2 wake and retry, no measurable effect. - Remove the diagnostics flags together with the diagnostics layer: - - [cpmDiagnosticsRecorder](https://app.asana.com/1/137249556945/task/1218785444896174?focus=true): recorder and unresponsive token. - - [cpmBackgroundDelegateProxy](https://app.asana.com/1/137249556945/task/1218782530802146?focus=true): delegate proxy for diagnostics. + - [cpmDiagnosticsRecorder](https://app.asana.com/1/137249556945/task/1218785444896174?focus=true): recorder and unresponsive token. + - [cpmBackgroundDelegateProxy](https://app.asana.com/1/137249556945/task/1218782530802146?focus=true): delegate proxy for diagnostics. - Keep the fix, remove the failsafe flag once its effect is measured: - - [cpmNetworkProcessRecovery](https://app.asana.com/1/137249556945/task/1219701603183695?focus=true): network restart. - - [cpmStableBaseURL](https://app.asana.com/1/137249556945/task/1219728649844711?focus=true): stable origin; flag state is not visible in pixels, check the remote config first. - - [webExtensionSharedPinnedTabWindowClose](https://app.asana.com/1/137249556945/task/1219660990760563?focus=true): P5. - - [webExtensionStateRestorationGate](https://app.asana.com/1/137249556945/task/1218931841045393?focus=true): session restoration race. - - [cpmBackgroundLoadRestart](https://app.asana.com/1/137249556945/task/1219970564251181?focus=true): error 6 restart, after Nov/9 data. + - [cpmNetworkProcessRecovery](https://app.asana.com/1/137249556945/task/1219701603183695?focus=true): network restart. + - [cpmStableBaseURL](https://app.asana.com/1/137249556945/task/1219728649844711?focus=true): stable origin; flag state is not visible in pixels, check the remote config first. + - [webExtensionSharedPinnedTabWindowClose](https://app.asana.com/1/137249556945/task/1219660990760563?focus=true): P5. + - [webExtensionStateRestorationGate](https://app.asana.com/1/137249556945/task/1218931841045393?focus=true): session restoration race. + - [cpmBackgroundLoadRestart](https://app.asana.com/1/137249556945/task/1219970564251181?focus=true): error 6 restart, after Nov/9 data. - [Pixel data cleanup](https://app.asana.com/1/137249556945/task/1220159402040630?focus=true) (task is empty in Asana, content below): - Remove the treatment pixels that only say "applied": background_wake, background_load_retry, install/upgrade readiness, late_document_reload, network_process_recovery_applied, startup_response_missing. - Remove the temporary episode parameters that only served the investigation (bg_events and the other debug fields), after the new metrics are live. From a3a84e4729ac7e06fe3c54148f7782589dea89fb Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 18:27:40 +0600 Subject: [PATCH 18/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- .../cpm-project-summary-2026-11-03.md | 73 ++++++++----------- 1 file changed, 32 insertions(+), 41 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index d9ed4f82..9be71ec3 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -12,58 +12,49 @@ Internal metrics, keep out of public PRs. Task: [CPM: root-cause the stuck embed ## What the project has achieved -Success criteria: permanent stuck reports below 1% of DAU (0.2-0.5% counts as success). Permanent = no response for 5 minutes, confirmed by a repeat or a reload. +Goal: permanent stuck reports below 1% of DAU (0.2-0.5% = success). Permanent = no answer for 5 minutes, repeated or needed a reload. -Progress against it (now = 1.214 / 7.244, Nov/2): +Now (macOS 1.214, iOS 7.244, Nov/2): -- iOS: 0.44% of DAU (0.43% on 7.243). Inside the target. -- macOS: 1.89% of DAU. Target not reached yet. Nov/9 fixes should bring it to about 1.6% (estimate, upper bound). +- iOS: 0.44% of DAU (0.43% before). Inside the target. +- macOS: 1.89%. Above the target. -Breakage fixes shipped, with what each did: +Fixes shipped: -- Stable extension origin ([P3: stable baseURL fix](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [Disable stable baseURL fix for OS<26.6](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true), OS 26.6+): in a lab reproduction an origin change delays extension startup by 1.5 to 32 s depending on cache size, a stable origin by 0.1 s. Not measured in production. iOS 26.6+ startup-missing and no-view reports are down over 90% vs 7.243 (cohort comparison, P3 state not visible in the pixels). -- macOS pinned tab lost on window close ([P5: pinned tab after windowDidClose](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true)) and tab merging ([Fix Tab Merging causing CPM failure](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true)): reproduced and fixed. P5 tests 9 pass with fix → 5 expected failures with it off → 27 pass. -- Wake and startup recovery ([P1&P2[&P4]: Fix init loss on background unload](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true)): applied to 2,026 iOS / 89 macOS episodes on Oct/26. -- Network process restart ([Fix CPM breakage on network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true)): applied 476 iOS / 277 macOS times on Oct/26. -- Public Nov/9: [Restart extension context when error 6 leaves the background view alive](https://app.asana.com/1/137249556945/task/1219939142983214?focus=true) (up to 0.08% DAU iOS) and [Upgrade Web Extensions before loading](https://app.asana.com/1/137249556945/task/1220004977087625?focus=true) (macOS 0.26%, iOS 0.05% DAU). +- [P3](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [OS<26.6 limit](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true) – stable extension identity, avoids slow startup (up to 32 s in lab tests). iOS 26.6+ "background missing" failures 8.2% → 0.3% of DAU, but also fell on older iOS, so P3 is not proven as the cause. +- macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. +- [P1/P2/P4](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after wake and startup failures. Triggered 2,026 times on iOS, 89 on macOS (Oct/26). No visible drop in stuck reports. +- [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggered 476 times on iOS, 277 on macOS (Oct/26). No visible drop in stuck reports. +- [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – extension failing to start while tabs restore. Effect not measured. Causes proved by reproduction: -- iOS error-6 loop: stale failed background ([WebExtensions breakage harness](https://app.asana.com/1/137249556945/task/1219531810004071?focus=true)). Fixed by the Nov/9 error 6 restart. -- Origin change delaying extension startup (lab reproduction with real cache sizes; production impact not measured). -- macOS P6: a tab without a controller never answers. 0.42% of DAU, no fix yet. +- iOS: after "error 6" the background stays broken and every wake fails again ([harness](https://app.asana.com/1/137249556945/task/1219531810004071?focus=true)). Fix goes public Nov/9. +- macOS: a tab the extension is not connected to never gets an answer. 0.42% of DAU, no fix yet. -Hypotheses tested and rejected: +Hypotheses rejected: -- [Deallocation race fix](https://app.asana.com/1/137249556945/task/1217907325352233?focus=true), [A/B](https://app.asana.com/1/137249556945/task/1218356681060819?focus=true), [flag activation](https://app.asana.com/1/137249556945/task/1219036128743441?focus=true): flag never activated, data showed no relation. -- Hung or crashed background process: under 1% of failures show it. -- Lost message after wake: 0 lost in ~1,500 wakes in WebKit tests ([Reproduce the issue](https://app.asana.com/1/137249556945/task/1217907325352231?focus=true)). -- [Reload/recover on the Stuck signal](https://app.asana.com/1/137249556945/task/1218744813699968?focus=true): 46% of macOS episodes still got no response after it. Late page reload: 0 fires in production. -- Memory pressure, feature flag toggling, "failed load blocks forever": not reproduced. -- Graveyard mitigation: not supported by the data. +- [Deallocation race](https://app.asana.com/1/137249556945/task/1217907325352233?focus=true) ([A/B](https://app.asana.com/1/137249556945/task/1218356681060819?focus=true), [flag](https://app.asana.com/1/137249556945/task/1219036128743441?focus=true)) – fix shipped behind a flag never turned on, no relation in the data. +- [Reload on the stuck signal](https://app.asana.com/1/137249556945/task/1218744813699968?focus=true) – 46% of macOS cases still got no answer. Late page reload never triggered. +- Lost message after wake – 0 of ~1,500 wakes in tests ([Reproduce the issue](https://app.asana.com/1/137249556945/task/1217907325352231?focus=true)). +- Hung background process – under 1% of failures. +- Memory pressure, flag toggling, "failed load blocks forever" – not reproduced. ## Fixes going public next week (Nov/9) -- [Upgrade Web Extensions before loading](https://app.asana.com/1/137249556945/task/1220004977087625?focus=true): load the new extension version first on launch, instead of an outdated one. - - Expected: removes part of the "extension updated" group (macOS 0.26% DAU, iOS 0.05%). Launch upgrades only, so partial. -- [Restart extension context when error 6 leaves the background view alive](https://app.asana.com/1/137249556945/task/1219939142983214?focus=true): restart the stuck background when the failed view is still retained. - - Expected: up to 0.08% DAU on iOS, negligible on macOS. Partial, most error 6 reports only have it in history. -- Together: macOS 1.89% to about 1.6%, iOS 0.44% to about 0.3-0.35%. Upper bounds, not measured. +- [Upgrade before loading](https://app.asana.com/1/137249556945/task/1220004977087625?focus=true) – load the new extension version first on launch. Removes part of the failures right after an update (macOS 0.26% of DAU, iOS 0.05%). +- [Error 6 restart](https://app.asana.com/1/137249556945/task/1219939142983214?focus=true) – restart the extension when a load error leaves it broken. Up to 0.08% on iOS, negligible on macOS. +- Together: macOS 1.89% → about 1.6%, iOS 0.44% → about 0.3-0.35%. Estimates, upper bounds. -## Data now (% of DAU, 1.214 / 7.244, Nov/2) +## Data now (% of DAU, Nov/2) -One day, early adopters, macOS has about 9k DAU. Treat as a rough picture. +One day, early adopters, macOS about 9k DAU: a rough picture. -- Permanent stuck = no response for 5 minutes, confirmed by a repeat or a reload. Browser-wide = 2+ tabs, one-tab = single tab. -- macOS: any failure 15.1%, permanent 1.89%. - - Browser-wide 1.22%, one-tab 0.68%. - - Idle wake 0.68%, tab not connected (P6) 0.42%, other 0.30%, extension updated 0.26%, recent load 0.19%. -- iOS: any failure 8.0%, permanent 0.44% (0.39% on 7.243 days 1-2). - - Browser-wide 0.26%, one-tab 0.18%. - - Recent load 0.18%, error 6 0.08%, idle wake 0.06%, extension updated 0.05%, other 0.04%. -- iOS is already under the 1% target. macOS stays above it after the Nov/9 fixes. -- Unaddressed on macOS: idle wake (35% of permanent) and P6 (22%). Nothing in flight for either. -- Extension install and load errors are rare (thousandths of a percent), not worth the time. +- macOS: permanent 1.89% (browser-wide 1.22%, one tab 0.68%). + - Failures right after a wake 0.68%, tab not connected 0.42%, other 0.30%, right after an update 0.26%, right after a load 0.19%. +- iOS: permanent 0.44% (browser-wide 0.26%, one tab 0.18%). + - Right after a load 0.18%, error 6 0.08%, right after a wake 0.06%, right after an update 0.05%, other 0.04%. +- No fix in flight for macOS wake failures (35% of permanent) and tab not connected (22%). ## Plan @@ -71,10 +62,10 @@ Cleanup, this week: - [Feature flags cleanup](https://app.asana.com/1/137249556945/task/1220159402040629?focus=true) (task is empty in Asana, content below). Registry tasks per flag: - Remove the fix and the flag, they did not work or never ran: - - [cpmBackgroundGraveyardTreatment](https://app.asana.com/1/137249556945/task/1218860893478440?focus=true): graveyard mitigation, not supported by data. + - [cpmBackgroundGraveyardTreatment](https://app.asana.com/1/137249556945/task/1218860893478440?focus=true): deallocation race fix, never activated. - [cpmLateBackgroundDocumentRecovery](https://app.asana.com/1/137249556945/task/1219588497257482?focus=true): late page reload, default off, 0 fires. - [cpmMessagingHangRecovery](https://app.asana.com/1/137249556945/task/1218855001659655?focus=true): reload on the stuck signal, 46% still no response; decide keep or remove. - - [cpmBackgroundLoadRecovery](https://app.asana.com/1/137249556945/task/1219701603183698?focus=true): P1/P2 wake and retry, no measurable effect. + - [cpmBackgroundLoadRecovery](https://app.asana.com/1/137249556945/task/1219701603183698?focus=true): wake and retry recovery, no measurable effect. - Remove the diagnostics flags together with the diagnostics layer: - [cpmDiagnosticsRecorder](https://app.asana.com/1/137249556945/task/1218785444896174?focus=true): recorder and unresponsive token. - [cpmBackgroundDelegateProxy](https://app.asana.com/1/137249556945/task/1218782530802146?focus=true): delegate proxy for diagnostics. @@ -91,10 +82,10 @@ Cleanup, this week: Metrics, next two weeks: - Permanent small set: one episode report with a fixed format, rates against DAU, a sample of healthy navigations as baseline. Old and new formats published together for one release to keep the trend. Added to the health indicators dashboard. Task to create. -- Extension lifecycle metrics to diagnose the wake problem: where the init message stops (page, background, native checks, dashboard update, answer back to the page), plus a background state check when a failure is reported. Needs a privacy review and extension and app releases, data in 1-2 release cycles. Task to create. +- Extension lifecycle metrics to diagnose the wake problem: where the startup message between the page and the browser stops, plus a background state check when a failure is reported. Needs a privacy review and extension and app releases, data in 1-2 release cycles. Task to create. - Data check of the Nov/9 fixes: [Analyze attribution data after stage 3](https://app.asana.com/1/137249556945/task/1220159402040627?focus=true). Decide later: - Mitigations that do not need the cause: retry the init from the page when no answer arrives, keep-warm A/B for the background. -- P6 has no fix. The wake group will not be solved without the new metrics. If they show nothing actionable, close the project and reset the target. +- "Tab not connected" has no fix. Failures right after a wake will not be solved without the new metrics. If they show nothing actionable, close the project and reset the target. From d53e597c911e13de85ae2404f847a577ab880191 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 18:32:44 +0600 Subject: [PATCH 19/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- .../cpm-project-summary-2026-11-03.md | 46 +++++++------------ 1 file changed, 16 insertions(+), 30 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 9be71ec3..e689c5e4 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -21,10 +21,10 @@ Now (macOS 1.214, iOS 7.244, Nov/2): Fixes shipped: -- [P3](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [OS<26.6 limit](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true) – stable extension identity, avoids slow startup (up to 32 s in lab tests). iOS 26.6+ "background missing" failures 8.2% → 0.3% of DAU, but also fell on older iOS, so P3 is not proven as the cause. +- [P3](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [OS<26.6 limit](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true) – expected: the extension starts without delay after restarts (up to 32 s delay without it in lab tests). Flag on in 7.244+/1.214+. iOS 26.6+, transient: users with a failure 14.6% → 8.3% of DAU, "background missing" 8.2% → 0.3% (12x higher than older iOS before, now equal). Permanent: no improvement (0.29% → 0.48%). Early-adopter sample. - macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. -- [P1/P2/P4](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after wake and startup failures. Triggered 2,026 times on iOS, 89 on macOS (Oct/26). No visible drop in stuck reports. -- [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggered 476 times on iOS, 277 on macOS (Oct/26). No visible drop in stuck reports. +- [P1/P2/P4](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after wake and startup failures. Triggered 2,026 times on iOS, 89 on macOS (Oct/26). Permanent: no visible drop. +- [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggered 476 times on iOS, 277 on macOS (Oct/26). Permanent: no visible drop. - [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – extension failing to start while tabs restore. Effect not measured. Causes proved by reproduction: @@ -42,8 +42,8 @@ Hypotheses rejected: ## Fixes going public next week (Nov/9) -- [Upgrade before loading](https://app.asana.com/1/137249556945/task/1220004977087625?focus=true) – load the new extension version first on launch. Removes part of the failures right after an update (macOS 0.26% of DAU, iOS 0.05%). -- [Error 6 restart](https://app.asana.com/1/137249556945/task/1219939142983214?focus=true) – restart the extension when a load error leaves it broken. Up to 0.08% on iOS, negligible on macOS. +- [Upgrade before loading](https://app.asana.com/1/137249556945/task/1220004977087625?focus=true) – load the new extension version first on launch. Removes part of the permanent failures right after an update (macOS 0.26% of DAU, iOS 0.05%). +- [Error 6 restart](https://app.asana.com/1/137249556945/task/1219939142983214?focus=true) – restart the extension when a load error leaves it broken. Up to 0.08% of DAU permanent on iOS, negligible on macOS. - Together: macOS 1.89% → about 1.6%, iOS 0.44% → about 0.3-0.35%. Estimates, upper bounds. ## Data now (% of DAU, Nov/2) @@ -58,34 +58,20 @@ One day, early adopters, macOS about 9k DAU: a rough picture. ## Plan -Cleanup, this week: +This week, cleanup: -- [Feature flags cleanup](https://app.asana.com/1/137249556945/task/1220159402040629?focus=true) (task is empty in Asana, content below). Registry tasks per flag: - - Remove the fix and the flag, they did not work or never ran: - - [cpmBackgroundGraveyardTreatment](https://app.asana.com/1/137249556945/task/1218860893478440?focus=true): deallocation race fix, never activated. - - [cpmLateBackgroundDocumentRecovery](https://app.asana.com/1/137249556945/task/1219588497257482?focus=true): late page reload, default off, 0 fires. - - [cpmMessagingHangRecovery](https://app.asana.com/1/137249556945/task/1218855001659655?focus=true): reload on the stuck signal, 46% still no response; decide keep or remove. - - [cpmBackgroundLoadRecovery](https://app.asana.com/1/137249556945/task/1219701603183698?focus=true): wake and retry recovery, no measurable effect. - - Remove the diagnostics flags together with the diagnostics layer: - - [cpmDiagnosticsRecorder](https://app.asana.com/1/137249556945/task/1218785444896174?focus=true): recorder and unresponsive token. - - [cpmBackgroundDelegateProxy](https://app.asana.com/1/137249556945/task/1218782530802146?focus=true): delegate proxy for diagnostics. - - Keep the fix, remove the failsafe flag once its effect is measured: - - [cpmNetworkProcessRecovery](https://app.asana.com/1/137249556945/task/1219701603183695?focus=true): network restart. - - [cpmStableBaseURL](https://app.asana.com/1/137249556945/task/1219728649844711?focus=true): stable origin; flag state is not visible in pixels, check the remote config first. - - [webExtensionSharedPinnedTabWindowClose](https://app.asana.com/1/137249556945/task/1219660990760563?focus=true): P5. - - [webExtensionStateRestorationGate](https://app.asana.com/1/137249556945/task/1218931841045393?focus=true): session restoration race. - - [cpmBackgroundLoadRestart](https://app.asana.com/1/137249556945/task/1219970564251181?focus=true): error 6 restart, after Nov/9 data. -- [Pixel data cleanup](https://app.asana.com/1/137249556945/task/1220159402040630?focus=true) (task is empty in Asana, content below): - - Remove the treatment pixels that only say "applied": background_wake, background_load_retry, install/upgrade readiness, late_document_reload, network_process_recovery_applied, startup_response_missing. - - Remove the temporary episode parameters that only served the investigation (bg_events and the other debug fields), after the new metrics are live. +- [Feature flags cleanup](https://app.asana.com/1/137249556945/task/1220159402040629?focus=true): + - Remove fix and flag (did not work or never ran): [cpmBackgroundGraveyardTreatment](https://app.asana.com/1/137249556945/task/1218860893478440?focus=true), [cpmLateBackgroundDocumentRecovery](https://app.asana.com/1/137249556945/task/1219588497257482?focus=true), [cpmMessagingHangRecovery](https://app.asana.com/1/137249556945/task/1218855001659655?focus=true), [cpmBackgroundLoadRecovery](https://app.asana.com/1/137249556945/task/1219701603183698?focus=true). + - Remove with the diagnostics: [cpmDiagnosticsRecorder](https://app.asana.com/1/137249556945/task/1218785444896174?focus=true), [cpmBackgroundDelegateProxy](https://app.asana.com/1/137249556945/task/1218782530802146?focus=true). + - Keep the fix, remove the failsafe flag: [cpmNetworkProcessRecovery](https://app.asana.com/1/137249556945/task/1219701603183695?focus=true), [cpmStableBaseURL](https://app.asana.com/1/137249556945/task/1219728649844711?focus=true), [webExtensionSharedPinnedTabWindowClose](https://app.asana.com/1/137249556945/task/1219660990760563?focus=true), [webExtensionStateRestorationGate](https://app.asana.com/1/137249556945/task/1218931841045393?focus=true), [cpmBackgroundLoadRestart](https://app.asana.com/1/137249556945/task/1219970564251181?focus=true) (after Nov/9 data). +- [Pixel data cleanup](https://app.asana.com/1/137249556945/task/1220159402040630?focus=true): remove the temporary pixels and episode parameters that only served the investigation. -Metrics, next two weeks: +Next, metrics: -- Permanent small set: one episode report with a fixed format, rates against DAU, a sample of healthy navigations as baseline. Old and new formats published together for one release to keep the trend. Added to the health indicators dashboard. Task to create. -- Extension lifecycle metrics to diagnose the wake problem: where the startup message between the page and the browser stops, plus a background state check when a failure is reported. Needs a privacy review and extension and app releases, data in 1-2 release cycles. Task to create. +- Permanent breakage metrics: a small fixed set, rates against DAU, added to the health indicators dashboard. Task to create. +- Extension lifecycle metrics: find where the startup message stops, to diagnose the wake failures. Needs privacy review and releases, data in 1-2 release cycles. Task to create. - Data check of the Nov/9 fixes: [Analyze attribution data after stage 3](https://app.asana.com/1/137249556945/task/1220159402040627?focus=true). -Decide later: +Open: -- Mitigations that do not need the cause: retry the init from the page when no answer arrives, keep-warm A/B for the background. -- "Tab not connected" has no fix. Failures right after a wake will not be solved without the new metrics. If they show nothing actionable, close the project and reset the target. +- No fix for macOS wake failures and tab not connected. If the new metrics show nothing actionable, close the project and reset the target. From 6419e2127d44dbeebbac9d77a777874664027f86 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 18:37:49 +0600 Subject: [PATCH 20/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- work/projects/cpm-project-summary-2026-11-03.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index e689c5e4..5ffeca72 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -21,7 +21,7 @@ Now (macOS 1.214, iOS 7.244, Nov/2): Fixes shipped: -- [P3](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [OS<26.6 limit](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true) – expected: the extension starts without delay after restarts (up to 32 s delay without it in lab tests). Flag on in 7.244+/1.214+. iOS 26.6+, transient: users with a failure 14.6% → 8.3% of DAU, "background missing" 8.2% → 0.3% (12x higher than older iOS before, now equal). Permanent: no improvement (0.29% → 0.48%). Early-adopter sample. +- [P3](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [OS<26.6 limit](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true) – improves extension startup after a restart from up to 32 s → 0.1 s on iOS/macOS 26.6+ (lab tests). iOS 26.6+: "background missing" failures 8.2% → 0.3% of DAU (users with any failure 14.6% → 8.3%). Effect on permanent not measurable yet (one day, 90k users). - macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. - [P1/P2/P4](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after wake and startup failures. Triggered 2,026 times on iOS, 89 on macOS (Oct/26). Permanent: no visible drop. - [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggered 476 times on iOS, 277 on macOS (Oct/26). Permanent: no visible drop. From 8f035c607da007dff0e7cd27b86847b566922790 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 18:42:54 +0600 Subject: [PATCH 21/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- work/projects/cpm-project-summary-2026-11-03.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 5ffeca72..fb1bbd56 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -22,7 +22,7 @@ Now (macOS 1.214, iOS 7.244, Nov/2): Fixes shipped: - [P3](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [OS<26.6 limit](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true) – improves extension startup after a restart from up to 32 s → 0.1 s on iOS/macOS 26.6+ (lab tests). iOS 26.6+: "background missing" failures 8.2% → 0.3% of DAU (users with any failure 14.6% → 8.3%). Effect on permanent not measurable yet (one day, 90k users). -- macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. +- macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. Stuck reports with the tab missing from the browser: 0.65-0.92% → 0.25-0.38% of reports (1.211 → 1.213). - [P1/P2/P4](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after wake and startup failures. Triggered 2,026 times on iOS, 89 on macOS (Oct/26). Permanent: no visible drop. - [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggered 476 times on iOS, 277 on macOS (Oct/26). Permanent: no visible drop. - [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – extension failing to start while tabs restore. Effect not measured. From bc25c120af352cb04bb4e0df1791522c9db91b49 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 18:48:00 +0600 Subject: [PATCH 22/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- work/projects/cpm-project-summary-2026-11-03.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index fb1bbd56..e59a0284 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -23,8 +23,8 @@ Fixes shipped: - [P3](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [OS<26.6 limit](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true) – improves extension startup after a restart from up to 32 s → 0.1 s on iOS/macOS 26.6+ (lab tests). iOS 26.6+: "background missing" failures 8.2% → 0.3% of DAU (users with any failure 14.6% → 8.3%). Effect on permanent not measurable yet (one day, 90k users). - macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. Stuck reports with the tab missing from the browser: 0.65-0.92% → 0.25-0.38% of reports (1.211 → 1.213). -- [P1/P2/P4](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after wake and startup failures. Triggered 2,026 times on iOS, 89 on macOS (Oct/26). Permanent: no visible drop. -- [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggered 476 times on iOS, 277 on macOS (Oct/26). Permanent: no visible drop. +- [P1/P2/P4](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after wake and startup failures. Triggers (Nov/2, daily users): wake recovery (P1) 19% iOS / 3% macOS, error 6 retry (P2) 1.7% iOS / 0.2% macOS. P4 only detects, no fix. +- [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggers for 6.6% of iOS and 4.2% of macOS daily users (Nov/2). - [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – extension failing to start while tabs restore. Effect not measured. Causes proved by reproduction: From 7816f7be970b88a1954daa7234e5c0324dcf3311 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 18:58:10 +0600 Subject: [PATCH 23/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- work/projects/cpm-project-summary-2026-11-03.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index e59a0284..1233d4b7 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -23,7 +23,8 @@ Fixes shipped: - [P3](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [OS<26.6 limit](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true) – improves extension startup after a restart from up to 32 s → 0.1 s on iOS/macOS 26.6+ (lab tests). iOS 26.6+: "background missing" failures 8.2% → 0.3% of DAU (users with any failure 14.6% → 8.3%). Effect on permanent not measurable yet (one day, 90k users). - macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. Stuck reports with the tab missing from the browser: 0.65-0.92% → 0.25-0.38% of reports (1.211 → 1.213). -- [P1/P2/P4](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after wake and startup failures. Triggers (Nov/2, daily users): wake recovery (P1) 19% iOS / 3% macOS, error 6 retry (P2) 1.7% iOS / 0.2% macOS. P4 only detects, no fix. +- [P1](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after a slow wake of the extension. Triggers for 19% of iOS and 3% of macOS daily users (Nov/2). +- [P2](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – retry after load error 6. Triggers for 1.7% of iOS and 0.2% of macOS daily users (Nov/2). - [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggers for 6.6% of iOS and 4.2% of macOS daily users (Nov/2). - [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – extension failing to start while tabs restore. Effect not measured. From a24c62e1496d6cdc5ef8dcf3bdfd3ac9e6f912fe Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 19:03:15 +0600 Subject: [PATCH 24/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- work/projects/cpm-project-summary-2026-11-03.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 1233d4b7..c13a9298 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -22,16 +22,16 @@ Now (macOS 1.214, iOS 7.244, Nov/2): Fixes shipped: - [P3](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [OS<26.6 limit](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true) – improves extension startup after a restart from up to 32 s → 0.1 s on iOS/macOS 26.6+ (lab tests). iOS 26.6+: "background missing" failures 8.2% → 0.3% of DAU (users with any failure 14.6% → 8.3%). Effect on permanent not measurable yet (one day, 90k users). -- macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. Stuck reports with the tab missing from the browser: 0.65-0.92% → 0.25-0.38% of reports (1.211 → 1.213). -- [P1](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after a slow wake of the extension. Triggers for 19% of iOS and 3% of macOS daily users (Nov/2). -- [P2](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – retry after load error 6. Triggers for 1.7% of iOS and 0.2% of macOS daily users (Nov/2). -- [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggers for 6.6% of iOS and 4.2% of macOS daily users (Nov/2). -- [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – extension failing to start while tabs restore. Effect not measured. +- macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. They caused under 1% of stuck reports, and about 3x fewer after the fix (macOS 1.211 → 1.213). +- [P1](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after a slow wake of the extension. +- [P2](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – retry after load error 6. +- [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. +- [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – extension failing to start while tabs restore after the app launches. Users with a restored tab stuck for 5+ minutes: iOS 0.6% of DAU (7.243), 0.1% (7.244); macOS 0.13% (1.213). -Causes proved by reproduction: +Reproduced in tests: - iOS: after "error 6" the background stays broken and every wake fails again ([harness](https://app.asana.com/1/137249556945/task/1219531810004071?focus=true)). Fix goes public Nov/9. -- macOS: a tab the extension is not connected to never gets an answer. 0.42% of DAU, no fix yet. +- macOS: a tab loses its connection to the extension and gets no answer until reloaded. 0.42% of DAU permanent, mostly single tab. Trigger unknown, no fix. Hypotheses rejected: From 9d533ecafbdc9d730c9fb660acbff8644035e852 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 19:08:19 +0600 Subject: [PATCH 25/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- work/projects/cpm-project-summary-2026-11-03.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index c13a9298..72810cdd 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -26,7 +26,7 @@ Fixes shipped: - [P1](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after a slow wake of the extension. - [P2](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – retry after load error 6. - [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. -- [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – extension failing to start while tabs restore after the app launches. Users with a restored tab stuck for 5+ minutes: iOS 0.6% of DAU (7.243), 0.1% (7.244); macOS 0.13% (1.213). +- [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – restored tabs wait up to 5 s for the extension to start before loading. % of DAU with a restored tab failing: transient iOS 6.6% → 0.4% (7.243 → 7.244), macOS 0.70% → 0.95% (1.213 → 1.214); permanent iOS 0.06% → 0.05% (no change), macOS 0.02% → 0.06% (5 users, too few to judge). Reproduced in tests: From 6fe9edf024e3944c1f5c2f9bacb6ee84540c8d9f Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 19:13:25 +0600 Subject: [PATCH 26/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- work/projects/cpm-project-summary-2026-11-03.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 72810cdd..9def435d 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -16,17 +16,18 @@ Goal: permanent stuck reports below 1% of DAU (0.2-0.5% = success). Permanent = Now (macOS 1.214, iOS 7.244, Nov/2): -- iOS: 0.44% of DAU (0.43% before). Inside the target. +- iOS: 0.44% of DAU (0.39% on 7.243, same day). Inside the target. - macOS: 1.89%. Above the target. Fixes shipped: - [P3](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [OS<26.6 limit](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true) – improves extension startup after a restart from up to 32 s → 0.1 s on iOS/macOS 26.6+ (lab tests). iOS 26.6+: "background missing" failures 8.2% → 0.3% of DAU (users with any failure 14.6% → 8.3%). Effect on permanent not measurable yet (one day, 90k users). - macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. They caused under 1% of stuck reports, and about 3x fewer after the fix (macOS 1.211 → 1.213). -- [P1](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after a slow wake of the extension. -- [P2](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – retry after load error 6. -- [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. -- [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – restored tabs wait up to 5 s for the extension to start before loading. % of DAU with a restored tab failing: transient iOS 6.6% → 0.4% (7.243 → 7.244), macOS 0.70% → 0.95% (1.213 → 1.214); permanent iOS 0.06% → 0.05% (no change), macOS 0.02% → 0.06% (5 users, too few to judge). +- [P1](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after a slow wake of the extension. Triggers for 19% of iOS and 3% of macOS daily users (Nov/2). +- [P2](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – retry after load error 6. Triggers for 1.7% of iOS and 0.2% of macOS daily users (Nov/2). +- [P4](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – reload the page when the extension starts late. Off by default, never triggered in production. Late starts detected: 6.8% of iOS and 0.57% of macOS daily users (Nov/2). +- [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggers for 6.6% of iOS and 4.2% of macOS daily users (Nov/2). +- [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – restored tabs wait up to 5 s for the extension to start before loading. Shipped in macOS 1.210 / iOS 7.240. % of DAU with a restored tab failing (7.243 / 1.213, Nov/2): transient iOS 6.6%, macOS 0.70%; permanent iOS 0.06%, macOS 0.02%. No data from before the fix. Reproduced in tests: From c90c201fe222e6324ec933736e1264078b2fc7d6 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 19:18:30 +0600 Subject: [PATCH 27/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- work/projects/cpm-project-summary-2026-11-03.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 9def435d..15acee7c 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -25,19 +25,20 @@ Fixes shipped: - macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. They caused under 1% of stuck reports, and about 3x fewer after the fix (macOS 1.211 → 1.213). - [P1](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after a slow wake of the extension. Triggers for 19% of iOS and 3% of macOS daily users (Nov/2). - [P2](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – retry after load error 6. Triggers for 1.7% of iOS and 0.2% of macOS daily users (Nov/2). -- [P4](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – reload the page when the extension starts late. Off by default, never triggered in production. Late starts detected: 6.8% of iOS and 0.57% of macOS daily users (Nov/2). - [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggers for 6.6% of iOS and 4.2% of macOS daily users (Nov/2). -- [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – restored tabs wait up to 5 s for the extension to start before loading. Shipped in macOS 1.210 / iOS 7.240. % of DAU with a restored tab failing (7.243 / 1.213, Nov/2): transient iOS 6.6%, macOS 0.70%; permanent iOS 0.06%, macOS 0.02%. No data from before the fix. +- [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – restored tabs wait up to 5 s for the extension to start before loading. Shipped in macOS 1.210 / iOS 7.240. Restored tabs stuck, % of DAU, same day (Oct/13), versions without → with the fix: iOS 1.32% → 0.52%, macOS 0.19% → 0.12%. Permanent now (Nov/2): iOS 0.06%, macOS 0.02%. Reproduced in tests: -- iOS: after "error 6" the background stays broken and every wake fails again ([harness](https://app.asana.com/1/137249556945/task/1219531810004071?focus=true)). Fix goes public Nov/9. -- macOS: a tab loses its connection to the extension and gets no answer until reloaded. 0.42% of DAU permanent, mostly single tab. Trigger unknown, no fix. +- [Error 6 loop](https://app.asana.com/1/137249556945/task/1219531810004071?focus=true) (reproduced in synthetic tests) – fix goes public Nov/9. +- [Outdated extension loaded first after an update](https://app.asana.com/1/137249556945/task/1220004977087625?focus=true) (reproduced in synthetic tests) – fix goes public Nov/9. +- [macOS: tab not connected to the extension](https://app.asana.com/1/137249556945/task/1219531810004071?focus=true) (reproduced in synthetic tests) – 0.42% of DAU permanent, no fix yet. Hypotheses rejected: - [Deallocation race](https://app.asana.com/1/137249556945/task/1217907325352233?focus=true) ([A/B](https://app.asana.com/1/137249556945/task/1218356681060819?focus=true), [flag](https://app.asana.com/1/137249556945/task/1219036128743441?focus=true)) – fix shipped behind a flag never turned on, no relation in the data. -- [Reload on the stuck signal](https://app.asana.com/1/137249556945/task/1218744813699968?focus=true) – 46% of macOS cases still got no answer. Late page reload never triggered. +- [Reload on the stuck signal](https://app.asana.com/1/137249556945/task/1218744813699968?focus=true) – 46% of macOS cases still got no answer. +- [P4](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – reload the page when the extension starts late. Off by default, never triggered in production. - Lost message after wake – 0 of ~1,500 wakes in tests ([Reproduce the issue](https://app.asana.com/1/137249556945/task/1217907325352231?focus=true)). - Hung background process – under 1% of failures. - Memory pressure, flag toggling, "failed load blocks forever" – not reproduced. From 5db04c7867e8f1db95a3642cfd01f5ec39de3d65 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 19:23:35 +0600 Subject: [PATCH 28/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- work/projects/cpm-project-summary-2026-11-03.md | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 15acee7c..3928d0ac 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -14,12 +14,12 @@ Internal metrics, keep out of public PRs. Task: [CPM: root-cause the stuck embed Goal: permanent stuck reports below 1% of DAU (0.2-0.5% = success). Permanent = no answer for 5 minutes, repeated or needed a reload. -Now (macOS 1.214, iOS 7.244, Nov/2): +### Now (macOS 1.214, iOS 7.244, Nov/2) - iOS: 0.44% of DAU (0.39% on 7.243, same day). Inside the target. - macOS: 1.89%. Above the target. -Fixes shipped: +### Fixes shipped - [P3](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [OS<26.6 limit](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true) – improves extension startup after a restart from up to 32 s → 0.1 s on iOS/macOS 26.6+ (lab tests). iOS 26.6+: "background missing" failures 8.2% → 0.3% of DAU (users with any failure 14.6% → 8.3%). Effect on permanent not measurable yet (one day, 90k users). - macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. They caused under 1% of stuck reports, and about 3x fewer after the fix (macOS 1.211 → 1.213). @@ -28,20 +28,11 @@ Fixes shipped: - [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggers for 6.6% of iOS and 4.2% of macOS daily users (Nov/2). - [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – restored tabs wait up to 5 s for the extension to start before loading. Shipped in macOS 1.210 / iOS 7.240. Restored tabs stuck, % of DAU, same day (Oct/13), versions without → with the fix: iOS 1.32% → 0.52%, macOS 0.19% → 0.12%. Permanent now (Nov/2): iOS 0.06%, macOS 0.02%. -Reproduced in tests: - -- [Error 6 loop](https://app.asana.com/1/137249556945/task/1219531810004071?focus=true) (reproduced in synthetic tests) – fix goes public Nov/9. -- [Outdated extension loaded first after an update](https://app.asana.com/1/137249556945/task/1220004977087625?focus=true) (reproduced in synthetic tests) – fix goes public Nov/9. -- [macOS: tab not connected to the extension](https://app.asana.com/1/137249556945/task/1219531810004071?focus=true) (reproduced in synthetic tests) – 0.42% of DAU permanent, no fix yet. - -Hypotheses rejected: +### Hypotheses rejected - [Deallocation race](https://app.asana.com/1/137249556945/task/1217907325352233?focus=true) ([A/B](https://app.asana.com/1/137249556945/task/1218356681060819?focus=true), [flag](https://app.asana.com/1/137249556945/task/1219036128743441?focus=true)) – fix shipped behind a flag never turned on, no relation in the data. - [Reload on the stuck signal](https://app.asana.com/1/137249556945/task/1218744813699968?focus=true) – 46% of macOS cases still got no answer. - [P4](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – reload the page when the extension starts late. Off by default, never triggered in production. -- Lost message after wake – 0 of ~1,500 wakes in tests ([Reproduce the issue](https://app.asana.com/1/137249556945/task/1217907325352231?focus=true)). -- Hung background process – under 1% of failures. -- Memory pressure, flag toggling, "failed load blocks forever" – not reproduced. ## Fixes going public next week (Nov/9) From 070c52600ff335e79bb400faa9f928d2cb3f073c Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 19:28:40 +0600 Subject: [PATCH 29/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- .../cpm-project-summary-2026-11-03.md | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 3928d0ac..7366b496 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -40,15 +40,24 @@ Goal: permanent stuck reports below 1% of DAU (0.2-0.5% = success). Permanent = - [Error 6 restart](https://app.asana.com/1/137249556945/task/1219939142983214?focus=true) – restart the extension when a load error leaves it broken. Up to 0.08% of DAU permanent on iOS, negligible on macOS. - Together: macOS 1.89% → about 1.6%, iOS 0.44% → about 0.3-0.35%. Estimates, upper bounds. -## Data now (% of DAU, Nov/2) +## Data now (% of DAU) -One day, early adopters, macOS about 9k DAU: a rough picture. +Permanent stuck, daily trend (macOS 1.213 / iOS 7.243, Oct/26 → Nov/2, then 1.214 / 7.244 on Nov/2): -- macOS: permanent 1.89% (browser-wide 1.22%, one tab 0.68%). - - Failures right after a wake 0.68%, tab not connected 0.42%, other 0.30%, right after an update 0.26%, right after a load 0.19%. -- iOS: permanent 0.44% (browser-wide 0.26%, one tab 0.18%). - - Right after a load 0.18%, error 6 0.08%, right after a wake 0.06%, right after an update 0.05%, other 0.04%. -- No fix in flight for macOS wake failures (35% of permanent) and tab not connected (22%). +- macOS: 2.07 → 3.07 (Oct/27 peak) → 1.90; 1.214: 1.89. +- iOS: 0.30 → 0.42 (Oct/27 peak) → 0.39; 7.244: 0.44. + +By group. Permanent now (1.214 / 7.244), then trend of all failures (permanent and recovered) Oct/26 → Nov/2 on 1.213 / 7.243 → 1.214 / 7.244: + +- Failure right after the system wakes the extension: macOS permanent 0.68%, failures 8.80 → 8.50 → 5.89. iOS permanent 0.06%, failures 1.56 → 2.34 → 1.74. +- Tab not connected: macOS permanent 0.42%, failures 1.18 → 0.90 → 1.26. Not seen on iOS. +- Right after an extension update: macOS permanent 0.26%, failures 5.40 → 0.92 → 2.94. iOS permanent 0.05%, failures 0.37 → 0.13 → 0.34. +- Right after a load: macOS permanent 0.19%, failures 2.73 → 3.41 → 1.73. iOS permanent 0.18%, failures 1.86 → 2.21 → 2.54. +- Error 6: iOS permanent 0.08%, failures 0.50 → 1.32 → 0.67. macOS about 0. +- Background missing: macOS permanent 0.03%, failures 1.06 → 1.13 → 0.20. iOS permanent 0.01%, failures 0.63 → 6.90 → 0.27. +- Other: macOS permanent 0.30%, failures 4.75 → 4.17 → 2.92. iOS permanent 0.04%, failures 1.95 → 1.10 → 2.45. + +1.214 / 7.244 is one day of early adopters (macOS about 9k DAU, iOS 110k), a rough picture. ## Plan From 885c91c216dde2a4513fc46c512f6c5e904cd407 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 19:43:54 +0600 Subject: [PATCH 30/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- .../cpm-project-summary-2026-11-03.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 7366b496..0ab15547 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -22,7 +22,7 @@ Goal: permanent stuck reports below 1% of DAU (0.2-0.5% = success). Permanent = ### Fixes shipped - [P3](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [OS<26.6 limit](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true) – improves extension startup after a restart from up to 32 s → 0.1 s on iOS/macOS 26.6+ (lab tests). iOS 26.6+: "background missing" failures 8.2% → 0.3% of DAU (users with any failure 14.6% → 8.3%). Effect on permanent not measurable yet (one day, 90k users). -- macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. They caused under 1% of stuck reports, and about 3x fewer after the fix (macOS 1.211 → 1.213). +- macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. They caused under 1% of stuck reports, about 3x fewer after the fix (macOS 1.211 → 1.213). - [P1](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after a slow wake of the extension. Triggers for 19% of iOS and 3% of macOS daily users (Nov/2). - [P2](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – retry after load error 6. Triggers for 1.7% of iOS and 0.2% of macOS daily users (Nov/2). - [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggers for 6.6% of iOS and 4.2% of macOS daily users (Nov/2). @@ -42,20 +42,20 @@ Goal: permanent stuck reports below 1% of DAU (0.2-0.5% = success). Permanent = ## Data now (% of DAU) -Permanent stuck, daily trend (macOS 1.213 / iOS 7.243, Oct/26 → Nov/2, then 1.214 / 7.244 on Nov/2): +Permanent stuck, daily trend (macOS 1.213 / iOS 7.243: Oct/26 → Nov/2; 1.214 / 7.244: Nov/2): -- macOS: 2.07 → 3.07 (Oct/27 peak) → 1.90; 1.214: 1.89. -- iOS: 0.30 → 0.42 (Oct/27 peak) → 0.39; 7.244: 0.44. +- macOS: 2.07% → 3.07% (Oct/27 peak) → 1.90%; 1.214: 1.89%. +- iOS: 0.30% → 0.42% (Oct/27 peak) → 0.39%; 7.244: 0.44%. -By group. Permanent now (1.214 / 7.244), then trend of all failures (permanent and recovered) Oct/26 → Nov/2 on 1.213 / 7.243 → 1.214 / 7.244: +By group: permanent stuck now (1.214 / 7.244) and trend of all failures, permanent and recovered (Oct/26 → Nov/2 on 1.213 / 7.243 → Nov/2 on 1.214 / 7.244): -- Failure right after the system wakes the extension: macOS permanent 0.68%, failures 8.80 → 8.50 → 5.89. iOS permanent 0.06%, failures 1.56 → 2.34 → 1.74. -- Tab not connected: macOS permanent 0.42%, failures 1.18 → 0.90 → 1.26. Not seen on iOS. -- Right after an extension update: macOS permanent 0.26%, failures 5.40 → 0.92 → 2.94. iOS permanent 0.05%, failures 0.37 → 0.13 → 0.34. -- Right after a load: macOS permanent 0.19%, failures 2.73 → 3.41 → 1.73. iOS permanent 0.18%, failures 1.86 → 2.21 → 2.54. -- Error 6: iOS permanent 0.08%, failures 0.50 → 1.32 → 0.67. macOS about 0. -- Background missing: macOS permanent 0.03%, failures 1.06 → 1.13 → 0.20. iOS permanent 0.01%, failures 0.63 → 6.90 → 0.27. -- Other: macOS permanent 0.30%, failures 4.75 → 4.17 → 2.92. iOS permanent 0.04%, failures 1.95 → 1.10 → 2.45. +- Failure right after the system wakes the extension: macOS permanent 0.68%, failures 8.80% → 8.50% → 5.89%. iOS permanent 0.06%, failures 1.56% → 2.34% → 1.74%. +- Tab not connected: macOS permanent 0.42%, failures 1.18% → 0.90% → 1.26%. Not seen on iOS. +- Right after an extension update: macOS permanent 0.26%, failures 5.40% → 0.92% → 2.94%. iOS permanent 0.05%, failures 0.37% → 0.13% → 0.34%. +- Right after a load: macOS permanent 0.19%, failures 2.73% → 3.41% → 1.73%. iOS permanent 0.18%, failures 1.86% → 2.21% → 2.54%. +- Error 6: iOS permanent 0.08%, failures 0.50% → 1.32% → 0.67%. macOS about 0. +- Background missing: macOS permanent 0.03%, failures 1.06% → 1.13% → **0.20%**. iOS permanent 0.01%, failures 0.63% → 6.90% → **0.27%**. +- Other: macOS permanent 0.30%, failures 4.75% → 4.17% → 2.92%. iOS permanent 0.04%, failures 1.95% → 1.10% → 2.45%. 1.214 / 7.244 is one day of early adopters (macOS about 9k DAU, iOS 110k), a rough picture. From e6d6f412e01d97ca73190e00b00a31ee85af77d8 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 19:54:04 +0600 Subject: [PATCH 31/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- work/projects/cpm-project-summary-2026-11-03.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 0ab15547..68448afc 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -26,7 +26,7 @@ Goal: permanent stuck reports below 1% of DAU (0.2-0.5% = success). Permanent = - [P1](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after a slow wake of the extension. Triggers for 19% of iOS and 3% of macOS daily users (Nov/2). - [P2](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – retry after load error 6. Triggers for 1.7% of iOS and 0.2% of macOS daily users (Nov/2). - [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggers for 6.6% of iOS and 4.2% of macOS daily users (Nov/2). -- [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – restored tabs wait up to 5 s for the extension to start before loading. Shipped in macOS 1.210 / iOS 7.240. Restored tabs stuck, % of DAU, same day (Oct/13), versions without → with the fix: iOS 1.32% → 0.52%, macOS 0.19% → 0.12%. Permanent now (Nov/2): iOS 0.06%, macOS 0.02%. +- [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – restored tabs wait up to 5 s for the extension to start before loading. Stuck restored tabs: iOS 1.32% → 0.52% → 0.06% of DAU, macOS 0.19% → 0.12% → 0.02% (before fix → with fix → now). ### Hypotheses rejected From cbb8b57ba39b14f0d46958af0618080001afc60c Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 19:59:10 +0600 Subject: [PATCH 32/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- .../cpm-project-summary-2026-11-03.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 68448afc..c3843455 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -12,7 +12,7 @@ Internal metrics, keep out of public PRs. Task: [CPM: root-cause the stuck embed ## What the project has achieved -Goal: permanent stuck reports below 1% of DAU (0.2-0.5% = success). Permanent = no answer for 5 minutes, repeated or needed a reload. +Goal: permanent failures below 1% of DAU (0.2-0.5% = success). Permanent = no answer for 5 minutes, repeated or needed a reload. ### Now (macOS 1.214, iOS 7.244, Nov/2) @@ -22,11 +22,11 @@ Goal: permanent stuck reports below 1% of DAU (0.2-0.5% = success). Permanent = ### Fixes shipped - [P3](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [OS<26.6 limit](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true) – improves extension startup after a restart from up to 32 s → 0.1 s on iOS/macOS 26.6+ (lab tests). iOS 26.6+: "background missing" failures 8.2% → 0.3% of DAU (users with any failure 14.6% → 8.3%). Effect on permanent not measurable yet (one day, 90k users). -- macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. They caused under 1% of stuck reports, about 3x fewer after the fix (macOS 1.211 → 1.213). +- macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. They caused under 1% of permanent failures, about 3x fewer after the fix (macOS 1.211 → 1.213). - [P1](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after a slow wake of the extension. Triggers for 19% of iOS and 3% of macOS daily users (Nov/2). - [P2](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – retry after load error 6. Triggers for 1.7% of iOS and 0.2% of macOS daily users (Nov/2). - [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggers for 6.6% of iOS and 4.2% of macOS daily users (Nov/2). -- [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – restored tabs wait up to 5 s for the extension to start before loading. Stuck restored tabs: iOS 1.32% → 0.52% → 0.06% of DAU, macOS 0.19% → 0.12% → 0.02% (before fix → with fix → now). +- [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – restored tabs wait up to 5 s for the extension to start. Init failures on restore, before → with fix: iOS 21.0% → 8.4% of DAU (Oct/8), 19.7% → 8.8% (Oct/13); macOS no clear change, 0.84% → 1.28% (Oct/8), 1.03% → 0.74% (Oct/13). ### Hypotheses rejected @@ -42,20 +42,20 @@ Goal: permanent stuck reports below 1% of DAU (0.2-0.5% = success). Permanent = ## Data now (% of DAU) -Permanent stuck, daily trend (macOS 1.213 / iOS 7.243: Oct/26 → Nov/2; 1.214 / 7.244: Nov/2): +Permanent failures, daily trend (macOS 1.213 / iOS 7.243: Oct/26 → Nov/2; 1.214 / 7.244: Nov/2): - macOS: 2.07% → 3.07% (Oct/27 peak) → 1.90%; 1.214: 1.89%. - iOS: 0.30% → 0.42% (Oct/27 peak) → 0.39%; 7.244: 0.44%. -By group: permanent stuck now (1.214 / 7.244) and trend of all failures, permanent and recovered (Oct/26 → Nov/2 on 1.213 / 7.243 → Nov/2 on 1.214 / 7.244): +By group: permanent failures now (1.214 / 7.244, % of DAU and share of all permanent in brackets) and trend of all failures, permanent and recovered (Oct/26 → Nov/2 on 1.213 / 7.243 → Nov/2 on 1.214 / 7.244): -- Failure right after the system wakes the extension: macOS permanent 0.68%, failures 8.80% → 8.50% → 5.89%. iOS permanent 0.06%, failures 1.56% → 2.34% → 1.74%. -- Tab not connected: macOS permanent 0.42%, failures 1.18% → 0.90% → 1.26%. Not seen on iOS. -- Right after an extension update: macOS permanent 0.26%, failures 5.40% → 0.92% → 2.94%. iOS permanent 0.05%, failures 0.37% → 0.13% → 0.34%. -- Right after a load: macOS permanent 0.19%, failures 2.73% → 3.41% → 1.73%. iOS permanent 0.18%, failures 1.86% → 2.21% → 2.54%. -- Error 6: iOS permanent 0.08%, failures 0.50% → 1.32% → 0.67%. macOS about 0. -- Background missing: macOS permanent 0.03%, failures 1.06% → 1.13% → **0.20%**. iOS permanent 0.01%, failures 0.63% → 6.90% → **0.27%**. -- Other: macOS permanent 0.30%, failures 4.75% → 4.17% → 2.92%. iOS permanent 0.04%, failures 1.95% → 1.10% → 2.45%. +- Failure right after the system wakes the extension: macOS permanent 0.68% (36% of permanent), failures 8.80% → 8.50% → 5.89%. iOS permanent 0.06% (15%), failures 1.56% → 2.34% → 1.74%. +- Tab not connected: macOS permanent 0.42% (22%), failures 1.18% → 0.90% → 1.26%. Not seen on iOS. +- Right after an extension update: macOS permanent 0.26% (14%), failures 5.40% → 0.92% → 2.94%. iOS permanent 0.05% (12%), failures 0.37% → 0.13% → 0.34%. +- Right after a load: macOS permanent 0.19% (10%), failures 2.73% → 3.41% → 1.73%. iOS permanent 0.18% (42%), failures 1.86% → 2.21% → 2.54%. +- Error 6: iOS permanent 0.08% (18%), failures 0.50% → 1.32% → 0.67%. macOS about 0. +- Background missing: macOS permanent 0.03% (2%), failures 1.06% → 1.13% → **0.20%**. iOS permanent 0.01% (3%), failures 0.63% → 6.90% → **0.27%**. +- Other: macOS permanent 0.30% (16%), failures 4.75% → 4.17% → 2.92%. iOS permanent 0.04% (10%), failures 1.95% → 1.10% → 2.45%. 1.214 / 7.244 is one day of early adopters (macOS about 9k DAU, iOS 110k), a rough picture. From 6bea6a65b683ba9a49e48a33244b7b1e9eb44fab Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 20:04:15 +0600 Subject: [PATCH 33/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- .../cpm-project-summary-2026-11-03.md | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index c3843455..473d0caf 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -26,7 +26,7 @@ Goal: permanent failures below 1% of DAU (0.2-0.5% = success). Permanent = no an - [P1](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – recovery after a slow wake of the extension. Triggers for 19% of iOS and 3% of macOS daily users (Nov/2). - [P2](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – retry after load error 6. Triggers for 1.7% of iOS and 0.2% of macOS daily users (Nov/2). - [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggers for 6.6% of iOS and 4.2% of macOS daily users (Nov/2). -- [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – restored tabs wait up to 5 s for the extension to start. Init failures on restore, before → with fix: iOS 21.0% → 8.4% of DAU (Oct/8), 19.7% → 8.8% (Oct/13); macOS no clear change, 0.84% → 1.28% (Oct/8), 1.03% → 0.74% (Oct/13). +- [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – restored tabs wait up to 5 s for the extension to start. Init failures on restore: iOS ~20% → ~8.5% of DAU, macOS no clear change. ### Hypotheses rejected @@ -47,15 +47,23 @@ Permanent failures, daily trend (macOS 1.213 / iOS 7.243: Oct/26 → Nov/2; 1.21 - macOS: 2.07% → 3.07% (Oct/27 peak) → 1.90%; 1.214: 1.89%. - iOS: 0.30% → 0.42% (Oct/27 peak) → 0.39%; 7.244: 0.44%. -By group: permanent failures now (1.214 / 7.244, % of DAU and share of all permanent in brackets) and trend of all failures, permanent and recovered (Oct/26 → Nov/2 on 1.213 / 7.243 → Nov/2 on 1.214 / 7.244): +By group, 1.214 / 7.244 on Nov/2. Values are % of DAU. The previous version is 1.213 / 7.243, failures on Oct/26 → Nov/2. -- Failure right after the system wakes the extension: macOS permanent 0.68% (36% of permanent), failures 8.80% → 8.50% → 5.89%. iOS permanent 0.06% (15%), failures 1.56% → 2.34% → 1.74%. -- Tab not connected: macOS permanent 0.42% (22%), failures 1.18% → 0.90% → 1.26%. Not seen on iOS. -- Right after an extension update: macOS permanent 0.26% (14%), failures 5.40% → 0.92% → 2.94%. iOS permanent 0.05% (12%), failures 0.37% → 0.13% → 0.34%. -- Right after a load: macOS permanent 0.19% (10%), failures 2.73% → 3.41% → 1.73%. iOS permanent 0.18% (42%), failures 1.86% → 2.21% → 2.54%. -- Error 6: iOS permanent 0.08% (18%), failures 0.50% → 1.32% → 0.67%. macOS about 0. -- Background missing: macOS permanent 0.03% (2%), failures 1.06% → 1.13% → **0.20%**. iOS permanent 0.01% (3%), failures 0.63% → 6.90% → **0.27%**. -- Other: macOS permanent 0.30% (16%), failures 4.75% → 4.17% → 2.92%. iOS permanent 0.04% (10%), failures 1.95% → 1.10% → 2.45%. +| Group | Platform | Failures | Share of all failures | Permanent | Share of all permanent | Failures, previous version | +|---|---|---|---|---|---|---| +| Init on wake | macOS | 5.89% | 39% | 0.68% | 36% | 8.80% → 8.50% | +| Init on wake | iOS | 1.74% | 22% | 0.06% | 15% | 1.56% → 2.34% | +| Tab not connected | macOS | 1.26% | 8% | 0.42% | 22% | 1.18% → 0.90% | +| Init after extension update | macOS | 2.94% | 20% | 0.26% | 14% | 5.40% → 0.92% | +| Init after extension update | iOS | 0.34% | 4% | 0.05% | 12% | 0.37% → 0.13% | +| Init after load | macOS | 1.73% | 11% | 0.19% | 10% | 2.73% → 3.41% | +| Init after load | iOS | 2.54% | 32% | 0.18% | 42% | 1.86% → 2.21% | +| Error 6 | macOS | 0.11% | 1% | 0.01% | 1% | 0.14% → 0.17% | +| Error 6 | iOS | 0.67% | 8% | 0.08% | 18% | 0.50% → 1.32% | +| Background missing | macOS | **0.20%** | 1% | 0.03% | 2% | 1.06% → 1.13% | +| Background missing | iOS | **0.27%** | 3% | 0.01% | 3% | 0.63% → 6.90% | +| Other | macOS | 2.92% | 19% | 0.30% | 16% | 4.75% → 4.17% | +| Other | iOS | 2.45% | 31% | 0.04% | 10% | 1.95% → 1.10% | 1.214 / 7.244 is one day of early adopters (macOS about 9k DAU, iOS 110k), a rough picture. From c3125f01f1dae47fd0a0e7af66dc38c4d94e29dd Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 20:09:20 +0600 Subject: [PATCH 34/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- .../cpm-project-summary-2026-11-03.md | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 473d0caf..3006d92f 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -47,23 +47,23 @@ Permanent failures, daily trend (macOS 1.213 / iOS 7.243: Oct/26 → Nov/2; 1.21 - macOS: 2.07% → 3.07% (Oct/27 peak) → 1.90%; 1.214: 1.89%. - iOS: 0.30% → 0.42% (Oct/27 peak) → 0.39%; 7.244: 0.44%. -By group, 1.214 / 7.244 on Nov/2. Values are % of DAU. The previous version is 1.213 / 7.243, failures on Oct/26 → Nov/2. +By group, % of DAU. Trend is failures: previous version (1.213 / 7.243) on Oct/26 → previous version on Nov/2 → new version (1.214 / 7.244) on Nov/2. Shares and permanent are for the new version. -| Group | Platform | Failures | Share of all failures | Permanent | Share of all permanent | Failures, previous version | -|---|---|---|---|---|---|---| -| Init on wake | macOS | 5.89% | 39% | 0.68% | 36% | 8.80% → 8.50% | -| Init on wake | iOS | 1.74% | 22% | 0.06% | 15% | 1.56% → 2.34% | -| Tab not connected | macOS | 1.26% | 8% | 0.42% | 22% | 1.18% → 0.90% | -| Init after extension update | macOS | 2.94% | 20% | 0.26% | 14% | 5.40% → 0.92% | -| Init after extension update | iOS | 0.34% | 4% | 0.05% | 12% | 0.37% → 0.13% | -| Init after load | macOS | 1.73% | 11% | 0.19% | 10% | 2.73% → 3.41% | -| Init after load | iOS | 2.54% | 32% | 0.18% | 42% | 1.86% → 2.21% | -| Error 6 | macOS | 0.11% | 1% | 0.01% | 1% | 0.14% → 0.17% | -| Error 6 | iOS | 0.67% | 8% | 0.08% | 18% | 0.50% → 1.32% | -| Background missing | macOS | **0.20%** | 1% | 0.03% | 2% | 1.06% → 1.13% | -| Background missing | iOS | **0.27%** | 3% | 0.01% | 3% | 0.63% → 6.90% | -| Other | macOS | 2.92% | 19% | 0.30% | 16% | 4.75% → 4.17% | -| Other | iOS | 2.45% | 31% | 0.04% | 10% | 1.95% → 1.10% | +| Group | Platform | Trend | % of all failures | Permanent | % of all permanent | +|---|---|---|---|---|---| +| Init on wake | macOS | 8.80% → 8.50% → 5.89% | 39% | 0.68% | 36% | +| Init on wake | iOS | 1.56% → 2.34% → 1.74% | 22% | 0.06% | 15% | +| Tab not connected | macOS | 1.18% → 0.90% → 1.26% | 8% | 0.42% | 22% | +| Init after extension update | macOS | 5.40% → 0.92% → 2.94% | 20% | 0.26% | 14% | +| Init after extension update | iOS | 0.37% → 0.13% → 0.34% | 4% | 0.05% | 12% | +| Init after load | macOS | 2.73% → 3.41% → 1.73% | 11% | 0.19% | 10% | +| Init after load | iOS | 1.86% → 2.21% → 2.54% | 32% | 0.18% | 42% | +| Error 6 | macOS | 0.14% → 0.17% → 0.11% | 1% | 0.01% | 1% | +| Error 6 | iOS | 0.50% → 1.32% → 0.67% | 8% | 0.08% | 18% | +| Background missing | macOS | 1.06% → 1.13% → **0.20%** | 1% | 0.03% | 2% | +| Background missing | iOS | 0.63% → 6.90% → **0.27%** | 3% | 0.01% | 3% | +| Other | macOS | 4.75% → 4.17% → 2.92% | 19% | 0.30% | 16% | +| Other | iOS | 1.95% → 1.10% → 2.45% | 31% | 0.04% | 10% | 1.214 / 7.244 is one day of early adopters (macOS about 9k DAU, iOS 110k), a rough picture. From a83e8e66e671f47d8ffe9e94b6f883abcae29d84 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 20:14:25 +0600 Subject: [PATCH 35/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- .../cpm-project-summary-2026-11-03.md | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 3006d92f..16f1bd87 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -47,23 +47,23 @@ Permanent failures, daily trend (macOS 1.213 / iOS 7.243: Oct/26 → Nov/2; 1.21 - macOS: 2.07% → 3.07% (Oct/27 peak) → 1.90%; 1.214: 1.89%. - iOS: 0.30% → 0.42% (Oct/27 peak) → 0.39%; 7.244: 0.44%. -By group, % of DAU. Trend is failures: previous version (1.213 / 7.243) on Oct/26 → previous version on Nov/2 → new version (1.214 / 7.244) on Nov/2. Shares and permanent are for the new version. +By group on the new version (1.214 / 7.244, Nov/2), % of DAU. Trend is failures from the first day of the previous version (1.213 / 7.243, Oct/26) to the new version. -| Group | Platform | Trend | % of all failures | Permanent | % of all permanent | -|---|---|---|---|---|---| -| Init on wake | macOS | 8.80% → 8.50% → 5.89% | 39% | 0.68% | 36% | -| Init on wake | iOS | 1.56% → 2.34% → 1.74% | 22% | 0.06% | 15% | -| Tab not connected | macOS | 1.18% → 0.90% → 1.26% | 8% | 0.42% | 22% | -| Init after extension update | macOS | 5.40% → 0.92% → 2.94% | 20% | 0.26% | 14% | -| Init after extension update | iOS | 0.37% → 0.13% → 0.34% | 4% | 0.05% | 12% | -| Init after load | macOS | 2.73% → 3.41% → 1.73% | 11% | 0.19% | 10% | -| Init after load | iOS | 1.86% → 2.21% → 2.54% | 32% | 0.18% | 42% | -| Error 6 | macOS | 0.14% → 0.17% → 0.11% | 1% | 0.01% | 1% | -| Error 6 | iOS | 0.50% → 1.32% → 0.67% | 8% | 0.08% | 18% | -| Background missing | macOS | 1.06% → 1.13% → **0.20%** | 1% | 0.03% | 2% | -| Background missing | iOS | 0.63% → 6.90% → **0.27%** | 3% | 0.01% | 3% | -| Other | macOS | 4.75% → 4.17% → 2.92% | 19% | 0.30% | 16% | -| Other | iOS | 1.95% → 1.10% → 2.45% | 31% | 0.04% | 10% | +| Group | Platform | Failures, % of DAU | % of all failures | Permanent, % of DAU | % of all permanent | Failures trend, % of DAU | +| --------------------------- | -------- | --------- | ----------------- | --------- | ------------------ | ----------------- | +| Init on wake | macOS | 5.89% | 39% | 0.68% | 36% | 8.80% → 5.89% | +| Init on wake | iOS | 1.74% | 22% | 0.06% | 15% | 1.56% → 1.74% | +| Tab not connected | macOS | 1.26% | 8% | 0.42% | 22% | 1.18% → 1.26% | +| Init after extension update | macOS | 2.94% | 20% | 0.26% | 14% | 5.40% → 2.94% | +| Init after extension update | iOS | 0.34% | 4% | 0.05% | 12% | 0.37% → 0.34% | +| Init after load | macOS | 1.73% | 11% | 0.19% | 10% | 2.73% → 1.73% | +| Init after load | iOS | 2.54% | 32% | 0.18% | 42% | 1.86% → 2.54% | +| Error 6 | macOS | 0.11% | 1% | 0.01% | 1% | 0.14% → 0.11% | +| Error 6 | iOS | 0.67% | 8% | 0.08% | 18% | 0.50% → 0.67% | +| Background missing | macOS | **0.20%** | 1% | 0.03% | 2% | 1.06% → **0.20%** | +| Background missing | iOS | **0.27%** | 3% | 0.01% | 3% | 0.63% → **0.27%** | +| Other | macOS | 2.92% | 19% | 0.30% | 16% | 4.75% → 2.92% | +| Other | iOS | 2.45% | 31% | 0.04% | 10% | 1.95% → 2.45% | 1.214 / 7.244 is one day of early adopters (macOS about 9k DAU, iOS 110k), a rough picture. From 7f92af3f6010a669d7494178130086d8ec7a1492 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 20:19:31 +0600 Subject: [PATCH 36/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- .../cpm-project-summary-2026-11-03.md | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 16f1bd87..b81e38ac 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -10,16 +10,16 @@ status: draft Internal metrics, keep out of public PRs. Task: [CPM: root-cause the stuck embedded extension messaging](https://app.asana.com/1/137249556945/project/72649045549333/task/1216761517055116?focus=true). Details: [[cpm-post-release-analysis-2026-10-27]], [[cpm-status-2026-10-15]]. -## What the project has achieved +**What the project has achieved so far** Goal: permanent failures below 1% of DAU (0.2-0.5% = success). Permanent = no answer for 5 minutes, repeated or needed a reload. -### Now (macOS 1.214, iOS 7.244, Nov/2) +**Now (macOS 1.214, iOS 7.244, Nov/2)** -- iOS: 0.44% of DAU (0.39% on 7.243, same day). Inside the target. -- macOS: 1.89%. Above the target. +- iOS: 0.44% of DAU (0.39% on 7.243, same day). Inside the target <<1%. +- macOS: 1.89%. Above the target <<1%. -### Fixes shipped +**Fixes shipped** - [P3](https://app.asana.com/1/137249556945/task/1219643764290826?focus=true), [OS<26.6 limit](https://app.asana.com/1/137249556945/task/1220003778559448?focus=true) – improves extension startup after a restart from up to 32 s → 0.1 s on iOS/macOS 26.6+ (lab tests). iOS 26.6+: "background missing" failures 8.2% → 0.3% of DAU (users with any failure 14.6% → 8.3%). Effect on permanent not measurable yet (one day, 90k users). - macOS: [pinned tab lost on window close](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true), [tab merging](https://app.asana.com/1/137249556945/task/1218356681060823?focus=true) – real bugs fixed, UI tests added. They caused under 1% of permanent failures, about 3x fewer after the fix (macOS 1.211 → 1.213). @@ -28,19 +28,19 @@ Goal: permanent failures below 1% of DAU (0.2-0.5% = success). Permanent = no an - [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggers for 6.6% of iOS and 4.2% of macOS daily users (Nov/2). - [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – restored tabs wait up to 5 s for the extension to start. Init failures on restore: iOS ~20% → ~8.5% of DAU, macOS no clear change. -### Hypotheses rejected +**Hypotheses rejected** - [Deallocation race](https://app.asana.com/1/137249556945/task/1217907325352233?focus=true) ([A/B](https://app.asana.com/1/137249556945/task/1218356681060819?focus=true), [flag](https://app.asana.com/1/137249556945/task/1219036128743441?focus=true)) – fix shipped behind a flag never turned on, no relation in the data. - [Reload on the stuck signal](https://app.asana.com/1/137249556945/task/1218744813699968?focus=true) – 46% of macOS cases still got no answer. - [P4](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – reload the page when the extension starts late. Off by default, never triggered in production. -## Fixes going public next week (Nov/9) +**Fixes going public next week (Nov/9)** - [Upgrade before loading](https://app.asana.com/1/137249556945/task/1220004977087625?focus=true) – load the new extension version first on launch. Removes part of the permanent failures right after an update (macOS 0.26% of DAU, iOS 0.05%). - [Error 6 restart](https://app.asana.com/1/137249556945/task/1219939142983214?focus=true) – restart the extension when a load error leaves it broken. Up to 0.08% of DAU permanent on iOS, negligible on macOS. - Together: macOS 1.89% → about 1.6%, iOS 0.44% → about 0.3-0.35%. Estimates, upper bounds. -## Data now (% of DAU) +**Data now (% of DAU)** Permanent failures, daily trend (macOS 1.213 / iOS 7.243: Oct/26 → Nov/2; 1.214 / 7.244: Nov/2): @@ -49,25 +49,25 @@ Permanent failures, daily trend (macOS 1.213 / iOS 7.243: Oct/26 → Nov/2; 1.21 By group on the new version (1.214 / 7.244, Nov/2), % of DAU. Trend is failures from the first day of the previous version (1.213 / 7.243, Oct/26) to the new version. -| Group | Platform | Failures, % of DAU | % of all failures | Permanent, % of DAU | % of all permanent | Failures trend, % of DAU | -| --------------------------- | -------- | --------- | ----------------- | --------- | ------------------ | ----------------- | -| Init on wake | macOS | 5.89% | 39% | 0.68% | 36% | 8.80% → 5.89% | -| Init on wake | iOS | 1.74% | 22% | 0.06% | 15% | 1.56% → 1.74% | -| Tab not connected | macOS | 1.26% | 8% | 0.42% | 22% | 1.18% → 1.26% | -| Init after extension update | macOS | 2.94% | 20% | 0.26% | 14% | 5.40% → 2.94% | -| Init after extension update | iOS | 0.34% | 4% | 0.05% | 12% | 0.37% → 0.34% | -| Init after load | macOS | 1.73% | 11% | 0.19% | 10% | 2.73% → 1.73% | -| Init after load | iOS | 2.54% | 32% | 0.18% | 42% | 1.86% → 2.54% | -| Error 6 | macOS | 0.11% | 1% | 0.01% | 1% | 0.14% → 0.11% | -| Error 6 | iOS | 0.67% | 8% | 0.08% | 18% | 0.50% → 0.67% | -| Background missing | macOS | **0.20%** | 1% | 0.03% | 2% | 1.06% → **0.20%** | -| Background missing | iOS | **0.27%** | 3% | 0.01% | 3% | 0.63% → **0.27%** | -| Other | macOS | 2.92% | 19% | 0.30% | 16% | 4.75% → 2.92% | -| Other | iOS | 2.45% | 31% | 0.04% | 10% | 1.95% → 2.45% | +| Group | Platform | Failures, % of DAU | % of all failures | Permanent, % of DAU | % of all permanent | Failures trend, % of DAU | +| --------------------------- | -------- | ------------------ | ----------------- | ------------------- | ------------------ | ------------------------ | +| Init on wake | macOS | 5.89% | 39% | 0.68% | 36% | 8.80% → 5.89% | +| Init on wake | iOS | 1.74% | 22% | 0.06% | 15% | 1.56% → 1.74% | +| Tab not connected | macOS | 1.26% | 8% | 0.42% | 22% | 1.18% → 1.26% | +| Init after extension update | macOS | 2.94% | 20% | 0.26% | 14% | 5.40% → 2.94% | +| Init after extension update | iOS | 0.34% | 4% | 0.05% | 12% | 0.37% → 0.34% | +| Init after load | macOS | 1.73% | 11% | 0.19% | 10% | 2.73% → 1.73% | +| Init after load | iOS | 2.54% | 32% | 0.18% | 42% | 1.86% → 2.54% | +| Error 6 | macOS | 0.11% | 1% | 0.01% | 1% | 0.14% → 0.11% | +| Error 6 | iOS | 0.67% | 8% | 0.08% | 18% | 0.50% → 0.67% | +| Background missing | macOS | **0.20%** | 1% | 0.03% | 2% | 1.06% → **0.20%** | +| Background missing | iOS | **0.27%** | 3% | 0.01% | 3% | 0.63% → **0.27%** | +| Other | macOS | 2.92% | 19% | 0.30% | 16% | 4.75% → 2.92% | +| Other | iOS | 2.45% | 31% | 0.04% | 10% | 1.95% → 2.45% | 1.214 / 7.244 is one day of early adopters (macOS about 9k DAU, iOS 110k), a rough picture. -## Plan +**Plan** This week, cleanup: From 16f3277f244f6711c34f6e6025c344c2a35fabc7 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 20:24:36 +0600 Subject: [PATCH 37/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- work/projects/cpm-project-summary-2026-11-03.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index b81e38ac..d9e0bf11 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -28,11 +28,11 @@ Goal: permanent failures below 1% of DAU (0.2-0.5% = success). Permanent = no an - [Network process crash](https://app.asana.com/1/137249556945/task/1219531810004073?focus=true) – restart after the networking process crashes. Triggers for 6.6% of iOS and 4.2% of macOS daily users (Nov/2). - [State restoration race](https://app.asana.com/1/137249556945/task/1218744813699966?focus=true) – restored tabs wait up to 5 s for the extension to start. Init failures on restore: iOS ~20% → ~8.5% of DAU, macOS no clear change. -**Hypotheses rejected** +**Fixes not confirmed by data (to be rolled back)** -- [Deallocation race](https://app.asana.com/1/137249556945/task/1217907325352233?focus=true) ([A/B](https://app.asana.com/1/137249556945/task/1218356681060819?focus=true), [flag](https://app.asana.com/1/137249556945/task/1219036128743441?focus=true)) – fix shipped behind a flag never turned on, no relation in the data. -- [Reload on the stuck signal](https://app.asana.com/1/137249556945/task/1218744813699968?focus=true) – 46% of macOS cases still got no answer. -- [P4](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) – reload the page when the extension starts late. Off by default, never triggered in production. +- [Deallocation race](https://app.asana.com/1/137249556945/task/1217907325352233?focus=true) ([A/B](https://app.asana.com/1/137249556945/task/1218356681060819?focus=true), [flag](https://app.asana.com/1/137249556945/task/1219036128743441?focus=true)) – flag never turned on, no effect seen in the data. +- [Reload on the stuck signal](https://app.asana.com/1/137249556945/task/1218744813699968?focus=true) – 46% of macOS cases still got no answer after the reload. +- [P4](https://app.asana.com/1/137249556945/task/1219531810004072?focus=true) (late page reload) – off by default, never triggered. **Fixes going public next week (Nov/9)** @@ -74,7 +74,7 @@ This week, cleanup: - [Feature flags cleanup](https://app.asana.com/1/137249556945/task/1220159402040629?focus=true): - Remove fix and flag (did not work or never ran): [cpmBackgroundGraveyardTreatment](https://app.asana.com/1/137249556945/task/1218860893478440?focus=true), [cpmLateBackgroundDocumentRecovery](https://app.asana.com/1/137249556945/task/1219588497257482?focus=true), [cpmMessagingHangRecovery](https://app.asana.com/1/137249556945/task/1218855001659655?focus=true), [cpmBackgroundLoadRecovery](https://app.asana.com/1/137249556945/task/1219701603183698?focus=true). - Remove with the diagnostics: [cpmDiagnosticsRecorder](https://app.asana.com/1/137249556945/task/1218785444896174?focus=true), [cpmBackgroundDelegateProxy](https://app.asana.com/1/137249556945/task/1218782530802146?focus=true). - - Keep the fix, remove the failsafe flag: [cpmNetworkProcessRecovery](https://app.asana.com/1/137249556945/task/1219701603183695?focus=true), [cpmStableBaseURL](https://app.asana.com/1/137249556945/task/1219728649844711?focus=true), [webExtensionSharedPinnedTabWindowClose](https://app.asana.com/1/137249556945/task/1219660990760563?focus=true), [webExtensionStateRestorationGate](https://app.asana.com/1/137249556945/task/1218931841045393?focus=true), [cpmBackgroundLoadRestart](https://app.asana.com/1/137249556945/task/1219970564251181?focus=true) (after Nov/9 data). + - Keep the fix and the flag as a kill-switch for now (remove after 2-3 releases without issues): [cpmNetworkProcessRecovery](https://app.asana.com/1/137249556945/task/1219701603183695?focus=true), [cpmStableBaseURL](https://app.asana.com/1/137249556945/task/1219728649844711?focus=true), [webExtensionSharedPinnedTabWindowClose](https://app.asana.com/1/137249556945/task/1219660990760563?focus=true), [webExtensionStateRestorationGate](https://app.asana.com/1/137249556945/task/1218931841045393?focus=true), [cpmBackgroundLoadRestart](https://app.asana.com/1/137249556945/task/1219970564251181?focus=true). - [Pixel data cleanup](https://app.asana.com/1/137249556945/task/1220159402040630?focus=true): remove the temporary pixels and episode parameters that only served the investigation. Next, metrics: From 22dfa4f4b0870c7bf0ac8dae44c200fabfaa45bc Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 20:29:42 +0600 Subject: [PATCH 38/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- work/projects/cpm-project-summary-2026-11-03.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index d9e0bf11..569ce735 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -74,7 +74,8 @@ This week, cleanup: - [Feature flags cleanup](https://app.asana.com/1/137249556945/task/1220159402040629?focus=true): - Remove fix and flag (did not work or never ran): [cpmBackgroundGraveyardTreatment](https://app.asana.com/1/137249556945/task/1218860893478440?focus=true), [cpmLateBackgroundDocumentRecovery](https://app.asana.com/1/137249556945/task/1219588497257482?focus=true), [cpmMessagingHangRecovery](https://app.asana.com/1/137249556945/task/1218855001659655?focus=true), [cpmBackgroundLoadRecovery](https://app.asana.com/1/137249556945/task/1219701603183698?focus=true). - Remove with the diagnostics: [cpmDiagnosticsRecorder](https://app.asana.com/1/137249556945/task/1218785444896174?focus=true), [cpmBackgroundDelegateProxy](https://app.asana.com/1/137249556945/task/1218782530802146?focus=true). - - Keep the fix and the flag as a kill-switch for now (remove after 2-3 releases without issues): [cpmNetworkProcessRecovery](https://app.asana.com/1/137249556945/task/1219701603183695?focus=true), [cpmStableBaseURL](https://app.asana.com/1/137249556945/task/1219728649844711?focus=true), [webExtensionSharedPinnedTabWindowClose](https://app.asana.com/1/137249556945/task/1219660990760563?focus=true), [webExtensionStateRestorationGate](https://app.asana.com/1/137249556945/task/1218931841045393?focus=true), [cpmBackgroundLoadRestart](https://app.asana.com/1/137249556945/task/1219970564251181?focus=true). + - Remove the flag, keep the fix (already in 1.213 and 1.214): [webExtensionSharedPinnedTabWindowClose](https://app.asana.com/1/137249556945/task/1219660990760563?focus=true). + - Keep the fix and the flag as a kill-switch for now (remove after 2-3 releases without issues): [cpmNetworkProcessRecovery](https://app.asana.com/1/137249556945/task/1219701603183695?focus=true), [cpmStableBaseURL](https://app.asana.com/1/137249556945/task/1219728649844711?focus=true), [webExtensionStateRestorationGate](https://app.asana.com/1/137249556945/task/1218931841045393?focus=true), [cpmBackgroundLoadRestart](https://app.asana.com/1/137249556945/task/1219970564251181?focus=true). - [Pixel data cleanup](https://app.asana.com/1/137249556945/task/1220159402040630?focus=true): remove the temporary pixels and episode parameters that only served the investigation. Next, metrics: From 1207f946c1c1e9f6260785cb2b8dfecdf9485a10 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 3 Nov 2026 20:34:47 +0600 Subject: [PATCH 39/55] [2026-11-03] eagle: work/projects/cpm-project-summary-2026-11-03.md --- work/projects/cpm-project-summary-2026-11-03.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 569ce735..cf2803b5 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -78,11 +78,20 @@ This week, cleanup: - Keep the fix and the flag as a kill-switch for now (remove after 2-3 releases without issues): [cpmNetworkProcessRecovery](https://app.asana.com/1/137249556945/task/1219701603183695?focus=true), [cpmStableBaseURL](https://app.asana.com/1/137249556945/task/1219728649844711?focus=true), [webExtensionStateRestorationGate](https://app.asana.com/1/137249556945/task/1218931841045393?focus=true), [cpmBackgroundLoadRestart](https://app.asana.com/1/137249556945/task/1219970564251181?focus=true). - [Pixel data cleanup](https://app.asana.com/1/137249556945/task/1220159402040630?focus=true): remove the temporary pixels and episode parameters that only served the investigation. -Next, metrics: +Next, metrics (tasks to create): -- Permanent breakage metrics: a small fixed set, rates against DAU, added to the health indicators dashboard. Task to create. -- Extension lifecycle metrics: find where the startup message stops, to diagnose the wake failures. Needs privacy review and releases, data in 1-2 release cycles. Task to create. -- Data check of the Nov/9 fixes: [Analyze attribution data after stage 3](https://app.asana.com/1/137249556945/task/1220159402040627?focus=true). +- Permanent breakage metrics, replace the temporary pixels. Goal: track the permanent failure rate against DAU after the project closes. + - Episode report, trimmed to: outcome, tabs affected, repeat count, reload state, cause group (wake, load, update, error 6, tab not connected, other), platform and OS. Same shape on iOS and macOS. + - Healthy-navigation baseline: a 1% sample of navigations reports whether the extension answered and in which time bucket. Gives failures per navigation, not only per user. + - Health indicators dashboard: permanent failures, any failures, one-tab and browser-wide, per platform and version, against the 1% target. + - Old and new reports published together for one release, so the trend is not lost. Then the old ones go. +- Extension lifecycle metrics, to find where init on wake breaks. Goal: for init on wake failures, say at which step the chain stops. + - Stage ledger: the extension reports the last step reached for each navigation. Steps: page script injected, init sent by the page, init received by the background, config read from storage, app checks done (autoconsent on, feature on), dashboard update sent to the app, answer sent to the page, answer received by the page, response received by the app. + - Added to the failure report: last step reached and time spent in it. + - Background probe at failure time: is the background alive, does it answer a ping, how fast. Needs a spike first: does the probe see the background's state, and does it keep the background awake. + - Background lifecycle counters in the report: why it started (wake or load), age bucket, number of wakes in the session. + - Work: extension JS changes to send the steps, app changes to collect them, privacy review, extension and app releases. Data in 1-2 release cycles. +- Data check of the Nov/9 fixes: [Analyze attribution data after stage 3]. Open: From 4288f600d8a8fa1c5c1500d4ad0a5441d74ed92e Mon Sep 17 00:00:00 2001 From: Hermes Date: Wed, 4 Nov 2026 01:04:15 +0600 Subject: [PATCH 40/55] [2026-11-04] kraken: family/documents/movies-watchlist.md family/documents/movies-watchlist.md.bak-questions --- family/documents/movies-watchlist.md | 4 ++-- family/documents/movies-watchlist.md.bak-questions | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/family/documents/movies-watchlist.md b/family/documents/movies-watchlist.md index b08cdf96..fc028d1e 100755 --- a/family/documents/movies-watchlist.md +++ b/family/documents/movies-watchlist.md @@ -416,7 +416,7 @@ related: - [ ] ⬇️ Лучшее предложение - [ ] ❓ Итальянцы в ..? - Italiani a Rio (1987) ★4.1 - - Невероятные приключения итальянцев в России (1974) ★7.3 + - Невероятные приключения итальянцев в России (1974) ★7.2 - [ ] Римские каникулы - [ ] Покровские ворота - [ ] Индиана Джонс и последний @@ -521,7 +521,7 @@ related: - [ ] ❓ Загадочное убийство - Загадочное убийство (2020) ★5.3 - Загадочное убийство Белль (2025) ★5.8 - - Загадочное убийство в Манхэттэне (1993) ★7.2 + - Загадочное убийство в Манхэттэне (1993) ★7.3 - [ ] Игра в имитацию - [ ] ❓ Ирана - [ ] Неуловимые мстители diff --git a/family/documents/movies-watchlist.md.bak-questions b/family/documents/movies-watchlist.md.bak-questions index 0ac0e6ef..95c0e8cd 100755 --- a/family/documents/movies-watchlist.md.bak-questions +++ b/family/documents/movies-watchlist.md.bak-questions @@ -416,7 +416,7 @@ related: - [ ] ⬇️ Лучшее предложение - [ ] ❓ Итальянцы в ..? - Italiani a Rio (1987) ★4.1 - - Невероятные приключения итальянцев в России (1974) ★7.3 + - Невероятные приключения итальянцев в России (1974) ★7.2 - [ ] Римские каникулы - [ ] Покровские ворота - [ ] Индиана Джонс и последний @@ -521,7 +521,7 @@ related: - [ ] ❓ Загадочное убийство - Загадочное убийство (2020) ★5.3 - Загадочное убийство Белль (2025) ★5.8 - - Загадочное убийство в Манхэттэне (1993) ★7.2 + - Загадочное убийство в Манхэттэне (1993) ★7.3 - [ ] Игра в имитацию - [ ] ❓ Ирана - [ ] Неуловимые мстители From afe27bc71ccd03d43aff99c508f1995766d97df2 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Wed, 4 Nov 2026 17:55:38 +0600 Subject: [PATCH 41/55] [2026-11-04] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index 68e30b21..de6642da 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -249,6 +249,16 @@ GET индексатора возвращает `********`. Нельзя исп Бэкапы, все исходные artist/album JSON, результаты проверки и manifest: `/mnt/RED_2TB/docker/arr/lidarr/watchlist-reconcile-20261102T042134Z/`. До изменения worker: `lidarr-autosearch/before-watchlist-fix-20261102T044754Z/`. В каталоге сверки также сохранены прежние metadata profiles. Откат — только флаги/профили затронутых записей из JSON; новые записи при необходимости оставлять unmonitored, не удалять музыку. Все 17 тестов worker прошли локально и на NAS. +### Зависание прогресса Transmission и ожидание Nautilus, 2026-11-04 + +Nautilus Pompilius (artist 69, MBID 247efe0f-80f1-477c-a4a0-b5cb1b8c832e) monitored; его `ended`/Inactive — метаданные о распавшейся группе и не причина остановки. Общий worker ещё 2026-11-02 09:45 UTC автоматически добавил MP3-пак 94 релиза 1982–2014, torrent 660, hash `F1D29EDD16A2CB2328F5B95AFD96A6027E00F99F`, размер 13 894 404 705 байт. К 2026-11-04 11:39 UTC у него status=3, downloadedEver=0, startDate=0: очередь не дошла до раздачи. + +Реальная общая причина ожидания: активные загрузки Transmission 4.1.3 перестали учитывать уже записанные блоки и не завершались, удерживая очередь. У 26 активных музыкальных загрузок downloadedEver превышал размер раздачи более чем вдвое; суммарное превышение около 2,97 ТБ, помимо отдельно проверенной Мельницы (887 ГБ при размере 125 МБ). Это не признак выполненной загрузки. У большинства haveValid=0 при наличии файлов в incomplete; corruptEver не объяснял объём повторов. Перед восстановлением сохранены settings, live session, torrents/resume и снимки RPC в `/mnt/RED_2TB/docker/transmission/backfill-recovery-20261104T114242Z/`. + +Выполнена штатная `torrent-verify`: сначала одна диагностическая раздача Мельницы восстановилась до 100%, затем все 26 загрузок с тем же подтверждённым признаком. Всего восстановлен прогресс 27 загрузок; первые три дошли до 100%. В History Lidarr подтверждён реальный импорт Мельницы и Ногу свело!, Би-2 получил отдельный albumImportIncomplete. Затем Transmission штатно перезапущен, ограничения очереди 10 / stalled 5 минут сохранились. После перезапуска haveValid и percentDone растут вместе с принятыми байтами (например, The Hatters с 5,6% до 44,7%); очередь больше не следует оценивать только по downloadedEver. Конкретный кодовый дефект клиента не установлен; не приписывать его неподтверждённо cache-size или известной ошибке нулевых файлов. + +Для проверки именно запроса пользователя Nautilus поднят штатным `queue-move-top` из конца общей очереди; это разовая смена порядка проверки после общего восстановления, без индивидуального профиля, ручного повторного добавления релиза или исключения в worker. Реальная приёмка: Nautilus сам перешёл из queued в downloading через обычную очередь (без torrent-start-now). На 2026-11-04 11:52:22 UTC downloadedEver=29 592 161, haveValid=28 035 681, percentDone≈0,213%, rateDownload=2 236 416 байт/с, peersConnected=1, errorString пуст. Снимок `/mnt/RED_2TB/docker/transmission/backfill-recovery-20261104T114242Z/nautilus-transfer-verified.json`. Полную загрузку и импорт 14-ГБ пакета ещё не считать завершёнными. + ### Общая обработка названий RuTracker и очереди Transmission, 2026-11-02 Дополнительная проверка Rodrigo y Gabriela (812), Diablo Swing Orchestra (700), Триагрутрики (890) выявила включённый в Prowlarr RuTracker `russianLetters=true` (**Strip Russian letters**). Он удалял кириллицу, оставляя названия без имени Триагрутрики и слова «Дискография»; у Diablo оставалось `- / Discography`, которое Lidarr разбирал с неверным именем артиста. Общая настройка изменена на **false** через штатный API с настоящими credentials из SQLite, остальные поля сохранены. Отдельно штатный парсер Lidarr не поддерживает русские слова для диско/коллекций; это закрывает общая нормализация в автопоиске ниже. From 650ab2021b7cdfd2fa3affc2dfa3a4464357f272 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Wed, 4 Nov 2026 18:26:09 +0600 Subject: [PATCH 42/55] [2026-11-04] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index de6642da..70250f08 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -255,9 +255,19 @@ Nautilus Pompilius (artist 69, MBID 247efe0f-80f1-477c-a4a0-b5cb1b8c832e) monito Реальная общая причина ожидания: активные загрузки Transmission 4.1.3 перестали учитывать уже записанные блоки и не завершались, удерживая очередь. У 26 активных музыкальных загрузок downloadedEver превышал размер раздачи более чем вдвое; суммарное превышение около 2,97 ТБ, помимо отдельно проверенной Мельницы (887 ГБ при размере 125 МБ). Это не признак выполненной загрузки. У большинства haveValid=0 при наличии файлов в incomplete; corruptEver не объяснял объём повторов. Перед восстановлением сохранены settings, live session, torrents/resume и снимки RPC в `/mnt/RED_2TB/docker/transmission/backfill-recovery-20261104T114242Z/`. -Выполнена штатная `torrent-verify`: сначала одна диагностическая раздача Мельницы восстановилась до 100%, затем все 26 загрузок с тем же подтверждённым признаком. Всего восстановлен прогресс 27 загрузок; первые три дошли до 100%. В History Lidarr подтверждён реальный импорт Мельницы и Ногу свело!, Би-2 получил отдельный albumImportIncomplete. Затем Transmission штатно перезапущен, ограничения очереди 10 / stalled 5 минут сохранились. После перезапуска haveValid и percentDone растут вместе с принятыми байтами (например, The Hatters с 5,6% до 44,7%); очередь больше не следует оценивать только по downloadedEver. Конкретный кодовый дефект клиента не установлен; не приписывать его неподтверждённо cache-size или известной ошибке нулевых файлов. +Выполнена штатная `torrent-verify`: сначала одна диагностическая раздача Мельницы восстановилась до 100%, затем все 26 загрузок с тем же подтверждённым признаком. Всего восстановлен прогресс 27 загрузок; первые три дошли до 100%. В History Lidarr подтверждён реальный импорт Мельницы и Ногу свело!, Би-2 получил отдельный albumImportIncomplete. Затем Transmission штатно перезапущен, ограничения очереди 10 / stalled 5 минут сохранились. После перезапуска haveValid и percentDone растут вместе с принятыми байтами (например, The Hatters с 5,6% до 44,7%); очередь больше не следует оценивать только по downloadedEver. На этом этапе было выполнено только разовое восстановление. Причина и постоянная настройка установлены последующим расследованием ниже. -Для проверки именно запроса пользователя Nautilus поднят штатным `queue-move-top` из конца общей очереди; это разовая смена порядка проверки после общего восстановления, без индивидуального профиля, ручного повторного добавления релиза или исключения в worker. Реальная приёмка: Nautilus сам перешёл из queued в downloading через обычную очередь (без torrent-start-now). На 2026-11-04 11:52:22 UTC downloadedEver=29 592 161, haveValid=28 035 681, percentDone≈0,213%, rateDownload=2 236 416 байт/с, peersConnected=1, errorString пуст. Снимок `/mnt/RED_2TB/docker/transmission/backfill-recovery-20261104T114242Z/nautilus-transfer-verified.json`. Полную загрузку и импорт 14-ГБ пакета ещё не считать завершёнными. +**Установленная причина и предотвращение повторения.** В Docker log первая локальная ошибка — 2026-11-02T11:34:24+0700 (04:34:24 UTC): у Би-2 «Горизонт Событий» файл с русским названием имеет компонент 272 байта (277 с `.part`) при лимите файловой системы 255. Ошибка `Filename too long (36)` оставляет непишущиеся блоки в общем кеше Transmission 4.1.3. Последующие записи других раздач повторно пытаются вытеснить этот блок и получают чужую ошибку; байты принимаются, но `GotBlock` не публикуется и прогресс не растёт. Это соответствует [разбору и коду PR 9049](https://github.com/transmission/transmission/pull/9049). PR не устанавливался: он ещё не включён в релиз. + +Штатная [возможность обхода внутреннего кеша](https://github.com/transmission/transmission/pull/5668) присутствует в текущем бинарнике: в `Cache::write_block` при `cache-size-mb=0` выполняется запись через `tr_ioWrite` без общего кеша. Установлено **`cache-size-mb=0`**, подтверждено в RPC и settings.json после перезапуска. Это предотвращает распространение ошибки одного торрента на остальные; кеш файловой системы ZFS продолжает работать. Периодические перезапуски или перепроверки как «лечение» не добавлялись. + +Воспроизведение выполнено в изолированных временных контейнерах из **того же image SHA** `d3adeda7a820f2fb562243e413b50973d2fc2ba0fe78eb0612b76dd8936c7a50`, с внутренней Docker-сетью, собственными синтетическими сидером/трекером, без mounts production и без внешних раздач. При кеше 4 МБ намеренно длинное имя первой раздачи вызывает ту же ошибку, а исправная соседняя принимает 8 192 000 байт с haveValid=0 и 0%. При кеше 0 та же ошибочная раздача останавливается отдельно, исправная принимает ровно 8 388 608 байт, проверяет их и достигает 100%. Результаты: `cache-regression-20261104T121040Z/cache-{4,0}/result.json` под каталогом бэкапа. Контейнеры и временная сеть удалены. + +Устранён также исходный триггер для будущей музыки: native `script-torrent-added` вызывает `/config/hooks/normalize_music_paths.py`. Только у Lidarr-торрентов он автоматически сокращает недопустимые UTF-8-компоненты пути через штатный `torrent-rename-path`, учитывая 255 байт для каталога и 250 байт для имени файла с резервом `.part`. Короткий вариант ≤240 байт сохраняет расширение и получает 12-символьный хеш исходного имени, чтобы различать похожие длинные названия. Меняется путь в клиенте, содержимое и infohash не меняются; обычные имена, другие категории и пользовательские паузы сохраняются. RPC выполняется на собственном интерфейсе контейнера с существующей авторизацией: loopback в данной установке исключён из WHITELIST; правила доступа не расширялись. + +Проверены 4 теста UTF-8-границ файлов/каталогов, различения одинаковых обрезанных префиксов, обновления дочерних путей, сохранения пользовательских пауз и возобновления только ошибки длинного имени локально и на NAS. Дополнительная нативная приёмка on-add hook: синтетическое русское имя из 284 байт автоматически сокращено, обе раздачи дошли до 100%, SHA256 файла совпал с исходными данными. Результаты `hook-regression-20261104T121545Z/cache-0-hook/result.json`. На production проверена **341** ожидающая музыкальная раздача, найден и исправлен **1** длинный компонент (hash `faba14712299d9a29836366a48ed9f0283eef76b`, 272→240 байт); только этот ранее автоматически начатый, но остановленный по Filename too long торрент возвращён в обычную очередь. Остальные паузы сохранены. Снимки `added-hook-before.json`, `overlong-paths-before.json`, `overlong-paths-fixed.json` и исходный/новый скрипт — в том же бэкапе. Для отката вернуть только сохранённые поля кеша и on-add hook; не подменять живую БД или весь каталог загрузок. + +Для проверки именно запроса пользователя Nautilus поднят штатным `queue-move-top` из конца общей очереди; это разовая смена порядка проверки после общего восстановления, без индивидуального профиля, ручного повторного добавления релиза или исключения в worker. Реальная приёмка: Nautilus сам перешёл из queued в downloading через обычную очередь (без torrent-start-now). На 2026-11-04 11:52:22 UTC downloadedEver=29 592 161, haveValid=28 035 681, percentDone≈0,213%, rateDownload=2 236 416 байт/с, peersConnected=1, errorString пуст. Снимок `/mnt/RED_2TB/docker/transmission/backfill-recovery-20261104T114242Z/nautilus-transfer-verified.json`. После постоянного исправления подтверждены 8 144 194 145 принятых байт, haveValid=7 846 218 337, прогресс 58,6%, скорость 8 503 296 байт/с, ошибок нет. Исходно сбойная раздача Би-2 также вернулась к status=4, errorString пуст; после постоянного исправления ещё одна другая раздача завершилась сама. Итоговые настройки и состояние сохранены в `root-fix-final-validation.json`: cache-size-mb=0 и on-add hook включён как в живом RPC, так и на диске; Health Lidarr `[]`. Полную загрузку и импорт 14-ГБ пакета ещё не считать завершёнными. ### Общая обработка названий RuTracker и очереди Transmission, 2026-11-02 From 4fe1dd20a2cbdf3e73c02f7ea2c894a2a3a44574 Mon Sep 17 00:00:00 2001 From: Hermes Date: Thu, 5 Nov 2026 01:04:18 +0600 Subject: [PATCH 43/55] [2026-11-05] kraken: family/documents/movies-watchlist.md family/documents/movies-watchlist.md.bak-questions --- family/documents/movies-watchlist.md | 4 ++-- family/documents/movies-watchlist.md.bak-questions | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/family/documents/movies-watchlist.md b/family/documents/movies-watchlist.md index fc028d1e..f678d024 100755 --- a/family/documents/movies-watchlist.md +++ b/family/documents/movies-watchlist.md @@ -125,8 +125,8 @@ related: - [ ] Triangle of Sadness 2022 - [ ] ❓ Babylon - Вавилон (2022) ★7.3 - - Babylon (2019) ★6.1 - Вавилон (2014) ★6.6 + - Вавилон 5 (1994) ★8.0 - [ ] Everything Everywhere All at Once 2022 - Всё везде и сразу (2022) ★7.7 - Almost Everything You Ever Wanted to Know About Everything Everywhere All at Once (2022) ★10.0 @@ -509,7 +509,7 @@ related: - [ ] ❓ Left behind - Оставленные (2014) ★4.3 - Left Behind (2000) ★4.2 - - Left behind (None) ★0.0 + - Left Behind (1994) ★5.5 - [ ] Point blank - [ ] 🧟‍♀️ Resident evil - [ ] 🧟‍♀️ The dead don't die diff --git a/family/documents/movies-watchlist.md.bak-questions b/family/documents/movies-watchlist.md.bak-questions index 95c0e8cd..17044827 100755 --- a/family/documents/movies-watchlist.md.bak-questions +++ b/family/documents/movies-watchlist.md.bak-questions @@ -125,8 +125,8 @@ related: - [ ] Triangle of Sadness 2022 - [ ] ❓ Babylon - Вавилон (2022) ★7.3 - - Babylon (2019) ★6.1 - Вавилон (2014) ★6.6 + - Вавилон 5 (1994) ★8.0 - [ ] Everything Everywhere All at Once 2022 - Всё везде и сразу (2022) ★7.7 - Almost Everything You Ever Wanted to Know About Everything Everywhere All at Once (2022) ★10.0 @@ -509,7 +509,7 @@ related: - [ ] ❓ Left behind - Оставленные (2014) ★4.3 - Left Behind (2000) ★4.2 - - Left behind (None) ★0.0 + - Left Behind (1994) ★5.5 - [ ] Point blank - [ ] 🧟‍♀️ Resident evil - [ ] 🧟‍♀️ The dead don't die From dcdb7bb93778f7febaa057c1aa6479dfc8de27d7 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Thu, 5 Nov 2026 11:28:21 +0600 Subject: [PATCH 44/55] [2026-11-05] eagle: personal/business/rf-tax-residency.md --- personal/business/rf-tax-residency.md | 56 ++++++++++++++++++--------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/personal/business/rf-tax-residency.md b/personal/business/rf-tax-residency.md index 1863adbd..f978d7bf 100755 --- a/personal/business/rf-tax-residency.md +++ b/personal/business/rf-tax-residency.md @@ -1,6 +1,6 @@ --- created: '2026-08-24' -updated: '2026-08-24' +updated: '2026-11-05' tags: - tax - russia @@ -12,7 +12,7 @@ tags: - ИП в Кыргызстане, доход от иностранных IT-клиентов - Живу в Бишкеке, гражданин РФ -- Цель: **не становиться налоговым резидентом РФ** (порог — 183 дня в любые 12 последовательных месяцев) +- Цель: **не становиться налоговым резидентом РФ по итогам календарного года** (порог — 183 дня с 1 января по 31 декабря) - Пока нерезидент — доход от КР-ИП РФ не касается --- @@ -24,29 +24,47 @@ tags: | 29.11.2025 → 14.03.2026 | 106 | | 04.07.2026 → 30.08.2026 | 58 | | 06.09.2026 → 19.09.2026 | 14 | -| 29.11.2026 → ? | считаем | +| 25.10.2026 → 08.11.2026 | 15 | +| 29.11.2026 → ? | план | + +Дни въезда и выезда включены в подсчёт. Визит 25.10–08.11.2026 записан по указанным датам; на дату обновления 05.11.2026 выезд 08.11 ещё запланирован. Въезд 29.11.2026 сохранён как план и не включён в итог 160 дней. --- -## Подсчёт скользящего окна +## Подсчёт по календарным годам -### На дату приезда 29.11.2026 +Для итогового статуса за налоговый период считаем дни отдельно с **1 января по 31 декабря** каждого года. Переходящий визит делим по границе года; даты поездок в истории сохраняем полностью. -Окно 29.11.2025 → 28.11.2026: -- 29.11.25 → 14.03.26 = **106 дней** -- 04.07.26 → 30.08.26 = **58 дней** -- 06.09.26 → 19.09.26 = 14 дней -- **Итого: 178 дней** (запас: **4 дня** до 183) +**Основание:** [ФНС — определение окончательного налогового статуса за календарный год](https://www.nalog.gov.ru/rn77/ip/interest/reg_ip/resident_rf/). Для промежуточного определения статуса налоговым агентом в течение года применяется период из 12 последовательных месяцев; этот расчёт относится к итоговому годовому статусу. -### Динамика окна при пребывании с 29.11.2026 +### 2025 год — по записанной истории -- **29.11.26 → 14.03.27:** из окна выпадают дни 29.11.25→14.03.26 — все в РФ → +1 −1 = **счётчик стоит на 177** -- **15.03.27:** из окна начинают выпадать дни с 15.03.26 (КР) → каждый день в РФ даёт **чистый +1** -- Запас 6 дней → нужно выехать до **~21.03.2027** +- Часть визита 29.11.2025 → 14.03.2026, приходящаяся на 2025 год: **29.11.2025 → 31.12.2025 = 33 дня**. +- **Итого по указанным поездкам: 33 дня**. Другие поездки 2025 года, если они были, здесь не учтены. -### ⚠️ Безопасный выезд при поездке 29.11.2026 +### 2026 год — с визитом 25.10–08.11 -**Выехать не позднее 20.03.2027** +- 01.01.2026 → 14.03.2026 = **73 дня** (часть визита, начавшегося 29.11.2025). +- 04.07.2026 → 30.08.2026 = **58 дней**. +- 06.09.2026 → 19.09.2026 = **14 дней**. +- 25.10.2026 → 08.11.2026 = **15 дней**. +- **Итого после выезда 08.11.2026: 160 дней**. +- На дату обновления **05.11.2026: 157 дней**; 06–08 ноября добавят ещё 3 дня при выезде по плану. +- Чтобы остаться ниже порога 183 дня, допустимо максимум **182 дня за год**: после 08.11 остаётся **22 дополнительных дня в РФ**. +- **183-й день** наступит через **23 дополнительных дня пребывания**. + +### План въезда 29.11.2026 + +При отсутствии других поездок после 08.11 и до 29.11: + +- 29.11.2026 → 20.12.2026 включительно = **22 дня**; итог за 2026 год — **182 дня**. +- **Выезд не позднее 20.12.2026 включительно** сохраняет итог ниже 183 дней, если затем до конца года больше не въезжать в РФ. +- **21.12.2026 — 183-й день** в РФ за 2026 год, порог резидентства достигнут. +- При пребывании до 31.12.2026 включительно добавятся **33 дня**, итог — **193 дня**. + +### Переход в 2027 год + +С **01.01.2027** начинается отдельный годовой счётчик. Дни 2026 года в итог за 2027 год не переносятся. Это не отменяет превышение порога за 2026 год, если оно произошло. Новый визит, переходящий через Новый год, также делится между двумя календарными годами. --- @@ -69,6 +87,6 @@ tags: ## Вывод / план -- **Сейчас:** нерезидент РФ, всё чисто -- **Поездка 29.11.2026:** можно сидеть до **20.03.2027** — счётчик нейтрален пока выпадают дни зимы 2025/26 (были в РФ), с 15.03.27 начинает расти -- **Принцип:** следить за датами, особенно после длинного лета в РФ — запас резко сокращается +- **После визита 25.10–08.11.2026:** 160 дней в РФ за 2026 год; при отсутствии дальнейших поездок итог будет ниже порога 183 дня. +- **План въезда 29.11.2026:** выехать не позднее **20.12.2026 включительно**, затем не въезжать до конца года — итог **182 дня**. Пребывание 21.12 доведёт итог до **183 дней**. +- **Принцип:** сохранять полную историю въездов/выездов и отдельно суммировать дни каждого календарного года; окончательный статус за 2026 год определяется по итогам года. From fe58a9d60b329a91554216c0c576341785253ff2 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Thu, 5 Nov 2026 11:33:27 +0600 Subject: [PATCH 45/55] [2026-11-05] eagle: family/how-to/arr-stack-taiga.md personal/business/rf-tax-residency.md --- family/how-to/arr-stack-taiga.md | 14 +++++- personal/business/rf-tax-residency.md | 65 +++++++-------------------- 2 files changed, 28 insertions(+), 51 deletions(-) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index 70250f08..d235cf1d 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -281,6 +281,18 @@ Transmission ограничивал загрузки пятью слотами, Бэкап Prowlarr SQLite и исходного indexer JSON, параметров очереди: `/mnt/RED_2TB/docker/arr/lidarr/rutracker-title-fix-20261102T040020Z/`. До замены worker сохранены файлы в `lidarr-autosearch/before-pack-normalization-20261102T040501Z/`, перед снятием суточного ожидания — `state-before-title-retry-reset.json`. Откат — вернуть только `russianLetters` и параметры Transmission из JSON, при необходимости предыдущий worker. Не восстанавливать всю живую БД. +### Автопоиск русских имён при латинском имени MusicBrainz, 2026-11-05 + +У Plamenev (artist 473, MBID `8a907c72-8387-4da1-871b-4467cf0abddc`) мониторинг всех четырёх альбомов был включён, но ArtistSearch 2–4 ноября каждый раз скачивал 0 отчётов. Причина подтверждена кодом `SearchCriteriaBase.ArtistQuery => Artist.Name`: штатный поиск использовал только `Plamenev`. В текущем MusicBrainz и в ArtistMetadata.Aliases нет русских псевдонимов этого MBID. Такой запрос находил только MP3-сингл Princess, отсутствующий в текущем каталоге, и FLAC-пак с неизвестным артистом. Запрос `Пламенев` в тех же настроенных индексерах находит MP3-дискографии RuTracker 5777792 и NoNaMe Club 1254828. Это проблема полноты имени запроса, а не выключенного monitoring или недоступных индексеров. + +Постоянное общее исправление — модуль `/mnt/RED_2TB/docker/arr/lidarr-autosearch/lidarr_alias_search.py`, вызываемый обычным worker после ArtistSearch и нормализации паков. Он работает только с monitored-артистами, у которых 0 импортированных треков и не было grabbed: уже скачанные или зависшие пакеты не дублируются. Нужны как минимум два вышедших monitored-альбома. Используются сохранённые кириллические псевдонимы; при отсутствии — обратимая транслитерация латинского имени, только если как минимум два названия альбомов кириллические. Неподдержанные буквы не угадываются. Общие правила не содержат имён/ID конкретных артистов. + +Альтернативный поиск идёт через Prowlarr только в индексеры, уже включённые в automatic search самого Lidarr. До принятия пакета читается только небольшой torrent metainfo: его MP3-пути должны содержать два разных названия нужных monitored-альбомов, а заголовок — соответствовать имени/его транслитерации. Аудиокниги, чужие авторы, FLAC, одно совпадение и будущие/выключенные альбомы такой проверки не проходят. После подтверждения содержимого переводится название дискографии в каноническое имя и повторно вызываются `/parse` и **полный `/release/push` RSS decision engine**. Ограничения качества, сидов и monitoring сохраняются; принудительного `/release` в этом модуле нет. + +`SEARCH_POLICY_VERSION=3`: смена общей политики повторно рассматривает подходящих артистов без ручного сброса состояния Plamenev. Cron 4, периодичность и профили не изменялись. Бэкап прежних worker/tests/state: `/mnt/RED_2TB/docker/arr/lidarr-autosearch/backup-name-search-20261105T051857Z/`. Сначала установлен модуль-зависимость, затем атомарно опубликован worker. Все 50 тестов прошли локально и на NAS (8 новых тестов альтернативного поиска, 23 worker, 15 metadata search, 4 имён файлов). + +Реальная приёмка 05:19:50 UTC: этот же общий обработчик нашёл по `Пламенев` и проверил в NoNaMe Club 1254828 MP3-пак «3 альбома, 9 сборников, 2013–2021» размером 1 304 529 537 байт. Подтверждены каталоги «Герой с тысячью лиц», «Крадущая сны», «Для мира на земле». Lidarr одобрил пакет без единого отказа; Transmission hash `F5754EEF71798B17B3E961346CDEE1DCBF91A9F7`. На 05:27:08 UTC downloadedEver=166 529 665, haveValid=166 300 289, прогресс 12,8%, скорость 1 146 880 байт/с, один подключённый сид, ошибок нет. Английский The Hero With a Thousand Faces не найден в проверенных каталогах пакета и остаётся monitored. Пока не объявлять всю загрузку/импорт завершёнными. Нативное подтверждение и состояние библиотеки: `plamenev-name-search-validation.json`; события `alternate_name_search` / `alternate_pack_decision` в `runs.jsonl`. + ### Общее исправление автозагрузки monitored-артистов, 2026-11-02 Причины были общими: профиль отбрасывал MP3 ниже 256/VBR-V2, лимит размера отклонял смешанные MP3-дискографии, а альбомный MissingAlbumSearch не находил пакеты по названию артиста. RSS каждые 15 минут проверяет новые публикации, но сам по себе не обеспечивает повторный поиск старых отсутствующих альбомов. @@ -297,7 +309,7 @@ Transmission ограничивал загрузки пятью слотами, - TrueNAS cronjob **4**, enabled, каждые 15 минут, пользователь `truenas_admin`; команда `/usr/bin/python3 /mnt/RED_2TB/docker/arr/lidarr-autosearch/lidarr_autosearch.py`. - До 5 артистов за запуск; берутся только monitored-артисты с отсутствующими monitored-альбомами, уже вышедшими по дате. Артисты с активной загрузкой/поиском пропускаются, flock исключает пересечение запусков. - Штатная команда `ArtistSearch` ищет дискографии и использует обычный механизм решений Lidarr. Для Various Artists используется `MissingAlbumSearch`, чтобы не искать все сборники разом. После поиска проверяются MP3-паки: общая нормализация переводит «Дискография»/«полная дискография»/«Коллекция» в Discography и распознаёт явное число ≥2 Albums/альбомов с диапазоном лет. Начальные жанровые теги и конечные псевдонимы убираются только при точном совпадении основного имени артиста. `/parse` обязан подтвердить тот же artistId, discography=true и выбранные monitored-альбомы. Затем `POST /release/push` проводит релиз через полный RSS decision engine. Если единственные отказы — `Existing files meets cutoff:` / `Existing files on disk is of equal or higher preference:`, пакет содержит реально отсутствующие вышедшие monitored-альбомы и эта раздача ещё не была grabbed, общий worker автоматически вызывает `POST /release` с исходными guid/indexerId из кеша поиска и ID отсутствующего альбома как привязкой. Это ограниченный обход блокировки частично скачанных паков; отказы по формату, качеству профиля, сидам, блоклисту и чужому артисту не обходятся. Native import распознаёт все папки альбомов внутри пакета и сохраняет свои проверки качества. За запуск принимается не более одного пака на артиста; сначала более широкий по выбранным альбомам. Персональных исключений по артистам нет. -- Повтор для того же набора отсутствующего — через 24 часа; новый набор отсутствующего или новая версия общей политики поиска допускают поиск без суточного ожидания. Текущая `SEARCH_POLICY_VERSION=2`: обновление общего правила повторно рассматривает всех подходящих артистов без ручного сброса Savant или других отдельных ID. Состояние — `state.json`, журнал — `runs.jsonl` рядом со скриптом. +- Повтор для того же набора отсутствующего — через 24 часа; новый набор отсутствующего или новая версия общей политики поиска допускают поиск без суточного ожидания. Текущая `SEARCH_POLICY_VERSION=3`: обновление общего правила повторно рассматривает всех подходящих артистов без ручного сброса отдельных ID. Состояние — `state.json`, журнал — `runs.jsonl` рядом со скриптом. - Если артист включён, `monitorNewItems=all`, а **все** существующие альбомы выключены, их monitoring восстанавливается. Частичный выбор альбомов, выключенные артисты и `monitorNewItems=none` сохраняются. Изменённые ID альбомов записываются в журнал для точного отката. - Пустой каталог сначала получает `RefreshArtist` с `artistIds=[id]` и **`isNewArtist=true`**: этот флаг ограничивает последующее сканирование папкой артиста. Без него Lidarr ставит сканирование всей `/storage/Music` даже при одном ArtistIds. diff --git a/personal/business/rf-tax-residency.md b/personal/business/rf-tax-residency.md index f978d7bf..ff5cd2b2 100755 --- a/personal/business/rf-tax-residency.md +++ b/personal/business/rf-tax-residency.md @@ -12,59 +12,32 @@ tags: - ИП в Кыргызстане, доход от иностранных IT-клиентов - Живу в Бишкеке, гражданин РФ -- Цель: **не становиться налоговым резидентом РФ по итогам календарного года** (порог — 183 дня с 1 января по 31 декабря) +- Цель: **не становиться налоговым резидентом РФ по итогам календарного года** - Пока нерезидент — доход от КР-ИП РФ не касается --- -## Въезды/выезды в РФ +## Пребывание в РФ по календарным годам -| Период | Дней | -| ----------------------- | ------- | -| 29.11.2025 → 14.03.2026 | 106 | -| 04.07.2026 → 30.08.2026 | 58 | -| 06.09.2026 → 19.09.2026 | 14 | -| 25.10.2026 → 08.11.2026 | 15 | -| 29.11.2026 → ? | план | +| Период | Дней в 2025 году | Дней в 2026 году | +| --- | ---: | ---: | +| 29.11.2025 → 14.03.2026 (106 дней всего) | 33 | 73 | +| 04.07.2026 → 30.08.2026 | — | 58 | +| 06.09.2026 → 19.09.2026 | — | 14 | +| 25.10.2026 → 08.11.2026 | — | 15 | +| **Итого по записанной истории** | **33** | **160** | -Дни въезда и выезда включены в подсчёт. Визит 25.10–08.11.2026 записан по указанным датам; на дату обновления 05.11.2026 выезд 08.11 ещё запланирован. Въезд 29.11.2026 сохранён как план и не включён в итог 160 дней. +Дни въезда и выезда включены. Для итогового годового статуса дни считаются с 1 января по 31 декабря; переходящий визит разделён между годами. Другие поездки, если они были, не учтены. ---- +[ФНС: окончательный налоговый статус определяется за календарный год](https://www.nalog.gov.ru/rn77/ip/interest/reg_ip/resident_rf/). Порог — **183 дня**; чтобы остаться ниже него, допустимо максимум **182 дня за год**. Для промежуточного определения статуса налоговым агентом в течение года применяется период из 12 последовательных месяцев. -## Подсчёт по календарным годам +## Следующий въезд с пребыванием до 31.12.2026 -Для итогового статуса за налоговый период считаем дни отдельно с **1 января по 31 декабря** каждого года. Переходящий визит делим по границе года; даты поездок в истории сохраняем полностью. +Остаток на 2026 год: **182 − 160 = 22 дня**. -**Основание:** [ФНС — определение окончательного налогового статуса за календарный год](https://www.nalog.gov.ru/rn77/ip/interest/reg_ip/resident_rf/). Для промежуточного определения статуса налоговым агентом в течение года применяется период из 12 последовательных месяцев; этот расчёт относится к итоговому годовому статусу. +**Самая ранняя дата въезда — 10.12.2026:** до 31.12.2026 включительно это ровно весь остаток, и годовой итог останется ниже порога. Условие: между последним указанным визитом и этой поездкой других дней в РФ нет. -### 2025 год — по записанной истории - -- Часть визита 29.11.2025 → 14.03.2026, приходящаяся на 2025 год: **29.11.2025 → 31.12.2025 = 33 дня**. -- **Итого по указанным поездкам: 33 дня**. Другие поездки 2025 года, если они были, здесь не учтены. - -### 2026 год — с визитом 25.10–08.11 - -- 01.01.2026 → 14.03.2026 = **73 дня** (часть визита, начавшегося 29.11.2025). -- 04.07.2026 → 30.08.2026 = **58 дней**. -- 06.09.2026 → 19.09.2026 = **14 дней**. -- 25.10.2026 → 08.11.2026 = **15 дней**. -- **Итого после выезда 08.11.2026: 160 дней**. -- На дату обновления **05.11.2026: 157 дней**; 06–08 ноября добавят ещё 3 дня при выезде по плану. -- Чтобы остаться ниже порога 183 дня, допустимо максимум **182 дня за год**: после 08.11 остаётся **22 дополнительных дня в РФ**. -- **183-й день** наступит через **23 дополнительных дня пребывания**. - -### План въезда 29.11.2026 - -При отсутствии других поездок после 08.11 и до 29.11: - -- 29.11.2026 → 20.12.2026 включительно = **22 дня**; итог за 2026 год — **182 дня**. -- **Выезд не позднее 20.12.2026 включительно** сохраняет итог ниже 183 дней, если затем до конца года больше не въезжать в РФ. -- **21.12.2026 — 183-й день** в РФ за 2026 год, порог резидентства достигнут. -- При пребывании до 31.12.2026 включительно добавятся **33 дня**, итог — **193 дня**. - -### Переход в 2027 год - -С **01.01.2027** начинается отдельный годовой счётчик. Дни 2026 года в итог за 2027 год не переносятся. Это не отменяет превышение порога за 2026 год, если оно произошло. Новый визит, переходящий через Новый год, также делится между двумя календарными годами. +С 01.01.2027 начинается отдельный годовой счётчик; дальнейшие дни этого визита относятся к 2027 году. --- @@ -82,11 +55,3 @@ tags: 2. Подать **3-НДФЛ** в РФ, указать доход от КР-ИП, сослаться на СИДН (ст. 7 — предпринимательская деятельность) 3. Приложить: сертификат резидентства КР, квитанции об уплате налога в КР, контракты 4. Налог уплаченный в КР засчитывается — доплачивается только разница (КР ~4–6%, РФ 13%) - ---- - -## Вывод / план - -- **После визита 25.10–08.11.2026:** 160 дней в РФ за 2026 год; при отсутствии дальнейших поездок итог будет ниже порога 183 дня. -- **План въезда 29.11.2026:** выехать не позднее **20.12.2026 включительно**, затем не въезжать до конца года — итог **182 дня**. Пребывание 21.12 доведёт итог до **183 дней**. -- **Принцип:** сохранять полную историю въездов/выездов и отдельно суммировать дни каждого календарного года; окончательный статус за 2026 год определяется по итогам года. From 625e86f6955fb30971e120276e3569e1a563637e Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Thu, 5 Nov 2026 11:38:32 +0600 Subject: [PATCH 46/55] [2026-11-05] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index d235cf1d..59fc4436 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -285,7 +285,7 @@ Transmission ограничивал загрузки пятью слотами, У Plamenev (artist 473, MBID `8a907c72-8387-4da1-871b-4467cf0abddc`) мониторинг всех четырёх альбомов был включён, но ArtistSearch 2–4 ноября каждый раз скачивал 0 отчётов. Причина подтверждена кодом `SearchCriteriaBase.ArtistQuery => Artist.Name`: штатный поиск использовал только `Plamenev`. В текущем MusicBrainz и в ArtistMetadata.Aliases нет русских псевдонимов этого MBID. Такой запрос находил только MP3-сингл Princess, отсутствующий в текущем каталоге, и FLAC-пак с неизвестным артистом. Запрос `Пламенев` в тех же настроенных индексерах находит MP3-дискографии RuTracker 5777792 и NoNaMe Club 1254828. Это проблема полноты имени запроса, а не выключенного monitoring или недоступных индексеров. -Постоянное общее исправление — модуль `/mnt/RED_2TB/docker/arr/lidarr-autosearch/lidarr_alias_search.py`, вызываемый обычным worker после ArtistSearch и нормализации паков. Он работает только с monitored-артистами, у которых 0 импортированных треков и не было grabbed: уже скачанные или зависшие пакеты не дублируются. Нужны как минимум два вышедших monitored-альбома. Используются сохранённые кириллические псевдонимы; при отсутствии — обратимая транслитерация латинского имени, только если как минимум два названия альбомов кириллические. Неподдержанные буквы не угадываются. Общие правила не содержат имён/ID конкретных артистов. +Постоянное общее исправление — модуль `/mnt/RED_2TB/docker/arr/lidarr-autosearch/lidarr_alias_search.py`, вызываемый обычным worker после ArtistSearch и нормализации паков. Он работает только с monitored-артистами, у которых 0 импортированных треков и не было grabbed: уже скачанные или зависшие пакеты не дублируются. Нужны как минимум два вышедших monitored-альбома. Используются сохранённые кириллические псевдонимы; дополнительно допускается обратимая транслитерация латинского имени, только если как минимум два названия альбомов кириллические. За один проход отправляется не более двух альтернативных запросов. Неподдержанные буквы не угадываются. Общие правила не содержат имён/ID конкретных артистов. Альтернативный поиск идёт через Prowlarr только в индексеры, уже включённые в automatic search самого Lidarr. До принятия пакета читается только небольшой torrent metainfo: его MP3-пути должны содержать два разных названия нужных monitored-альбомов, а заголовок — соответствовать имени/его транслитерации. Аудиокниги, чужие авторы, FLAC, одно совпадение и будущие/выключенные альбомы такой проверки не проходят. После подтверждения содержимого переводится название дискографии в каноническое имя и повторно вызываются `/parse` и **полный `/release/push` RSS decision engine**. Ограничения качества, сидов и monitoring сохраняются; принудительного `/release` в этом модуле нет. @@ -293,6 +293,9 @@ Transmission ограничивал загрузки пятью слотами, Реальная приёмка 05:19:50 UTC: этот же общий обработчик нашёл по `Пламенев` и проверил в NoNaMe Club 1254828 MP3-пак «3 альбома, 9 сборников, 2013–2021» размером 1 304 529 537 байт. Подтверждены каталоги «Герой с тысячью лиц», «Крадущая сны», «Для мира на земле». Lidarr одобрил пакет без единого отказа; Transmission hash `F5754EEF71798B17B3E961346CDEE1DCBF91A9F7`. На 05:27:08 UTC downloadedEver=166 529 665, haveValid=166 300 289, прогресс 12,8%, скорость 1 146 880 байт/с, один подключённый сид, ошибок нет. Английский The Hero With a Thousand Faces не найден в проверенных каталогах пакета и остаётся monitored. Пока не объявлять всю загрузку/импорт завершёнными. Нативное подтверждение и состояние библиотеки: `plamenev-name-search-validation.json`; события `alternate_name_search` / `alternate_pack_decision` в `runs.jsonl`. + +Границы исправления: это общий дополнительный этап установленного автопоиска, а не патч исходников Lidarr или исправление MusicBrainz. Он закрывает расхождение латинского/кириллического имени для MP3-дискографий при перечисленных проверках. Одиночные релизы, артисты с одним альбомом, уже имеющимися импортированными треками или предыдущим grabbed этим этапом не обслуживаются; произвольные псевдонимы не угадываются. Поэтому исправление не гарантирует загрузку любого отсутствующего артиста. Для первичной приёмки был вручную вызван тот же общий обработчик с текущим artistId; релиз, торрент и особое правило для Plamenev вручную не задавались. Последующие запуски выполняет общий worker через cron. + ### Общее исправление автозагрузки monitored-артистов, 2026-11-02 Причины были общими: профиль отбрасывал MP3 ниже 256/VBR-V2, лимит размера отклонял смешанные MP3-дискографии, а альбомный MissingAlbumSearch не находил пакеты по названию артиста. RSS каждые 15 минут проверяет новые публикации, но сам по себе не обеспечивает повторный поиск старых отсутствующих альбомов. From f30d564ba0a6e18a09f0c24381095961a99db61e Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Thu, 5 Nov 2026 13:40:32 +0600 Subject: [PATCH 47/55] [2026-11-05] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index 59fc4436..c5261eba 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -281,6 +281,21 @@ Transmission ограничивал загрузки пятью слотами, Бэкап Prowlarr SQLite и исходного indexer JSON, параметров очереди: `/mnt/RED_2TB/docker/arr/lidarr/rutracker-title-fix-20261102T040020Z/`. До замены worker сохранены файлы в `lidarr-autosearch/before-pack-normalization-20261102T040501Z/`, перед снятием суточного ожидания — `state-before-title-retry-reset.json`. Откат — вернуть только `russianLetters` и параметры Transmission из JSON, при необходимости предыдущий worker. Не восстанавливать всю живую БД. +### Лайкнутые артисты: мониторинг без автоматического скачивания, 2026-11-05 + +По запросу пользователя включены ранее выключенные лайкнутые артисты из проверенного CSV Spotify/Яндекс. Область операции — 733 сопоставленные записи из `liked-artists-unmonitored-2026-11-05.csv`, а не все 1333 записи Lidarr. На момент выполнения 731 артист ещё был unmonitored: им установлены `monitored=true` и `monitorNewItems=none`. Для всех их существующих альбомов подтверждён `monitored=false`; менять альбомные флаги фактически не понадобилось, они уже были выключены. Каста (62) и Geoffrey Day (491) к этому времени были включены пользователем: их настройки сохранены. 78 несопоставленных имён не добавлялись и не подменялись похожими артистами. + +Это режим отдельных артистов. RSS индексеров, automatic/interactive search, TrueNAS cron 4 и прежние загрузки не отключались. Настройки всех остальных артистов и альбомов, quality/metadata profiles, пути и теги сохранены. Поисковые команды и загрузки этой операцией не отправлялись. + +Важно различать три настройки в Lidarr 3.1.6.5079: `monitored` артиста; флаги `monitored` уже известных альбомов; `monitorNewItems` для альбомов, впервые обнаруженных при обновлении каталога. Значение `none` третьей настройки не выключает уже выбранные альбомы, поэтому проверены оба уровня. Для данного режима оставлять `monitorNewItems=none`: существующий worker восстанавливает полностью выключенные альбомы только для артистов с `monitorNewItems=all`. При `none` такое восстановление не выполняется. Пустой каталог может обновляться через общий worker, но вновь обнаруженные альбомы останутся без мониторинга. Наличие артиста в monitored само по себе не означает, что его альбомы запрошены к скачиванию. + +Операция выполнена через штатные `PUT /api/v1/artist/editor` и `PUT /api/v1/album/monitor`, без прямых изменений БД. На время массовой записи взят существующий `worker.lock`; cron оставлен enabled. Порядок: сначала новые альбомы — None при ещё выключенном артисте, затем проверка выключенных существующих альбомов, затем включение артиста. Это исключает промежуточный запрос дискографии. + +Резервная копия, манифест и приёмка: `/mnt/RED_2TB/docker/arr/lidarr-autosearch/monitor-only-likes-20261105T073539Z/` (`before.json`, `result.json`, `follow-up-verification.json`). Одноразовая операция — `enable_liked_artists_monitor_only.py`, список — `liked-artists-monitor-only-targets.json` рядом с общим worker. Это не новая периодическая задача. Восстановление — через native API вернуть только выбранным ID значения `monitored`/`monitorNewItems` из `before.json`, а не восстанавливать живую БД целиком. + +Повторная проверка 5 ноября в 13:37 по Бишкеку: все 733 сопоставленные записи CSV включены; у 731 изменённого артиста новые альбомы — None и 0 monitored-альбомов. Новых grabbed и новых записей очереди для них нет. Всего в Lidarr теперь 925 monitored-артистов; настройки остальных сохранены. Исходный CSV является снимком до этой операции и больше не означает текущий выключенный мониторинг. + + ### Автопоиск русских имён при латинском имени MusicBrainz, 2026-11-05 У Plamenev (artist 473, MBID `8a907c72-8387-4da1-871b-4467cf0abddc`) мониторинг всех четырёх альбомов был включён, но ArtistSearch 2–4 ноября каждый раз скачивал 0 отчётов. Причина подтверждена кодом `SearchCriteriaBase.ArtistQuery => Artist.Name`: штатный поиск использовал только `Plamenev`. В текущем MusicBrainz и в ArtistMetadata.Aliases нет русских псевдонимов этого MBID. Такой запрос находил только MP3-сингл Princess, отсутствующий в текущем каталоге, и FLAC-пак с неизвестным артистом. Запрос `Пламенев` в тех же настроенных индексерах находит MP3-дискографии RuTracker 5777792 и NoNaMe Club 1254828. Это проблема полноты имени запроса, а не выключенного monitoring или недоступных индексеров. From 36a774cc76420fc62a3911896eb077b333b1a9db Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Thu, 5 Nov 2026 13:55:48 +0600 Subject: [PATCH 48/55] [2026-11-05] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index c5261eba..468b2552 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -281,6 +281,17 @@ Transmission ограничивал загрузки пятью слотами, Бэкап Prowlarr SQLite и исходного indexer JSON, параметров очереди: `/mnt/RED_2TB/docker/arr/lidarr/rutracker-title-fix-20261102T040020Z/`. До замены worker сохранены файлы в `lidarr-autosearch/before-pack-normalization-20261102T040501Z/`, перед снятием суточного ожидания — `state-before-title-retry-reset.json`. Откат — вернуть только `russianLetters` и параметры Transmission из JSON, при необходимости предыдущий worker. Не восстанавливать всю живую БД. +### Скачивание Geoffrey Day / Geoffplaysguitar по отдельному запросу, 2026-11-05 + +После массового включения лайкнутых артистов без скачивания пользователь отдельно запросил загрузку Geoff. Geoffrey Day (491, MBID `472a8c1b-ffef-400a-b4b4-8d5741d3ca85`) и GeoffPlaysGuitar — одна запись: последнее имя присутствует в её псевдонимах. Только этому артисту назначен уже существующий общий metadata profile 3 «Watchlist music», сохранён общий MP3 quality profile 1, установлены `monitored=true`, `monitorNewItems=all`. Scoped RefreshArtist с `artistIds=[491]`, `isNewArtist=true` и ожиданием его rescan наполнил каталог: 29 релизов, все monitored. ArtistSearch завершился успешно, но скачал 0 отчётов: подходящих сольных MP3 в проверенных индексерах пока не найдено. Резервная копия настроек и каталогов до/после: `/mnt/RED_2TB/docker/arr/lidarr-autosearch/geoff-download-20261105T074710Z/`. + +Лайкнутые треки Geoff из Atomic Heart относятся к сборникам Various Artists (1239), а не к его сольному каталогу. По явному запросу на скачивание выбран найденный MP3-320 пакет RuTracker 6483234, размер 1 248 114 702 байта. До отправки проверен torrent metainfo: MP3-каталоги содержат точные названия всех шести уже выбранных OST Vol.1–6 (album IDs 9622–9627). Дополнительно в паке есть шесть Singles/EP. Не считать эти шесть синглов автоматически сопоставленными или импортированными. + +Это разовая операция скачивания по запросу пользователя, не новая персональная настройка автопоиска. Исходный заголовок «Atomic Heart Soundtrack Collection (Various Artists) …» не распознавался штатным альбомным поиском. После подтверждения всех выбранных альбомов в содержимом для native `/parse` использован заголовок `Various Artists - Discography 2023-2026 MP3 320kbps`; он распознал ровно шесть нужных OST. Оригинальные guid, размер, proxy download URL и индексер сохранены. `/release/push` пропустил пакет через полный decision engine: approved=true, rejections=[]; принудительный `/release` и обход качества не использовались. Другие артисты, RSS и cron не менялись. + +Transmission torrent 724, hash `B9D1249744F59A196728EEA12E5308DDD0D90C8F`, имя `Atomic Heart Soundtrack Collection`. Проверка 5 ноября в 13:50:57 по Бишкеку: downloading, 18,18%, downloadedEver=226 883 598 байт, haveValid=203 733 006, rateDownload=11 378 688 байт/с, 3 пира, errorString пуст. Это одна раздача с шестью grabbed-записями по альбомам, не шесть торрентов. Полный импорт на момент проверки не подтверждён. Доказательства: `geoff-atomic-grab-result.json`, `geoff-transmission-verification.json`, `geoff-atomic-metainfo.torrent` рядом с worker; JSON с приватным proxy URL хранится только на NAS. + + ### Лайкнутые артисты: мониторинг без автоматического скачивания, 2026-11-05 По запросу пользователя включены ранее выключенные лайкнутые артисты из проверенного CSV Spotify/Яндекс. Область операции — 733 сопоставленные записи из `liked-artists-unmonitored-2026-11-05.csv`, а не все 1333 записи Lidarr. На момент выполнения 731 артист ещё был unmonitored: им установлены `monitored=true` и `monitorNewItems=none`. Для всех их существующих альбомов подтверждён `monitored=false`; менять альбомные флаги фактически не понадобилось, они уже были выключены. Каста (62) и Geoffrey Day (491) к этому времени были включены пользователем: их настройки сохранены. 78 несопоставленных имён не добавлялись и не подменялись похожими артистами. From c22142f496deb14f3f92e1123b3df00c243485f9 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Thu, 5 Nov 2026 14:11:03 +0600 Subject: [PATCH 49/55] [2026-11-05] eagle: family/how-to/arr-stack-taiga.md --- family/how-to/arr-stack-taiga.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/family/how-to/arr-stack-taiga.md b/family/how-to/arr-stack-taiga.md index 468b2552..02171e24 100755 --- a/family/how-to/arr-stack-taiga.md +++ b/family/how-to/arr-stack-taiga.md @@ -281,6 +281,17 @@ Transmission ограничивал загрузки пятью слотами, Бэкап Prowlarr SQLite и исходного indexer JSON, параметров очереди: `/mnt/RED_2TB/docker/arr/lidarr/rutracker-title-fix-20261102T040020Z/`. До замены worker сохранены файлы в `lidarr-autosearch/before-pack-normalization-20261102T040501Z/`, перед снятием суточного ожидания — `state-before-title-retry-reset.json`. Откат — вернуть только `russianLetters` и параметры Transmission из JSON, при необходимости предыдущий worker. Не восстанавливать всю живую БД. +### Скачивание Pain по отдельному запросу, 2026-11-05 + +После включения лайкнутых артистов без автоматического скачивания пользователь отдельно запросил скачивание Pain. Для Pain (22, MBID `84d5a9df-dd85-43e9-92f3-ed87bcd59b58`) установлены `monitored=true`, `monitorNewItems=all`, общий metadata profile 3 «Watchlist music»; общий MP3 quality profile 1 сохранён. Scoped RefreshArtist с `artistIds=[22]`, `isNewArtist=true` и ожиданием его rescan обновил каталог: 28 релизов, все monitored. ArtistSearch выполнен. Другие артисты, RSS, cron и настройки Transmission не менялись. Резервная копия: `/mnt/RED_2TB/docker/arr/lidarr-autosearch/pain-download-20261105T075334Z/`. + +Подтверждены правильные загрузки: `Pain - I Am (2024)`, NoNaMe Club 1723621, MP3-320, размер 100 501 591 байт, hash `9F3DB2FC47A67845CAC508D3134B6384E04AF79D`; `Pain - Party in My Head (2021) Single`, MP3-320, hash `3948AC0B02448C12B950185751E50DF6F75B407E`. Проверка 5 ноября в 14:04:24 по Бишкеку: I Am — downloading, 212 992 байта приняты, 131 072 проверены, 1 пир, скорость 40 960 байт/с; Party in My Head — добавлен, downloading, 0 байт и 0 пиров. Основные NNM-трекеры отвечают Success, сидов 7 и 3 соответственно. Ошибок торрентов нет. Загрузку и импорт всей дискографии завершёнными не считать. Доказательство — `pain-transmission-verification.json` рядом с worker. + +Во время поиска выявлено ложное сопоставление штатного Lidarr: чужой `Painkiller - Pain and Destruction (2023)` был привязан к альбому Pain (499). Торрент `BD2B0210F09A1FA887EBE3C611596FD86F7E0612` немедленно остановлен; на проверке им было принято 0 байт. Неправильная раздача помечена штатным blocklist через DELETE queue с `removeFromClient=false`, `blocklist=true`, `skipRedownload=true`, затем удалена только из Transmission с `delete-local-data=false`. Повторно проверено, что этого hash в клиенте нет. Файлы не удалялись и ошибочного импорта не было. Это блокировка конкретной неверной раздачи, не заявление об исправлении всех неоднозначных сопоставлений штатного поиска. Исходная проверка — `pain-initial-transmission-check.json`. + +Дополнительно проверен MP3-пак Kinozal 859659 «Pain - Discography Metal 1997–2016». Его MP3-каталоги подтверждают несколько нужных альбомов, но в заголовке нет битрейта: обычный `/parse` определяет качество Unknown. Полный `/release/push` отклонил кандидат по Unknown, лимиту размера для этого качества и уже имеющимся VBR-V0-файлам. Битрейт не выдумывался, эти отказы не обходились, пакет не скачивался. Результат — `pain-pack-decision.json`. Сопоставление всей дискографии или загрузку всех 28 релизов не обещать; корректно утверждать запуск двух названных раздач и включение остальных релизов в дальнейший поиск. + + ### Скачивание Geoffrey Day / Geoffplaysguitar по отдельному запросу, 2026-11-05 После массового включения лайкнутых артистов без скачивания пользователь отдельно запросил загрузку Geoff. Geoffrey Day (491, MBID `472a8c1b-ffef-400a-b4b4-8d5741d3ca85`) и GeoffPlaysGuitar — одна запись: последнее имя присутствует в её псевдонимах. Только этому артисту назначен уже существующий общий metadata profile 3 «Watchlist music», сохранён общий MP3 quality profile 1, установлены `monitored=true`, `monitorNewItems=all`. Scoped RefreshArtist с `artistIds=[491]`, `isNewArtist=true` и ожиданием его rescan наполнил каталог: 29 релизов, все monitored. ArtistSearch завершился успешно, но скачал 0 отчётов: подходящих сольных MP3 в проверенных индексерах пока не найдено. Резервная копия настроек и каталогов до/после: `/mnt/RED_2TB/docker/arr/lidarr-autosearch/geoff-download-20261105T074710Z/`. From a337ae87cc1f4057a9177c9474bedfe309221840 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Thu, 5 Nov 2026 17:08:52 +0600 Subject: [PATCH 50/55] [2026-11-05] eagle: family/documents/car-notes.md --- family/documents/car-notes.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/family/documents/car-notes.md b/family/documents/car-notes.md index c9838228..0fe6da4b 100755 --- a/family/documents/car-notes.md +++ b/family/documents/car-notes.md @@ -2,7 +2,7 @@ title: "🚗 Авто" aliases: ["Авто", "Car notes", "Запчасти", "car-notes"] tags: ["family", "car", "documents"] -updated: "2026-05-17" +updated: "2026-11-05" related: ["[[family/documents/altai-house-inventory]]"] --- # 🚗 Авто @@ -23,6 +23,7 @@ VIN X4XPE18429WC93798 Интеркулер 17513453726 (Nissens 96129) Натяжитель 11 28 7 800 334 Турбина 11658512464 +Насос омывателя лобового стекла BMW 67 12 8 362 154 (67128362154) Ролик обводной 11 28 7 800 562 Натяжитель 11 28 7 800 334 (отдельно ролик: Maxgear 54-0705) @@ -41,7 +42,11 @@ VIN X4XPE18429WC93798 ## Дворники -20", 22" +BMW X3 E83, левый руль: + +- Передний водительский (левый): **550 мм / 22″**. +- Передний пассажирский (правый): **500 мм / 20″**. +- Задний: **350 мм / 14″**. Оригинал BMW: **61 62 3 428 599** (`61623428599`); аналог Bosch **H351**, артикул **3 397 004 559** (`3397004559`). ## Колеса From b9c8d154872810fd852b4cdd6cb466a62fd5d148 Mon Sep 17 00:00:00 2001 From: Hermes Date: Fri, 6 Nov 2026 01:04:33 +0600 Subject: [PATCH 51/55] [2026-11-06] kraken: family/documents/movies-watchlist.md family/documents/movies-watchlist.md.bak-questions --- family/documents/movies-watchlist.md | 10 +++++----- family/documents/movies-watchlist.md.bak-questions | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/family/documents/movies-watchlist.md b/family/documents/movies-watchlist.md index f678d024..59f0dc89 100755 --- a/family/documents/movies-watchlist.md +++ b/family/documents/movies-watchlist.md @@ -125,7 +125,7 @@ related: - [ ] Triangle of Sadness 2022 - [ ] ❓ Babylon - Вавилон (2022) ★7.3 - - Вавилон (2014) ★6.6 + - Babylon (2004) ★0.0 - Вавилон 5 (1994) ★8.0 - [ ] Everything Everywhere All at Once 2022 - Всё везде и сразу (2022) ★7.7 @@ -194,7 +194,7 @@ related: - [ ] Квартет И по Амстелу - [ ] Аэропорт - [ ] По любви - - [ ] ❓ Один день из жизни вадика беляева(спектакль) + - [ ] Один день из жизни вадика беляева(спектакль) - [ ] Разговорник/Квартетник - [ ] Шестой элемент - [ ] Неистребимый шпион @@ -206,7 +206,7 @@ related: - [ ] ❓ Крестный отец - Крестный отец (1975) ★4.7 - Наш крестный отец (2019) ★6.6 - - Крестный отец: Трилогия 1901-1980 (1992) ★8.9 + - Крестный отец афроамериканской музыки (2019) ★6.6 - [ ] Не горюй! - [ ] IT: welcome to derry - [ ] ⬇️ Dead poets society @@ -259,7 +259,7 @@ related: - [ ] Convoy - [ ] Красный шелк - [ ] 🗓️ Без лица (1997/2011/2025) - - [ ] Дворец полански + - [ ] ❓ Дворец полански - [ ] ❓ Space merchants - [ ] ❓ All systems red - [ ] Transformers one @@ -508,8 +508,8 @@ related: - [ ] Race for Glory Audi vs Lancia - [ ] ❓ Left behind - Оставленные (2014) ★4.3 - - Left Behind (2000) ★4.2 - Left Behind (1994) ★5.5 + - Left Behind (2016) ★0.0 - [ ] Point blank - [ ] 🧟‍♀️ Resident evil - [ ] 🧟‍♀️ The dead don't die diff --git a/family/documents/movies-watchlist.md.bak-questions b/family/documents/movies-watchlist.md.bak-questions index 17044827..852ff6e3 100755 --- a/family/documents/movies-watchlist.md.bak-questions +++ b/family/documents/movies-watchlist.md.bak-questions @@ -125,7 +125,7 @@ related: - [ ] Triangle of Sadness 2022 - [ ] ❓ Babylon - Вавилон (2022) ★7.3 - - Вавилон (2014) ★6.6 + - Babylon (2004) ★0.0 - Вавилон 5 (1994) ★8.0 - [ ] Everything Everywhere All at Once 2022 - Всё везде и сразу (2022) ★7.7 @@ -194,7 +194,7 @@ related: - [ ] Квартет И по Амстелу - [ ] Аэропорт - [ ] По любви - - [ ] ❓ Один день из жизни вадика беляева(спектакль) + - [ ] Один день из жизни вадика беляева(спектакль) - [ ] Разговорник/Квартетник - [ ] Шестой элемент - [ ] Неистребимый шпион @@ -206,7 +206,7 @@ related: - [ ] ❓ Крестный отец - Крестный отец (1975) ★4.7 - Наш крестный отец (2019) ★6.6 - - Крестный отец: Трилогия 1901-1980 (1992) ★8.9 + - Крестный отец афроамериканской музыки (2019) ★6.6 - [ ] Не горюй! - [ ] IT: welcome to derry - [ ] ⬇️ Dead poets society @@ -259,7 +259,7 @@ related: - [ ] Convoy - [ ] Красный шелк - [ ] 🗓️ Без лица (1997/2011/2025) - - [ ] Дворец полански + - [ ] ❓ Дворец полански - [ ] ❓ Space merchants - [ ] ❓ All systems red - [ ] Transformers one @@ -508,8 +508,8 @@ related: - [ ] Race for Glory Audi vs Lancia - [ ] ❓ Left behind - Оставленные (2014) ★4.3 - - Left Behind (2000) ★4.2 - Left Behind (1994) ★5.5 + - Left Behind (2016) ★0.0 - [ ] Point blank - [ ] 🧟‍♀️ Resident evil - [ ] 🧟‍♀️ The dead don't die From 335651ad821b4b32d792ce32bb7dc4b39c1b6b4c Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Fri, 6 Nov 2026 14:21:34 +0600 Subject: [PATCH 52/55] [2026-11-06] eagle: Untitled.md --- Untitled.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 Untitled.md diff --git a/Untitled.md b/Untitled.md new file mode 100644 index 00000000..f8973b15 --- /dev/null +++ b/Untitled.md @@ -0,0 +1 @@ +89139129113 сбер владимир \ No newline at end of file From 2e747035d66120a9434ef61a27be77eba52115b3 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Sat, 7 Nov 2026 19:46:00 +0600 Subject: [PATCH 53/55] [2026-11-07] eagle: family/how-to/truenas-infrastructure.md personal/tech/samsung-clx-216x.md --- family/how-to/truenas-infrastructure.md | 2 +- personal/tech/samsung-clx-216x.md | 31 ++++++++++++++++++++----- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/family/how-to/truenas-infrastructure.md b/family/how-to/truenas-infrastructure.md index 12c02fd1..75f1aaf2 100755 --- a/family/how-to/truenas-infrastructure.md +++ b/family/how-to/truenas-infrastructure.md @@ -1147,7 +1147,7 @@ nc -z 192.168.2.197 631 # проверить порт наружу - `entrypoint.sh`: стартует `dbus-daemon --system`, затем `avahi-daemon --no-drop-root`, затем `exec cupsd -f`. - `data/cupsd.conf`: `Browsing Off` → `Browsing On` + добавлена строка `BrowseLocalProtocols dnssd` (бэкап `cupsd.conf.pre-avahi`). -**⚠️ Важный питфолл:** после правки конфига НЕ использовать `docker restart cups-splix` — он убивает avahi-daemon (defunct), перед новым подъёмом обязателен **`docker stop cups-splix && docker rm cups-splix && docker compose up -d`** (полный пересоздание, чтобы entrypoint перевыполнился с нуля). +**✅ 2026-11-07: повторный сбой после перезагрузки TrueNAS устранён.** Старый entrypoint принимал оставшийся `/run/dbus/system_bus_socket` за живой D-Bus и пропускал его запуск; Avahi завершался, CUPS продолжал работать без mDNS. Дополнительно виртуальные сети Docker исчерпали лимит multicast-групп (`IP_ADD_MEMBERSHIP failed: No buffer space available`), поэтому восстановленный Avahi не публиковал IPv4-анонс в LAN. Теперь Avahi ограничен `allow-interfaces=enp3s0`; новый entrypoint очищает runtime-файлы, проверяет готовность D-Bus → Avahi → CUPS и контролирует процессы, IPP и фактическую публикацию принтера в LAN. При отказе/зависании завершает контейнер, который восстанавливает `restart: unless-stopped`; добавлен Docker HEALTHCHECK. Обычный `docker restart cups-splix` теперь поддерживается. Проверены два перезапуска, аварийное завершение каждого из трёх сервисов и зависание Avahi; после каждого восстановлены IPP и mDNS на `enp3s0 / 192.168.2.197:631`. Подробности, бэкап и проверка печати: [[personal/tech/samsung-clx-216x]]. **Проверка анонса:** ```bash diff --git a/personal/tech/samsung-clx-216x.md b/personal/tech/samsung-clx-216x.md index 84a0de5f..39507c6f 100755 --- a/personal/tech/samsung-clx-216x.md +++ b/personal/tech/samsung-clx-216x.md @@ -2,7 +2,7 @@ type: tech topic: print tags: [print, printer, samsung, cups, truenas, novosibirsk] -updated: "2026-10-09" +updated: "2026-11-07" --- # Samsung CLX-216x — Новосибирск @@ -25,15 +25,14 @@ updated: "2026-10-09" ## Эксплуатация - Конфигурация: `/mnt/RED_2TB/docker/cups/` на TrueNAS. -- После изменения конфигурации поднимать полным пересозданием: +- После изменения Dockerfile или скриптов пересобрать образ и пересоздать контейнер: ```bash -docker stop cups-splix -docker rm cups-splix -docker compose up -d +cd /mnt/RED_2TB/docker/cups +docker compose up -d --build --force-recreate cups-splix ``` -- Не использовать `docker restart cups-splix`: Avahi после него становится zombie, mDNS пропадает. +- С 2026-11-07 обычный `docker restart cups-splix` поддерживается и проверен. Старый запрет относился к ошибке прежнего entrypoint; причина устранена (см. ниже). - Из внешней сети печать идёт через SSH в контейнер; порт `631` наружу не опубликован. ## Печать PDF извне @@ -56,3 +55,23 @@ ssh -i ~/.ssh/id_rsa truenas_admin@mallexxx.duckdns.org \ - Образ основан на Debian 12; в нём CUPS, splix, Avahi, D-Bus и USB-утилиты. Точка входа запускает D-Bus, затем Avahi, затем `cupsd`. - Каталоги `data`, `cache`, `spool` принадлежат `root:lp` и имеют права `0700`. Бэкап делать внутри контейнера через `docker exec … tar`, затем забирать `docker cp`. - Локально собранный образ не переживает потерю docker data-root; конфигурация и USB-очередь сохраняются в `/mnt/RED_2TB/docker/cups/`, образ нужно пересобрать. + +## Исправление повторного сбоя 2026-11-07 + +- Проверка по SSH: USB `04e8:3425` присутствовал, очередь была idle/enabled/accepting, но D-Bus отсутствовал, его socket от 31 августа возвращал `Connection refused`, Avahi был defunct. Контейнер повторно запустился 1 ноября после перезапуска TrueNAS. +- Причина: прежний entrypoint проверял только существование socket, запускал Avahi в фоне с подавлением ошибок и не контролировал дочерние процессы. Пересоздание контейнера обходило ошибку, но следующий старт существующего контейнера воспроизводил её. +- Дополнительная причина, обнаруженная проверкой mDNS после восстановления D-Bus: Avahi присоединялся ко всем виртуальным интерфейсам Docker и на физическом `enp3s0.IPv4` получал `IP_ADD_MEMBERSHIP failed: No buffer space available`. Из-за исчерпания multicast memberships оставалась лишь IPv6-публикация на LAN. В Dockerfile установлен `allow-interfaces=enp3s0`: mDNS печати работает только в домашней сети, новые сети Docker не расходуют его multicast memberships. +- Исправлены `/mnt/RED_2TB/docker/cups/{Dockerfile,entrypoint.sh}`, добавлен `healthcheck.sh`. При старте удаляются старые container-local socket/PID-файлы; D-Bus, Avahi и CUPS запускаются последовательно с проверкой готовности. PID 1 контролирует все три процесса и каждые 5 секунд проверяет Avahi по D-Bus и очередь по IPP. После трёх неудачных проверок или выхода процесса контейнер завершается; Docker автоматически поднимает его согласно сохранённому `restart: unless-stopped`. Завершение зависших процессов ограничено по времени. Ошибки Avahi видны в `docker logs`. +- В образ добавлен Docker HEALTHCHECK (15 секунд, timeout 12 секунд, start-period 30 секунд, retries 3). `healthcheck.sh` проверяет также фактический IPv4 mDNS-анонс очереди на `enp3s0`, а не только доступность процессов. Самовосстановление обеспечивает entrypoint: один HEALTHCHECK сам по себе контейнеры не перезапускает. +- Проверка: два `docker restart`; SIGKILL отдельно Avahi, D-Bus и CUPS; SIGSTOP Avahi для имитации зависания. После каждого теста контейнер healthy, IPP отвечает, `_ipp._tcp` разрешается на физическом `enp3s0` в `192.168.2.197:631` с правильным `rp=printers/Samsung_CLX-216x_Series`. Полный reboot TrueNAS не выполнялся. +- Одностраничное тестовое задание отправлено через LAN IPP; результат CUPS — completed. Печать именно с телефона удалённо не проверялась. +- Бэкап исходных Dockerfile/entrypoint/compose: `/mnt/RED_2TB/docker/cups/backup-startup-20261107T133009Z/`; прежний образ: `cups-splix:before-startup-20261107T133009Z`. Очередь, spool и USB-настройки сохранены. + +Проверка состояния: + +```bash +docker inspect cups-splix --format '{{.State.Health.Status}}' +docker exec cups-splix /healthcheck.sh +docker exec cups-splix avahi-browse -rtp _ipp._tcp +docker logs --tail 60 cups-splix +``` From b4c00f69fde3ac11aaf4b4176b43f23f980196ee Mon Sep 17 00:00:00 2001 From: Hermes Date: Sun, 8 Nov 2026 09:00:13 +0600 Subject: [PATCH 54/55] [watchlist] discover 2026-11-08 --- family/documents/movies-watchlist.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/family/documents/movies-watchlist.md b/family/documents/movies-watchlist.md index 59f0dc89..a3379528 100755 --- a/family/documents/movies-watchlist.md +++ b/family/documents/movies-watchlist.md @@ -18,6 +18,9 @@ related: - "[[family/documents/karaoke-songs]]" --- ## Новинки - 👍/👎 + - [ ] [Клэйфейс](https://www.kinopoisk.ru/film/6712328/) (2026) IMDb 7.5 KP 7.4 + - [ ] 🗓️ [Прайм-тайм](https://www.kinopoisk.ru/film/7400696/) (2026) IMDb 7.0 KP 6.4 + - [ ] 🗓️ [Йо, любовь – это мятежная птица](https://www.kinopoisk.ru/film/11368714/) (2026) IMDb 6.7 - [ ] 🗓️ [Большие гонки. Пегас III](https://www.kinopoisk.ru/film/11026619/) (2026) IMDb 6.5 - [ ] 🗓️ [5 сантиметров в секунду](https://www.kinopoisk.ru/film/8230870/) (2025) IMDb 7.3 - [ ] 🗓️ [Плетёный муж](https://www.kinopoisk.ru/film/11095481/) (2026) IMDb 8.0 KP 7.4 From e6b679bf9abdc275372b6d97d36ae54e6a99c31d Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Sun, 8 Nov 2026 21:31:13 +0600 Subject: [PATCH 55/55] [2026-11-08] eagle: Untitled.md --- Untitled.md | 1 - 1 file changed, 1 deletion(-) delete mode 100644 Untitled.md diff --git a/Untitled.md b/Untitled.md deleted file mode 100644 index f8973b15..00000000 --- a/Untitled.md +++ /dev/null @@ -1 +0,0 @@ -89139129113 сбер владимир \ No newline at end of file