WEB-457 · Задача · UX · web
Чистка шестерёнки: пользователю — опыт подписчика; ключи/env/runtime → /admin (ЖДЁТ выбора owner: BYOK А или Б)
Закрыт
P1 · важно
ведёт: —
эпик: WEB-452
Суть
По SETTINGSAUDIT-REPORT (полная опись полей там): оставить пользователю модели/операторов/голос/язык/интерфейс/своих агентов; общие ключи, URL сервисов, env видеодвижка, fallback, тюнинг → /admin. BYOK: вариант А удалить из пользовательского продукта (рекомендация), вариант Б отдельная интеграция для paid/team. РЕАЛИЗАЦИЯ СТАРТУЕТ после ответа owner А/Б.
[01.09 19:10Z] РЕШЕНИЕ OWNER: вариант А в жёсткой форме — обычному пользователю вставка СВОИХ ключей недоступна ВООБЩЕ, командам тоже НЕ оставляем; ключи вносит только админ (раздача всем через админ-механизм). Волна реализации 1071-gearcleanup поставлена.
[01.09 19:20Z] Уточнение owner: ФОЛБЭКИ остаются пользователю (выбор запасной модели из кураторского списка, без ключей); резолвер admin-defaults как «фолбэк если своё не задано» — уже реализован (WEB-025), не трогаем. Убираем: ключи (все, и командам), URL сервисов, env/runtime, операторский тюнинг. Аддендум волне 1071 передан.
Починено в
l91-9ad68bc2 (прод с 02.09 14:10; впервые l86/l87)
Лента
2026-09-01T23:34:31.781Z · Fable[02.09 00:35Z Фабл, сверка после перезапуска] gearcleanup-1071 сдан (6936f6e, 57 файлов +995/−1980; база — восстановленный снимок 3b00272 = c8cea8c + addendum). Приёмка безопасности 1084-accgearclean (Luna xhigh) стартовала 23:22Z: граница браузера, POST user/settings 403, admin-gate elevenlabs+video/byok+admin/provider-credentials, фолбэки живы, precedence resolver-а, матрица 20+ route-ов, три вопроса памяти.
2026-09-01T23:57:20.865Z · Fable[02.09 00:58Z Фабл] Приёмка 1084-accgearclean: REJECT (6936f6e). F-1 HIGH: maskManagedCredential отдаёт секрет ≤4 символов открытым (admin GET/POST). F-2 HIGH: /api/admin/provider-credentials malformed JSON → 500, NUL/управляющие принимаются; тот же непойманный req.json() в POST /api/user/settings:458. F-3 HIGH: FactcheckSettings лишился пользовательского выбора curated-провайдеров (enabledProviders), хотя store/run path его поддерживают. Подтверждено: граница браузера (ключи не уходят), POST user/settings 403 без стирания, GET нетронут, admin-gate на elevenlabs+video/byok/**, allowlist провайдеров, precedence resolver-а, матрица 30 route-ов. Доработка 1089-gearcleanup2 в очереди A1. Отчёт: A1 /home/ubuntu/waves/ACCGEARCLEAN-REPORT.md.
2026-09-02T00:33:26.987Z · Fable[02.09 00:40Z Фабл] Ре-приёмка 1095-accgearcleanup2 (7dc2f440): REJECT. F-1 закрыт; F-2 остаток: POST user/settings принимает U+2028, не-объект JSON и 1 MiB; F-3 остаток: enabledProviders из FactcheckSettings не доходят до FactcheckPanelDrawer providerIds. Второй REJECT того же класса → третий круг 1099-gearcleanup3 с изменением устройства: ОДИН общий guard тела запроса для обоих маршрутов + сквозной тест store→drawer→run. Отчёт: A1 /home/ubuntu/waves/ACCGEARCLEANUP2-REPORT.md.
2026-09-02T01:43:58.237Z · Fable[02.09 01:45Z Фабл] Круг 3 (f837f123, общий requestBodyGuard 512 KiB + сквозной путь providers store→drawer→run): приёмка 1101 — REJECT по двум остаткам: (а) guard принимает валидный JSON при не-JSON Content-Type; (б) «user/settings принимает 4097 байт» — это НЕ дефект (лимит 4096 относится к значению credential в admin-маршруте, а не к телу настроек) — критерий приёмки был сформулирован мной неточно. F-1/F-3/admin-gate/1MiB/сьюты — PASS. РЕШЕНИЕ: круги 2+3 идут в l86 (cherry-pick в l86-candidate) как существенное улучшение безопасности; хвост Content-Type — волна 1103-gearcleanup4 → l87. Отчёт: A1 /home/ubuntu/waves/ACCGEARCLEANUP3-REPORT.md.
2026-09-02T01:58:41.498Z · Fable[02.09 02:00Z Фабл] gearcleanup4 сдан (9a90e3c48, 2 файла: Content-Type в requestBodyGuard + тесты на два разных лимита). Приёмка 1105 поставлена; посадка — l87. В l86 идут круги 1071+1089+1099.
2026-09-02T02:12:48.770Z · Fable[02.09 02:15Z Фабл] Приёмка 1105-accgearcleanup4: ACCEPT (9a90e3c48: Content-Type guard, матрица, два лимита, регрессии). Линия WEB-457 полностью зелёная: 1071+1089+1099 в l86 (собирается), 1103 → l87. Отчёт: A1 /home/ubuntu/waves/ACCGEARCLEANUP4-REPORT.md.
2026-09-02T02:19:33.121Z · Fable[02.09 02:25Z Фабл] 🛬 ПОСАЖЕН В l86 (A1, commit 3d23ac475f30a19719c42aefea4b656a65eceffc, артефакт me2-standalone-linux-arm64-3d23ac475-20260902T021427Z sha 0885c670…, аттестация owner-ключом fable-a2-l86, сухой прогон :3011 paidReady TRUE, флип nc-a1 + nc-a1-indexing, paid 200 публично). Журнал посадки — WEB-320. чистка шестерёнки круги 1071+1089+1099 (F-1/F-2/F-3 закрыты). Хвост Content-Type (1103, ACCEPT) — l87. Закрываю; хвост отслеживается в WEB-320/l87.
2026-09-02T04:14:59.598Z · Fable[02.09 05:55Z Фабл] 🛬 ПОСАЖЕН В l87 (A1, commit e94b2121c819781365626093f9f83f8680fe8bac, артефакт me2-standalone-linux-arm64-e94b2121c-20260902T040954Z sha 003301cf…, аттестация fable-a2-l87, сухой прогон :3011 paidReady TRUE после синхронизации SPEND_MIGRATION_SET_SHA256, миграции web393e/web393f применены, флип nc-a1 + nc-a1-indexing, paid 200 публично). gearcleanup4 (9a90e3c48, Content-Type guard) на проде — линия закрыта полностью.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-457","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-02T16:37:51.193Z