WEB-485 · Задача · Чат · web
Пикер моделей: фильтры «швидкий вибір / провайдери / групувати за» не работают; «звёздочка» не добавляет модель в «Обрані»
Закрыт
P1 · важно
ведёт: —
Суть
Owner 02.09 17:03 (4-й скриншот прода l91, «Вибір моделі»): «все эти переключалки-фильтры не работают; если выбрать звёздочкой пару моделей, они не появляются в разделе избранное». Зацепки: src/components/chat/ModelPicker.tsx — providerFilter/groupBy локальный state (:181–182), filteredModels useMemo (:259–265) без groupBy в зависимостях; favoriteModels/toggleFavorite из стора (:141–142; src/store/useStore.ts, src/lib/models/picker.ts). Гипотеза: персистентность избранного через /api/user/settings задета setsec-1072 (WEB-456, маскирование) или gearcleanup (WEB-457). План: волна 1276-pickerfilters (A1): воспроизведение Playwright на проде под QA (скриншоты, сеть, консоль) → корень по каждому элементу → минимальный фикс + рендер-тесты + тест персистентности избранного → приёмка → l92. Связано: WEB-482/483/484 (тот же ModelPicker; слияние координатором), WEB-459 (ProviderFilterButton/ProviderLogo).
Лента
2026-09-02T18:02:47.864Z · Fable[A1 18:15 Фабл] Волна 1276-pickerfilters сдана: коммит f8298dac86 (ветка pickerfilters-1276, база l91-candidate), с воспроизведением на проде под QA (evidence A1 /home/ubuntu/waves/PICKERFILTERS-EVIDENCE/, отчёт PICKERFILTERS-REPORT.md — таблица «элемент → корень → фикс → тест», напр. фильтр Google: 34 → 6 моделей). Дальше: приёмка 1302-accpickerfilters (A1, другой verifier: все кнопки/комбинации, персистентность избранного через мок API, негатив на корень) → GO → слияние пакета пикера (WEB-482/483/484/485) в l92-candidate → посадка → проверка owner-ом. Бандл: A1 /home/ubuntu/mirrors/lines/pickerfilters-1276.bundle; A2 ref pickerfilters-1276/head.
2026-09-02T18:03:13.742Z · Fable[A1 18:18 Фабл] Уточнение по отчёту 1276: заявленный отказ фильтров/избранного на проде (SHA 9ad68bc2) под QA НЕ воспроизвёлся — provider-фильтр 19/4/6/5, быстрый выбор и группировка работают (локальный state), звезда → POST /api/user/settings 200 → после reload модель в «Обрані»; гипотеза setsec-1072/gearcleanup не подтверждена. Реально исправлено: Reset не возвращал вкладку «Усі»; у звезды не было type/aria-имени/aria-pressed. Owner-у 18:18 заданы уточняющие вопросы (Safari «Частный доступ»? модели OpenRouter или встроенные? проверка «Обрані» до/после reload?). Приёмка 1302 идёт на текущий диф; при новых данных от owner-а — доп. волна.
2026-09-02T18:11:55.685Z · Fable[A1 18:30 Фабл] Owner 02.09 18:09 (voice, перепроверил в приватном окне): звезда сама по себе работает; ломается ПОСЛЕ добавления модели из каталога OpenRouter (напр. DeepSeek) в общий список операторов и звезды на ней — все прежние избранные пропадают, список встроенных (GPT…) резко сокращается. На проде в это время никто ничего не менял (l91 с 14:10). → волна 1304-pickerfavorites (A1, база линии 1276): репро сценария owner-а под QA (звёзды на встроенные → добавить OpenRouter-модель → звезда → снимки/тела запросов) → корень (persist-state replace вместо merge / ID / частичный PUT затирает поля / hydration) → фикс + интеграционный тест сценария → приёмка → l92.
2026-09-02T18:41:45.630Z · Fable[A1 18:50 Фабл] Приёмка 1302-accpickerfilters = NO-GO (A1 /home/ubuntu/waves/ACCPICKERFILTERS-REPORT.md, независимые рендер-тесты 5/7): два блокера — (1) UI-обработчик поиска сбрасывает состояние provider/quick-pick при вводе текста («keeps provider and quick-pick state when search is added» FAIL); (2) дубликаты серверных favorite ID не нормализуются («normalizes duplicate server favorite IDs» FAIL). Подтверждено: filterModels чист, groupBy в зависимостях, Reset → «Усі», звезда с aria/data-атрибутами, API settings не маскирует modelPicker; негативные мутации ловятся тестами. Оба блокера передаются в волну 1304-pickerfavorites (та же линия 1276; плюс сценарий owner-а «OpenRouter-модель + звезда → пропали избранные» — дубликаты ID выглядят как вероятный корень). Также подтверждено: веб на малинке больше не крутится (её :3010 ведёт на A1, live-sha 9bee5955) — все наблюдения owner-а сделаны на проде.
2026-09-02T18:56:43.751Z · Fable[A1 19:15 Фабл] Волна 1304-pickerfavorites сдана: коммит 48eadcce65 (ветка pickerfavorites-1304 = 1276 + фикс) — сценарий owner-а воспроизведён на проде под QA (evidence PICKERFAVORITES-EVIDENCE/); корень: add/star писали несогласованный picker state (useStore.ts:4176–4217) + частичный PUT /api/user/settings мог заменять соседние поля (route.ts:346–371) → серверный merge; тесты 10/10 + settings API 17/17 (включая WEB-456 secret boundary). Дальше: приёмка 1318-accpickerfavorites (A1) + два блокера приёмки 1302 (поиск сбрасывает фильтры; дубли favorite ID) → волна 1313-pickerfilters2 (M4, на базе 1304, единая canonicalizeModelId с 1301/1317) → l93.
2026-09-02T19:35:16.825Z · Fable[A1 20:20 Фабл] Приёмка 1318-accpickerfavorites = GO (сценарий owner-а закрыт: согласованный picker state + серверный merge частичных настроек; deferred-блокеры линии 1276 — поиск сбрасывает фильтры, дубли favorite ID — в волне 1313 на M4). Линия 1276+1304 → l93-candidate (02d032e4); сборка l93 запущена 20:20.
2026-09-02T20:18:39.249Z · Fable[A1 20:17 Фабл] ПРОД = l93: pickerfilters-1276 + pickerfavorites-1304 (приёмка 1318 GO) в проде. Owner-у отправлен запрос глазами проверить фильтры/избранное. Круг по фильтрам 1313-pickerfilters2 (M4) продолжается для остаточных находок.
2026-09-02T20:22:03.452Z · Fable[A1 20:25 Фабл] 1313-pickerfilters2 сдана: коммит 1b1e92d3de (M4), круг 2 по фильтрам пикера. Приёмка — в составе пакета пикера (общие файлы availability/models/ModelPicker, единая canonicalizeModelId).
2026-09-02T23:20:22.156Z · Fable[A1 03:10 Фабл] Приёмка 1391-accpickerpack (слитый пакет 1360) = NO-GO (M4, отчёт /Users/milamarty/waves/ACCPICKERPACK-REPORT.md). Подтверждено: единые источники без дублей, фантомы (WEB-483), фильтры/избранное (WEB-485), model row (WEB-484), иконки (WEB-488), корректность слияния. Блокеры: (1) stale-текст о3 остался в runtime-словарях messages/en|ru|uk.json (ModelPicker читает useTranslation, а не modelPickerCopy.ts); (2) секция Recent обходит общие фильтры (отдельный getVisibleRecentModels). Круг 2 = волна 1409-pickerpack2 (M4, Luna high, от 6be63c94).
2026-09-02T23:35:53.389Z · Fable[A1 04:20 Фабл] Волна 1409-pickerpack2 сдана: коммит 1c63be7f84 (о3-строка во всех messages/*.json; Recent через общий filterModels). Приёмка 1415-accpickerpack2 (M4, Sol high, в очереди) → l95 вместе с preflight3 (WEB-482).
2026-09-02T23:53:43.317Z · Fable[A1 06:00 Фабл] Приёмка 1415-accpickerpack2 = NO-GO (M4, отчёт /Users/milamarty/waves/ACCPICKERPACK2-REPORT.md): Recent через общий фильтр — закрыт; регресс четырёх линий PASS; блокер: старая строка о3 осталась в messages/be.json и et.json, в pt.json ключа нет, тест пропускал каталоги без ключа. Круг 3 = волна 1423-pickerpack3 (M4, Luna high, от 1c63be7f): все 103 каталога + строгий тест.
2026-09-03T00:35:31.322Z · Fable[A1 08:50 Фабл] Волна 1423-pickerpack3 сдана: коммит db11090fbc (все 103 каталога, строгий тест). Приёмка 1435 (M4, Sol high, в очереди) → l95.
2026-09-03T01:05:47.061Z · Fable[A1 10:25 Фабл] Приёмка 1435-accpickerpack3 = GO (M4, Sol): все 103 каталога, строгий тест, Recent — подмножество, регресс четырёх линий. Пакет пикера (db11090f) идёт в l95-candidate; preflight круг 4 (WEB-482, 1418) сольётся сверху.
2026-09-03T05:15:09.428Z · Fable[A1 Фабл] ПОСАЖЕНО в l95 (pickerpack3 через слияние 1434).
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-485","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-03T06:12:22.150Z