WEB board

всеканоны и докиворкеры↗ iOS↗ Легаси
WEB-186 · Дефект · Видео · web

Импорт YouTube: скачанный .mkv отвергался валидатором форматов — добавлен --remux-video mp4 в yt-dlp

Закрыт P1 · важно ведёт: —
Суть
Owner 05.08 09:38: «Unsupported video format: .mkv» после починки FK. Корень: merge-output-format mp4 работает только при склейке дорожек; единый best-файл (mkv) не ремуксился → валидатор движка (media-metadata.ts:48) отбивал. Фикс: --remux-video mp4 (ffmpeg -c copy, без перекодирования) посажен ПРЯМО на Pi (бэкап /tmp/yt-dlp-runtime.ts.bak-0945), сервис перезапущен, зеркало синхронизировано. Закрыт по горячим следам координатором.

--- 30.08 ~19:45 IST (Фабл): РЕГРЕССИЯ: Совет на l74 мёртв при включении (батарея C6: honest/thinking → 502). Журнал: knights stage1 → VendorCallRejectedError 'request id already used', run_failed 'All knights failed'; рядом billing guard 'raw userId is forbidden'. С6-FIFO (3e69cf9d) сел, но конфликт с billing-контрактами receipts5. Волна 830-councilbilling (фикс + негативы, стражей не ослаблять). C6-council-off работает.

--- 30.08 ~20:50 IST (Фабл): councilbilling ГОТОВ (fe19b14e): корень — C6-FIFO не оборачивал прямой CouncilOrchestrator.run() в runWithBillingRequestContext → occurrence-индексы одинаковых vendor-shape начинались с 0 → идентичные dedup-ключи у рыцарей/ретраев → idempotency_conflict → «All knights failed». Фикс: request-scope на весь run + citation judges переведены на branded identity (раздельный корень «raw userId forbidden» в actions.ts/chat-global). Стражи НЕ ослаблены. 32/32 целевых тестов; orchestrator.test.ts красный ДО фикса (заявлено — приёмка проверит на базе). Приёмка 834 в очереди (спец-негативы: уникальность ключей при ретраях, живость дедупа на реальном дубле, изоляция параллельных run).

--- 30.08 ~21:25 IST (Фабл): ✅ ПРИЁМКА 834 = GO, ЛИНИЯ СОВЕТА-BILLING ЗАКРЫТА: все сюиты воспроизведены независимо (8/8, 6/6, 1/1, 19/19 + 32/32 chatIdentityGuard), 21 красный orchestrator.test.ts ВОСПРОИЗВЕДЁН НА БАЗЕ (не регресс фикса). fe19b14e — кандидат l75. После посадки l75: живой ре-тест Совета браузером (honest+thinking) обязателен.

--- 30.08 ~23:55 IST (Фабл): батарея r15: stage1 Совета РАБОТАЕТ на l75 (fe19b14e подтверждён боем), новый слой луковицы — stage2: billing_guard_state_unavailable в channel=council_stage2, «2 reviewer(s) failed; chair refused» → 502. Класс «память не переживает границу» (ALS-контекст не доезжает до peer-review-пути). Волна 851-councilbilling2 (проброс контекста с ТЕМ ЖЕ requestId, occurrence не сбрасывать — иначе вернётся дедуп-конфликт).

--- 31.08 ~01:00 IST (Фабл): councilbilling2 ГОТОВ: корень stage2 — queued vendor task терял ALS-scope на границе очереди (queue.tail.then без bind) → resolveInvocationIdentity без ambient scope → occurrence с нуля → дедуп-конфликт/guard_state_unavailable. Фикс: AsyncResource.bind задачи при постановке в очередь, ЕДИНЫЙ BillingRequestContext и сквозной attemptSequence на knights+reviewers+chair. Приёмка 857 (вкл. негатив с ревертом bind — тест обязан падать тем же классом). Кандидат l76.

--- 31.08 ~01:20 IST (Фабл): приёмка 857 = NO-GO с важной находкой: тест «границы очереди» проходит И БЕЗ bind — фикстурная зелень, доказательства что фикс чинит именно боевой корень НЕТ (сам фикс может быть верным или ненужным). Круг 859: тест через реальный queue-path с ассертом ambient-scope внутри callback + обе стороны (bind PASS / revert FAIL); если bind окажется ненужным — переисследовать настоящий корень (containment/callsite-регистрация council_stage2?). Совет в l76 НЕ едет до честного доказательства.

--- 31.08 ~03:10 IST (Фабл): councilbilling3 ПЕРЕВЕРНУЛ диагноз (честно, по оговорке брифа): bind ИЗБЫТОЧЕН (ALS переживает queue.tail.then — доказано ревертом), настоящий корень = НЕЗАРЕГИСТРИРОВАННЫЕ provider-callsite-ы стадий Совета (ветка callsite_unregistered у алиаса billing_guard_state_unavailable). Фикс cef55b57 регистрирует callsite-ы; 7/7 тестов, occurrence-стрим stage1:0→stage4:7 непрерывен. Приёмка 866: реверт РЕГИСТРАЦИИ должен валить тест + объяснение асимметрии «stage1 работал, stage2 падал».

--- 31.08 ~03:55 IST (Фабл): ✅ ПРИЁМКА 866 = GO, ЛИНИЯ СОВЕТА ЗАКРЫТА: настоящий корень (незарегистрированные callsite-ы стадий) закрыт cef55b57, реверт регистрации валит тест честно, occurrence-стрим непрерывен, стражи целы. Кандидат l76. После посадки — живая проба Совета браузером (honest+thinking) как финальное доказательство.

📖 Правила обогащения этого тикета: WEB-449 (канон для любого агента).
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-186","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-30T22:14:23.449Z