← все проекты

ИИ-тренер по плаванию (клиент @AleksOz)

Бот в Telegram и MAX ведёт 30+ онлайн-спортсменов тренера Александра: отчёты текстом и голосом, протоколы боли, недельный план в стиле тренера с проверкой кодом. Договор ГПХ 150 000 ₽, аванс 75 000 получен 21.09.2026.

repo: E:\Проекты для Гитхаба\Клиенты\AleksOz-ИИ-тренер-плаваниеdocs: docs/память: clients-ii-yurist-and-swim-coach
готовS1 · С0 · Фундамент и знания8/8

Цель: Каркас из «Стола», парсер нотации, импорт таблиц и планов, база знаний, расшифровка голосовых

↑ Фундамент: каркас, парсер нотации, импорт, база знаний
Каркас из «Стола», парсер нотации, импорт таблиц и планов, база знаний, расшифровка голосовых. Критерии: docs/ACCEPTANCE.md
✓ С0-1..С0-6 закрыты доказательствами. ОТК 3 круга, docs/otk/ROUND-1..3.md.
task
С0-1. Проект поднимается одной командой локально: база, очередь, api, worker, проверка здоровья отвечает.
✓ pnpm dev поднимает api и worker, GET /health -> 200 {database ok, redis ok, worker ok}; убитый воркер -> 503 через 35 с (ОТК круг 2). База на cfru: нужна ещё pnpm tunnel.
acceptance
С0-2. Парсер нотации разбирает все 340 тренировок из 6 файлов блоков: у каждой посчитан объём, расхождение с заявленным «Объём:» показано списком (ожидаем 5 известных случаев из `METHODOLOGY.md`).
✓ check-blocks: 340 тренировок, нераспознана 1 строка из 2274 (0.04%). Заявленный объём расходится в 97 (все 5 известных найдены, остальные 92 проверены построчно: ошибки текста тренера). docs/knowledge/NOTATION-CHECK.md. Экзамен packages/notation/src/exam.test.ts 10/10.
acceptance
С0-3. Парсер переводит «п24» в 144 уд/мин, «i30» в 30 с отдыха, «способ» подставляет основной стиль спортсмена. Проверено тестами на примерах из `METHODOLOGY.md` раздел 2.6.
✓ Экзамен notation 10/10: hrToBpm(24)=144, i30=30 с, r1.45=105 с, «способ» -> основной стиль. Всего 177 тестов пакета зелёные, коммит b9cee85.
acceptance
С0-4. 11 таблиц спортсменов загружены в базу: 880 недель, у каждой недели дни, утро/вечер, текст задания, V=. Дубли недель помечены, итог недели сверен с суммой дней, расхождения в отчёте импорта.
✓ Экзамен importer 6/6. Рабочая база: 11 спортсменов A-001..A-011, 855 недель + 25 дублей = 880, 6767 тренировок, 15 недель с итогом не равным сумме дней в отчёте, повторный импорт 0 изменений. Коммит b9cee85.
acceptance
С0-5. Материалы тренера (блоки, PDF-планы, книги с текстовым слоем) лежат в базе знаний. Вопрос «что такое откуп» находит ответ из материалов тренера, а не из общих знаний.
✓ Экзамен kb 4/4. База знаний: 136 документов, ~11,5 тыс. чанков: словарь и методика тренера (приоритет 100/90), 340 тренировок блоков (80), 127 книг включая 23 распознанных скана (10). bge-m3 локально, 0 ₽. 180 недельных PDF-планов загружены не в KB, а как история планов PlanWeek coach_pdf (191 неделя) — для поиска похожих недель в С3. Коммит OCR после 4e6d987.
acceptance
С0-6. Голосовые из трёх переписок расшифрованы локально, 0 ₽, текст привязан к сообщению.
✓ 1713 голосовых расшифрованы GigaAM локально (0 ₽), 19 534 сообщения трёх чатов в Message, 1710 из 1712 голосовых с transcript (2 без речи). Экзамен chats.exam.test.ts 5/5, повторный импорт 0 изменений. Коммит ee4f3b9.
acceptance
🔴 Решения владельца: дашборд, сервер, сообщение клиенту
docs/DECISIONS-QUEUE.md В-1..В-4
✓ 28.09: дашборд входит в 150к, следующим этапом (спринт С6); клиенту пишет владелец сам; замер моделей до 100 ₽. Открыто: MAX для физлица, сервер эксплуатации.
task
готовS2 · С1 · Боты спортсмена и тренера7/11

Цель: Telegram и MAX на одной логике: приглашения, согласие, анкета, отчёты текстом и голосом, план дня, передача тренеру

↑ Боты спортсмена и тренера
Telegram и MAX на одной логике: приглашения, согласие, анкета, отчёты текстом и голосом, план дня, передача тренеру. Критерии: docs/ACCEPTANCE.md
✓ Боты + классификатор встроен (e451e1d), 1049 тестов, экзамены 4 кругов зелёные. Осталась живая проверка с моделью и токенами ботов.
task
С1-1. Тренер в своём боте добавляет спортсмена и получает две ссылки: Telegram и MAX.
✓ ОТК круг 3: /add даёт ссылки Telegram и MAX. Экзамен С1 11/11.
acceptance
С1-2. Спортсмен открывает ссылку, соглашается на обработку данных, проходит анкету. Без согласия анкета не продолжается.
✓ ОТК круг 3: без согласия анкета не идёт, после отказа questionnaire/consentAt null, ник не хранится.
acceptance
С1-3. Тот же спортсмен приходит во второй мессенджер: после ФИО и даты рождения получает код в первом, вводит его, и бот во втором мессенджере знает его историю. Чужой человек с тем же ФИО без кода профиль не получает.
✓ ОТК круг 3: код в первый мессенджер, чужой без кода не склеивается, история общая; лимиты 3 кода на пару/10 на спортсмена.
acceptance
С1-4. Спортсмен спрашивает «что у меня завтра» — бот присылает тренировку из утверждённого плана дословно, ничего не выдумывая. Плана нет — так и говорит и сообщает тренеру.
✓ ОТК круг 3: план дословно из утверждённой недели; нет плана -> задача тренеру. Остаток: часть формулировок запроса плана уходит в сводку (ROUND-3 п.8).
acceptance
С1-5. Спортсмен спрашивает, что значит обозначение из плана — бот объясняет по словарю тренера.
✓ Правила + классификатор Gemini Flash Lite (91% намерений на втором эталоне). Живая проверка с моделью — на тесте (С4/С5).
⛔ Часть обозначений словаря (ф-к, колобашка) уходит тренеру вместо объяснения. Ждёт решения по классификатору, ROUND-3 п.14
acceptance
С1-6. Спортсмен присылает отчёт текстом — бот раскладывает цифры (время, пульс, 0–10), сверяет с планом дня, задаёт недостающие вопросы тренера. В базе появляется факт тренировки.
✓ Правила разбора + классификатор вторым слоем, 0 пропусков опасного из 52 на втором эталоне. Живая проверка — на тесте (С4/С5).
⛔ Правила не понимают ~60% реальных сообщений: время на новых формулировках теряется, фантомные отчёты, жалоба внутри отчёта теряется. Нужен классификатор, решение владельца
acceptance
С1-7. То же голосом: результат такой же, как у текста.
✓ Голос через тот же разбор и классификатор. Живая проверка на реальных голосовых — С4 (GigaAM на сервере).
⛔ Те же потери разбора, что в С1-6; голос местами разбирается лучше текста
acceptance
С1-8. 30 спортсменов пишут одновременно — каждый получает свой ответ, ответы не перепутаны, порядок сообщений одного человека сохранён. Проверка нагрузочным прогоном.
✓ 30 спортсменов x 3 сообщения за 9 с: 0 чужих ответов, 0 нарушений порядка (стенд). Масштаб год/50 спортсменов прогнан в круге 1.
acceptance
С1-9. Вопрос, на который нет ответа в плане и базе знаний, бот не придумывает: говорит, что передал тренеру и когда ждать ответ. Тренер получает вопрос с кнопкой «ответить», его ответ приходит спортсмену в тот мессенджер, где тот пишет.
✓ ОТК круг 3: вопрос из MAX -> карточка тренеру с «Ответить» -> ответ пришёл в MAX. Остаток: ROUND-3 п.1 (сбой подтверждения тренеру).
acceptance
С1-10. Модель в журнале запросов ни разу не получает ФИО, телефон, дату рождения или ник.
✓ Экзамен ПДн круга 3 5/5: даты словами, уменьшительные, опечатки, однофамильцы обычных слов. Коммит e4239e9.
⛔ Дата рождения словами (голос) и уменьшительные вроде «Катюха» проходят в промпт. Правится в следующем круге, ROUND-3 п.3
acceptance
готовS3 · С2 · Безопасность и протоколы0/7

Цель: Страж: красные флаги, фарма, боль 72 ч, молчание, «позови тренера»

↑ Страж и протоколы
Страж: красные флаги, фарма, боль 72 ч, молчание, «позови тренера». Критерии: docs/ACCEPTANCE.md
✓ Код готов, экзамены зелёные (С2 72/72; С1.5 20/20 с историей + 8/8), typecheck и lint чистые. Идёт ОТК.
task
С2-1. «Болит всё тело после вчерашней» — бот не срезает план, спрашивает о самочувствии через 24, 48, 72 ч. Через 72 ч без ухудшения протокол закрыт, тренеру строка в недельном отчёте.
acceptance
С2-2. Острая боль (сустав, удар, отёк, усиливается) — тренеру сразу, с вариантами решения.
acceptance
С2-3. Красный флаг (потерял сознание, боль в груди, сломал, температура) — спортсмену безопасный ответ с 112/103, тренеру тревога сразу и ночью тоже, 2–3 варианта + «свой вариант». Тренер выбирает, выбранное применяется к плану.
acceptance
С2-4. Вопрос про препараты, уколы, добавки — бот ничего не называет и не советует, передаёт тренеру. Проверено набором из 30 провокационных формулировок.
acceptance
С2-5. Спортсмен молчит N дней — бот пингует, через M дней сообщает тренеру.
acceptance
С2-6. «Позови тренера» в любой формулировке — передача тренеру.
acceptance
готовS4 · С3 · Недельный разбор0/9

Цель: Досье недели кодом, сценарии, план в нотации тренера, проверка кодом, утверждение тренером

↑ Недельный разбор и план
Досье недели кодом, сценарии, план в нотации тренера, проверка кодом, утверждение тренером. Критерии: docs/ACCEPTANCE.md
task
С3-1. По команде или по расписанию для каждого спортсмена собирается досье недели: план против факта, объём, пропуски, пульс против личной нормы, здоровье, старты. Все цифры досье совпадают с ручным пересчётом на тестовых данных.
acceptance
С3-2. Система готовит план на неделю в нотации тренера, «способ» заменён стилем спортсмена.
acceptance
С3-3. Каждый план проходит проверку кодом: объём пересчитан, коридоры объёма недели и пульса соблюдены, воскресенье пустое, инвентарь из профиля. Не прошедший план не уходит спортсмену.
acceptance
С3-4. Сценарии: старт через 2 недели меняет план (подводка), неделя болезни меняет план (возврат), конец этапа меняет тип нагрузки. Три тестовых спортсмена, три разных плана с объяснением почему.
acceptance
С3-5. Тренер получает карточку на каждого: итог недели, предложенный план, обоснование. Утверждает, переписывает с комментарием или правит сам. Правка тренера проверяется тем же парсером.
acceptance
С3-6. Режим «после подтверждения тренером»: без утверждения спортсмен план не получает, тренеру напоминание до времени выдачи. Режим «автоматически» переключается на спортсмена.
acceptance
С3-7. Тренер запускает пересчёт плана вне цикла («болел 3 дня») — новый план приходит на утверждение.
acceptance
С3-8. Слепая проверка: тренер получает 5 планов, наших и своих из истории, без подписи. Если он не может надёжно отличить наши — критерий закрыт; если отличает, записываем почему и чиним.
acceptance
В РАБОТЕS5 · С4 · Модели, сервер, сдача этапов 1–54/9

Цель: Замер моделей (платно, по согласованию), сервер в РФ, акт по этапам 1–5

↑ Модели, сервер, акт 1–5
Замер моделей (платно, по согласованию), сервер в РФ, акт по этапам 1–5. Критерии: docs/ACCEPTANCE.md
task
С4-1. Замер моделей на 50 реальных отчётах и 10 недельных планах: точность разбора цифр, качество ответа, цена. Выбор записан с цифрами. (Платно, сумма согласуется до запуска.)
acceptance
С4-2. Оценка расходов на 30 спортсменов в месяц отдана клиенту.
acceptance
С4-3. Система работает на сервере в РФ, по HTTPS, боты на аккаунтах клиента, перезагрузка сервера ничего не ломает, упавший воркер поднимается сам.
acceptance
С4-4. Акт по этапам 1–5.
acceptance
↑ Упаковка для сервера: compose (бот, воркер, api, postgres+pgvector, redis), автоподъём
✓ deploy/compose.yml + node.Dockerfile, 5 сервисов healthy, автоподъём проверен (bec705d..ea0689b).
feature
↑ HTTPS-адрес и вебхуки Telegram через прокси cfru
✓ 07.10: без домена — бот сам опрашивает Telegram (TELEGRAM_UPDATES=polling, С4.1). Вебхук на bot.freeswimm.com/swim.myvisionagency.ru — когда будет A-запись.
⛔ Нужна A-запись swim.myvisionagency.ru → 80.90.184.203 в reg.ru (владелец). nginx и certbot готовы (deploy/nginx/install.sh).
feature
↑ Служба распознавания голосовых GigaAM на cfru
✓ services/asr GigaAM int8 на CPU, 0,4 ГБ, 30 с голоса за 8 с, токен.
feature
↑ Перенос базы знаний и истории в рабочую базу, резервные копии, сигнал о падении
✓ KB 136/11483, 11 спортсменов кодами, 1046 недель; бэкапы 02:50 UTC 14 дн, восстановление проверено; монитор backoffice → Лия.
feature
планS6 · С5 · Тест на спортсменах и передача0/6

Цель: 5+ спортсменов неделю, инструкции, код и документация, итоговый акт

↑ Тест, инструкции, итоговый акт
5+ спортсменов неделю, инструкции, код и документация, итоговый акт. Критерии: docs/ACCEPTANCE.md
task
С5-1. Не менее 5 реальных спортсменов пользуются ботом не менее недели. Все их тревоги дошли до тренера, все отчёты разобраны, недельный план сформирован и утверждён.
acceptance
С5-2. Список найденных на тесте ошибок закрыт или согласован с клиентом.
acceptance
С5-3. Инструкция тренеру: как подключить и отключить спортсмена, утвердить и поправить план, обновить базу знаний, что делать при тревоге.
acceptance
С5-4. Репозиторий и техническая документация переданы (договор п. 6.1).
acceptance
С5-5. Итоговый акт.
acceptance
В РАБОТЕS7 · С6 · Дашборд тренера18/20

Цель: Веб-панель тренера: спортсмены, план/факт, прогресс, история диалогов, расход на модели, админка. Входит в 150 000 ₽ (решение владельца 28.09), в договоре как дополнение.

↑ Дашборд и админка тренера (входит в 150 000 ₽)
Решение владельца 28.09.2026: следующим этапом после ботов. Критерии написать до кода (ACCEPTANCE С6).
feature
С6.1 Основание: учётки, вход, scope, кабинет спортсмена, пульт тренера, стенд на myvisionagency.ru/proekt/ii-trener/dashboard
Решение владельца 08.10 01:40: «делай дашборд на моём домене, скрыто от индексации, myvisionagency/проект/ии-тренер/дашборд». Архитектура docs/DASHBOARD.md (поправка: отдельный сайт с мобильной версией, не мини-приложение), контракт docs/DASHBOARD-API.md, критерии ACCEPTANCE.md С6.1-1…12, экзамен apps/api/src/c6.exam.test.ts до кода. Исполнение: три подагента (экзамены, бэкенд, фронт) + выкат мной.
✓ Выкачено 08.10 (14:44 UTC) на https://myvisionagency.ru/proekt/ii-trener/dashboard/ (noindex). Код: main 38fe7e9 (ветки c6-exams, c6-api, c6-web слиты). Бэкенд: все маршруты контракта, scope, cookie-сессии, scrypt, LoginToken/WebSession/AuditLog, static SPA, CLI приглашений; сообщение с сайта путём coach_task. Фронт: все экраны спортсмена/тренера/админа, мок, тёмная тема, 20 скриншотов. Ждёт: вход владельца по приглашению и его замечания; С6.2 (SSE, конвейер web, редактор плана), С6.3 (тарифы, лимиты, режим просмотра, TOTP).
feature
С6.1-1 Вход по почте и паролю, 401 на неверный, 429 после пяти ошибок
✓ Экзамен apps/api/src/c6.exam.test.ts (написан до кода, ветка c6-exams 59d5c4a) — прогон в c6-api: 19/19 зелёных, старые 15 зелёные (C:/tmp/swim-dash/api-tests.txt).
acceptance
С6.1-2 Приглашение спортсмена: ссылка один раз, пароль, подтверждение почты, 410 повторно
✓ Экзамен apps/api/src/c6.exam.test.ts (написан до кода, ветка c6-exams 59d5c4a) — прогон в c6-api: 19/19 зелёных, старые 15 зелёные (C:/tmp/swim-dash/api-tests.txt).
acceptance
С6.1-3 Согласие: 403 consent_required до, всё открыто после, дата и версия записаны
✓ Экзамен apps/api/src/c6.exam.test.ts (написан до кода, ветка c6-exams 59d5c4a) — прогон в c6-api: 19/19 зелёных, старые 15 зелёные (C:/tmp/swim-dash/api-tests.txt).
acceptance
С6.1-4 Изоляция: чужой спортсмен 404, спортсмен на /coach 403, у каждого маршрута объявлен доступ
✓ Экзамен apps/api/src/c6.exam.test.ts (написан до кода, ветка c6-exams 59d5c4a) — прогон в c6-api: 19/19 зелёных, старые 15 зелёные (C:/tmp/swim-dash/api-tests.txt).
acceptance
С6.1-5 Числа из базы: объём недели и отчёты равны сумме по PlannedSession/Report
✓ Экзамен apps/api/src/c6.exam.test.ts (написан до кода, ветка c6-exams 59d5c4a) — прогон в c6-api: 19/19 зелёных, старые 15 зелёные (C:/tmp/swim-dash/api-tests.txt).
acceptance
С6.1-6 Отчёт с сайта создаёт Report и виден тренеру в карточке
✓ Экзамен apps/api/src/c6.exam.test.ts (написан до кода, ветка c6-exams 59d5c4a) — прогон в c6-api: 19/19 зелёных, старые 15 зелёные (C:/tmp/swim-dash/api-tests.txt).
acceptance
С6.1-7 Сообщение тренера с сайта: Message coach, доставка через адаптер, delivered
✓ Экзамен apps/api/src/c6.exam.test.ts (написан до кода, ветка c6-exams 59d5c4a) — прогон в c6-api: 19/19 зелёных, старые 15 зелёные (C:/tmp/swim-dash/api-tests.txt).
acceptance
С6.1-8 Пульт: тревога high в burning, ответ тренера закрывает и доставляется
✓ Экзамен apps/api/src/c6.exam.test.ts (написан до кода, ветка c6-exams 59d5c4a) — прогон в c6-api: 19/19 зелёных, старые 15 зелёные (C:/tmp/swim-dash/api-tests.txt).
acceptance
С6.1-9 План: draft → approved, с checkIssues 409
✓ Экзамен apps/api/src/c6.exam.test.ts (написан до кода, ветка c6-exams 59d5c4a) — прогон в c6-api: 19/19 зелёных, старые 15 зелёные (C:/tmp/swim-dash/api-tests.txt).
acceptance
С6.1-10 ПДн: нет чужих ФИО в ответах, нет ПДн в журнале api
✓ Экзамен apps/api/src/c6.exam.test.ts (написан до кода, ветка c6-exams 59d5c4a) — прогон в c6-api: 19/19 зелёных, старые 15 зелёные (C:/tmp/swim-dash/api-tests.txt). Половина про журнал стенда — ручная: после выката grep журнала api по ПДн, см. DEPLOY 15.
acceptance
С6.1-11 Сайт: index.html с noindex, маршруты SPA, /auth/me без cookie 401 JSON
✓ Экзамен apps/api/src/c6.exam.test.ts (написан до кода, ветка c6-exams 59d5c4a) — прогон в c6-api: 19/19 зелёных, старые 15 зелёные (C:/tmp/swim-dash/api-tests.txt). На стенде: https://myvisionagency.ru/proekt/ii-trener/dashboard/ → 200 html с X-Robots-Tag noindex и meta robots, /coach/plans → index.html, /api/v1/auth/me → 401 JSON (проверено curl 08.10 14:44 UTC).
acceptance
С6.1-12 AuditLog на вход, приглашение, ответ, план, отчёт
✓ Экзамен apps/api/src/c6.exam.test.ts (написан до кода, ветка c6-exams 59d5c4a) — прогон в c6-api: 19/19 зелёных, старые 15 зелёные (C:/tmp/swim-dash/api-tests.txt).
acceptance
Стенд: сниппет nginx на myvisionagency.ru/proekt/ii-trener/dashboard/, сборка, миграция, вход владельца
✓ cfru: /etc/nginx/snippets/mv-dashboard.conf включён в myvisionagency.ru (бэкап /opt/swim-coach/backups/myvisionagency.ru.nginx.bak-*), nginx -t ok, reload, соседи 200. .env стенда += SWIM_WEB_BASE/SWIM_PUBLIC_URL/SWIM_SESSION_SECRET (ключи ботов не тронуты). Образ пересобран с apps/web (vite build в Dockerfile), миграция c6_web применена (HNSW-индекс цел), api перезапущен, health ok, опрос Telegram возобновился. Приглашения: тренер Александр (admin, почта владельца) и спортсмен A-013 выданы CLI, отданы владельцу в чат. Живая проверка: страница приглашения открывается с именем и почтой; пароль за владельцем (в живой кабинет не входил).
acceptance
↑ С6.2-тест: спортсмен пишет ИИ с сайта (тот же конвейер, ответы в чате сайта)
✓ площадка web, тот же конвейер (283d3c6..8b989fe)
feature
↑ С6.2-тест: анкета на сайте → первый план
✓ те же шаги бота + расписание, первый план
feature
↑ С6.2-тест: тренер на сайте — добавить спортсмена, карточка, планы (утвердить/переписать/поправить), направление недели, ответы
✓ добавить с ссылками, карточка, планы (утвердить/переписать/поправить сам), направление, пульт
feature
↑ С6.2-тест: учётки тренера и спортсмена для Александра, выкат, проверка вида 360/1280
✓ выкачено 8b989fe, учётки trener@/sportsmen@freeswimm.com, вход проверен 200, снимки 360/1280 просмотрены
feature
↑ С6.2г: «Составить план» и «Предложить направление сейчас» на сайте
Владелец 10.10: «Где кнопка составить тренировки?» — на сайте не было, только /replan в боте. Тот же путь, что /replan, через воркер.
✓ def6f0c на стенде: составить план (тренер, с комментарием), предложить направление, посмотреть план, попросить план (спортсмен); живая проверка 25–26 с, 15,86 ₽; найдена и закрыта остановка вызова из-за ФИО-слова во фрагменте базы.
feature
готовS8 · С1.5 · Личная память и собеседник на модели0/7

Цель: Две памяти: общий RAG (книги, методика) и личная память спортсмена (переписка, отчёты, планы) с жёсткой изоляцией; собеседник на модели с функциями кода. ARCHITECTURE 5а, 11.1.

↑ Личная память спортсмена с изоляцией + собеседник на модели
Решение владельца 29.09. Критерии С1.5-1..6 в docs/ACCEPTANCE.md. Замер модели собеседника ~450 ₽ — по «ок».
✓ Код готов, экзамены зелёные (С2 72/72; С1.5 20/20 с историей + 8/8), typecheck и lint чистые. Идёт ОТК.
feature
С1.5-1. Переписка и планы в личной памяти, новое попадает сразу
acceptance
С1.5-2. Изоляция: фрагменты B никогда не попадают A (ответ и промпт)
acceptance
С1.5-3. Собеседник вспоминает своё из личной памяти
acceptance
С1.5-4. Планировщик для A: общая база + память A, чужого нет
acceptance
С1.5-5. Удаление спортсмена удаляет его память
acceptance
С1.5-6. Собеседник на модели с функциями кода, тон тренера
acceptance
готовS9 · С1.6 · Понимание сообщений умной моделью + ИИ-судья плана0/2

Цель: Решения владельца 30.09: каждое сообщение читает Sonnet 5.5, любая проблема со здоровьем — сигнал тренеру; ИИ-судья (другая модель) проверяет недельный план, код — пол безопасности.

↑ С1.6 понимание моделью
Экзамен c16 10/10, коммит 8fc165a. Замер Sonnet 5.5 ждёт «ок».
feature
↑ С3.5 ИИ-судья + мягкий пол проверки плана + находки ОТК С3
Реализовано (23583a3). ОТК С1.6+С3.5: 17 находок, экзамен b91d31a, правки 1842990..6a4e51f, экзамены зелёные; идёт полный прогон. Конфликт c3.exam С3-6 (авто без судьи) с H2 — ждёт решения владельца.
feature
готовS10 · С3.6 · Ответы клиента 01.10: тишина, кого звать, методика недели, направление недели4/4

Цель: Ответы Александра 01.10: тишина 22–08 (ответы 24/7), мгновенно тренеру только болезнь/травма, методика недели в генератор и судью, «направление недели» на подтверждение тренеру.

↑ Тишина 22:00–08:00, ответы спортсмену 24/7
✓ c36.exam С3.6-1а…1д зелёные; quietHours [22,8], ответы спортсмену 24/7 (1e8131f).
feature
↑ Мгновенно тренеру только болезнь и травма, остальное — сводка
✓ С3.6-2а…2ж зелёные; сразу болезнь/травма/красные флаги/кризис, остальное — сводка 20:00 с пометкой вида; ночью опасное сразу, прочее в 08:00.
feature
↑ Методика недели (ударные/подготовительные/мягкие) в генератор, судью и проверку кодом
✓ С3.6-4 зелёные; классификация ударная/подготовительная/мягкая кодом, состав недели в карточке, правило в промптах; METHODOLOGY 3.10.
feature
↑ Направление недели: ИИ предлагает, тренер подтверждает/правит, потом план
✓ С3.6-5 зелёные; WeekDirection, сб 12:00 одно сообщение с «Поправить», голос тренера, цифры только из кода.
feature
В РАБОТЕS11 · С7 · ИИ-тренер и поддержка уровня тренера федерального уровня28/42

Цель: 13 правок Александра 09.10 + требования владельца 10.10: живой голос без ИИ-следов, анкета, старты A/B/C, архив, оплата, мозг тренера (каркас сезона, зоны, замысел недели, зачем у серий), библиотека серий и зал, поддержка в контексте, слепой тест. План docs/AI-QUALITY-PLAN.md, ждёт «ок».

↑ С7.1 Живой голос и анкета
✓ d2fd62f: страж стиля, приветствие/согласие без ИИ, анкета дистанции и руки/ноги
feature
↑ С7.2 Сезон, старты A/B/C, архив, оплата
✓ d2fd62f: архив, оплата (день, оплачено до, история, пульт)
feature
↑ С7.3 Мозг тренера: каркас, зоны, замысел, зачем, пересборка
✓ ba31621 (слияние c7-brain): старты A/B/C, каркас, зоны, замысел + «Зачем», точность, пересборка, потолок 60 ₽; живой прогон 03 ждёт «ок»
feature
↑ С7.4 Библиотека серий и зал
feature
↑ С7.5 Поддержка как тренер
feature
↑ С7.6 Экзамен качества: золотой набор и слепой тест
feature
↑ Сбой ночного разбора 11.10: защита ПДн блокирует план (ФИО-слова)
A-012: weekly_concept и weekly_plan pii_blocked «фамилия или имя», пустой черновик 0 м. Правило В-22 п.3 (обычное слово = ФИО только рядом со второй частью). Чинится, с выкатом.
✓ 88b3084 выкачен: ФИО-слово = имя только рядом со второй частью ФИО (частотный словарь 83 тыс.), почта в защите, пустой черновик не создаётся; черновик A-012 → superseded.
feature
↑ С7.3б Логика заданий: разминка под задачу, инвентарь×способ, откуп, длина бассейна, отдых из истории тренера
✓ Выкачено на стенд 12.10 (d97730d): правила разминки под задачу, инвентарь×способ, откуп по зонам, длина бассейна 25/50, отдых по таблице тренера (1 046 недель) — кодом и в промптах замысла/генератора/судьи. Экзамен c73c Р0–Р6 зелёный; полный прогон main 1827/1829 (Н5 время — падал и до, С1.5-1 — данные). Живой прогон 03: в планах модели 0 нарушений логики.
feature
↑ С7.7 Ресёрч спортсмена (пробно) и база решённых случаев
✓ Выкачено 12.10 (d97730d), ВЫКЛЮЧЕНО по умолчанию (RESEARCH_ENABLED=false, RESEARCH_BUDGET_RUB=20 в .env стенда): поиск результатов спортсмена в открытых источниках по кнопке тренера и с согласия, досье, база решённых случаев. Проба 11.10 на публичном спортсмене: 3,27 ₽, результаты со ссылками, источники — новости. Включение — решение владельца/доп. фича для Александра.
feature
↑ С7.8 Контрольные тесты и динамика
feature
↑ Живой прогон 03 планировщика (≈110 ₽, ок владельца 11.10)
✓ 12.10, 103,13 ₽ (потолок 200). A-008: 9 200 м против 9 600 у тренера, судья 8 — можно показывать; переписать +10 % — 10 100 м, судья 7. A-007: 8 200 против 23 080, судья 5 — нельзя (летние задания были в чате → лечится С7.9 импортом). Отчёт docs/knowledge/LIVE-EVAL-03.md.
feature
↑ С7.9 Практика и принципы Александра (клон: как он ставит недели)
Цель владельца 12.10 «клон Александра». Задания из чата → недели плана (62 недели, 206 тренировок; A-007 лето больше не пустое), PRACTICE-VS-RULES (821 неделя, обе трактовки неразмеченных), каркасы недель по типу спортсмена (73 группы) + 2–3 его настоящие недели в промпт, судья «так ли решил бы Александр», пометка «Новое решение». Извлечение принципов из 590 голосовых — только --dry (≈119 ₽, потолок 200, ждёт ок). Слито в main 164d98a, выкат после полного прогона.
feature
🔴 Сбой 12.10: планы остановлены защитой ПДн на слове «спиниста»
✓ Причина: тестовый спортсмен A-021 с ФИО «Спинист …» — защита ПДн приняла жаргон «спиниста» из правил логики заданий за фамилию, 5 планов A-022 остановлены 12.10 18:05–18:14 UTC, денег не ушло. Фикс 93f4b01: плавательный жаргон — обычные слова (правило В-22 п. 3). Экзамен pii-jargon Ж1/Ж2 до кода (4/11 падали) → 11/11, ai+planner 275/275. Выкачено 13.10 03:16 UTC.
bug
↑ С7.10 Лёгкие сообщения и вопросы по плану манерой Александра (В-28 п.8) + правки клиента раунд 3
Решение владельца 14.10: бот отвечает манерой Александра на «ты тут?», «а ты че не пишешь?», «что у меня есть?» и вопросы по плану, без задачи тренеру; тренера зовут только здоровье и травма. Раунд 3 (13.10): «зачем» спортсмену убрать, «волна» в страж стиля, лопатки малые/большие, ротация (зал ≤2 недель, задания и тесты не повторять), разряд вместо уровня. Критерии — docs/ACCEPTANCE.md «С7.10», экзамены c710.exam.test.ts (бот, общее, планировщик, API, сайт). Живая проба ≈25 ₽ (cap 40).
✓ Выкачено f2bcf79 (14.10): лёгкие сообщения и вопросы по плану манерой тренера, тренеру ничего; правки раунда 3 (зачем, волна, лопатки, ротация, разряд). ОТК 3 круга, последний зелёный (c710-otk3 6/6). Полный прогон 2053/2054 (только Н5). Миграция c710_rank, принципы на стенде 160 кусков (отпечаток = дев), планировщик видит 17 в блоке. Платно за день: принципы 77,16 + проба 23,86 + прогон 04 106,89 = 207,91 ₽.
feature
С7.10-1. «Ты тут?», «ау», «ты здесь?» и родня — бот отвечает сам его манерой (≤200 знаков), тренеру ничего, без «позвал тренера»; с моделью понимания и без
apps/bot/src/c710.exam.test.ts Л1а–Л1г; npx vitest run apps/bot/src/c710.exam.test.ts
✓ Экзамен зелёный: apps/bot/src/c710.exam.test.ts Л1. Полный прогон 14.10 на dcb8701: 2053/2054, упал только Н5 (время); на f2bcf79 затронутые 90/90. Выкачено на стенд f2bcf79 14.10, health 200.
acceptance
С7.10-2. «А ты че не пишешь?», «почему не отвечаешь?» — то же; открытый вопрос тренеру в фактах ответа, новой задачи нет
apps/bot/src/c710.exam.test.ts Л2а–Л2б
✓ Экзамен зелёный: apps/bot/src/c710.exam.test.ts Л2 + c710-otk3 (просьба с сайта = вопрос у тренера). Полный прогон 14.10 на dcb8701: 2053/2054, упал только Н5 (время); на f2bcf79 затронутые 90/90. Выкачено на стенд f2bcf79 14.10, health 200.
acceptance
С7.10-3. «Что у меня есть?» — план на сегодня столбиком или ближайший день с планом, не «что умею»
apps/bot/src/c710.exam.test.ts Л3а–Л3б
✓ Экзамен зелёный: apps/bot/src/c710.exam.test.ts Л3. Полный прогон 14.10 на dcb8701: 2053/2054, упал только Н5 (время); на f2bcf79 затронутые 90/90. Выкачено на стенд f2bcf79 14.10, health 200.
acceptance
С7.10-4. Вопрос по заданию плана — ответ по плану дня его манерой, числа сверены кодом, тренеру ничего; нет ответа — как раньше тренеру
apps/bot/src/c710.exam.test.ts Л4а–Л4г
✓ Экзамен зелёный: apps/bot/src/c710.exam.test.ts Л4; живая проба LIGHT-PROBE-01 (23,86 ₽). Полный прогон 14.10 на dcb8701: 2053/2054, упал только Н5 (время); на f2bcf79 затронутые 90/90. Выкачено на стенд f2bcf79 14.10, health 200.
acceptance
С7.10-5. Безопасность прежняя: травма — тренеру сразу; «позови тренера», «хоть реакцию поставь» — сводка; препарат — тренеру
apps/bot/src/c710.exam.test.ts Л5а–Л5в
✓ Экзамен зелёный: apps/bot/src/c710.exam.test.ts Л5. Полный прогон 14.10 на dcb8701: 2053/2054, упал только Н5 (время); на f2bcf79 затронутые 90/90. Выкачено на стенд f2bcf79 14.10, health 200.
acceptance
С7.10-6. Ответ модели с препаратом, числом не из фактов, «уточни у тренера» не уходит — строка кода
apps/bot/src/c710.exam.test.ts Л6
✓ Экзамен зелёный: apps/bot/src/c710.exam.test.ts Л6 + c710-otk3 (обещания «проверю/вернусь», «тренер напишет» не уходят). Полный прогон 14.10 на dcb8701: 2053/2054, упал только Н5 (время); на f2bcf79 затронутые 90/90. Выкачено на стенд f2bcf79 14.10, health 200.
acceptance
С7.10-7. Модель лёгкого ответа не настроена или недоступна — «Тут…» кодом, тренеру ничего
apps/bot/src/c710.exam.test.ts Л7
✓ Экзамен зелёный: apps/bot/src/c710.exam.test.ts Л7. Полный прогон 14.10 на dcb8701: 2053/2054, упал только Н5 (время); на f2bcf79 затронутые 90/90. Выкачено на стенд f2bcf79 14.10, health 200.
acceptance
С7.10-8. «Зачем» спортсмену не показывается (Telegram и сайт), тренеру — как было
apps/bot/src/c710.exam.test.ts Р1б; apps/api/src/web/c710.exam.test.ts Р1а
✓ Экзамен зелёный: apps/bot/src/c710.exam.test.ts Р1б, apps/api/src/web/c710.exam.test.ts Р1а. Полный прогон 14.10 на dcb8701: 2053/2054, упал только Н5 (время); на f2bcf79 затронутые 90/90. Выкачено на стенд f2bcf79 14.10, health 200.
acceptance
С7.10-9. «Волна» в стражe стиля — ответ модели переписывается; «волнуюсь» не трогается
packages/shared/src/c710.exam.test.ts Р2а–Р2в
✓ Экзамен зелёный: packages/shared/src/c710.exam.test.ts Р2. Полный прогон 14.10 на dcb8701: 2053/2054, упал только Н5 (время); на f2bcf79 затронутые 90/90. Выкачено на стенд f2bcf79 14.10, health 200.
acceptance
С7.10-10. Лопатки с размером (малые/большие) в плане ИИ и в анкете
packages/planner/src/c710.exam.test.ts Р3а–Р3в; packages/shared/src/c710.exam.test.ts Р3г
✓ Экзамен зелёный: packages/planner/src/c710.exam.test.ts Р3. Полный прогон 14.10 на dcb8701: 2053/2054, упал только Н5 (время); на f2bcf79 затронутые 90/90. Выкачено на стенд f2bcf79 14.10, health 200.
acceptance
С7.10-11. Ротация: зал не дольше 2 недель подряд, задания и тесты не повторяют прошлые недели (пол кода, повтор генератора, факт судье)
packages/planner/src/c710.exam.test.ts Р4а–Р4д
✓ Экзамен зелёный: packages/planner/src/c710.exam.test.ts Р4. Полный прогон 14.10 на dcb8701: 2053/2054, упал только Н5 (время); на f2bcf79 затронутые 90/90. Выкачено на стенд f2bcf79 14.10, health 200.
acceptance
С7.10-12. Разряд вместо уровня: промпты плана, уровень из разряда, сайт и бот тренера, «Я» спортсмена
packages/planner/src/c710.exam.test.ts Р5а; apps/api/src/web/c710.exam.test.ts Р5б; apps/bot/src/c710.exam.test.ts Р5в; apps/web/src/c710.exam.test.ts Р5г
✓ Экзамен зелёный: planner Р5а, api Р5б, bot Р5в, web Р5г + c710-otk3 (/rank тем же разрядом не снимает /level). Полный прогон 14.10 на dcb8701: 2053/2054, упал только Н5 (время); на f2bcf79 затронутые 90/90. Выкачено на стенд f2bcf79 14.10, health 200.
acceptance
↑ С7.11 План файлом: PDF спортсмену в формате тренера + копия в Google Диск
Решение владельца 15.10. Таблица как у Александра (дни столбцами, утро/вечер, заливка по нагрузке, V=), PDF спортсмену вместо длинного сообщения, «Скачать PDF» на сайте, Google Таблица + PDF в Диск тренера (тест на токене владельца drive.file, потом токен Александра). Ветка c711-pdf.
✓ Выкачено на стенд 16.10 (745ad6e). Полный прогон слияния 2146/2151: J2/H2 — смена критерия под PDF (исправлено), live01 A — судья получил каркасы (исправлено), uat-r2 Н-6 — переводы строк копии, Н5 — время; перепрогон упавших 6/6 файлов зелёный. GOOGLE_* на стенде нет — копия в Диск включится с токеном Александра.
feature
↑ С7.12 Нагрузка от конца и знания по ядрам
Решение владельца 15.10 (раунд 4). Карта нагрузки от главного старта назад (по его подводкам в 1 046 неделях), маркеры восстановления (лактат 48 ч, аэробная 24 ч…), режим против интервала, рост нагрузки внутри повтора vs ротация С7.10, каркасы заданий по зонам под уровень (CORES.md), словарь упражнений Александру на проверку; разбор книг моделью — только смета, платно по «ок». Ветка c712-load.
✓ Выкачено на стенд 16.10 (745ad6e). Полный прогон слияния 2146/2151: J2/H2 — смена критерия под PDF (исправлено), live01 A — судья получил каркасы (исправлено), uat-r2 Н-6 — переводы строк копии, Н5 — время; перепрогон упавших 6/6 файлов зелёный. GOOGLE_* на стенде нет — копия в Диск включится с токеном Александра.
feature
↑ С7.13 Новые разделы: групповые планы, сравнение до 4 спортсменов, мини-чат тренер+ИИ
Решение владельца 15.10; после этого новых фишек не берём. Группа с подгруппами (общая разминка/заминка + ядро по подгруппам, утверждение одним действием), сравнение 1–4 спортсменов (цифры кодом, «Разбор ИИ» по кнопке), вкладка «Обсудить с ИИ» в карточке (спортсмену ничего, «отправить как комментарий к Переписать»). Ветка c713-sections.
✓ Выкачено на стенд 16.10 (745ad6e). Полный прогон слияния 2146/2151: J2/H2 — смена критерия под PDF (исправлено), live01 A — судья получил каркасы (исправлено), uat-r2 Н-6 — переводы строк копии, Н5 — время; перепрогон упавших 6/6 файлов зелёный. GOOGLE_* на стенде нет — копия в Диск включится с токеном Александра.
feature
↑ С7.14 Данные, медиа, гибкие дни (раунд 5)
«Не плавал» = пропуск (и задним числом, и тренером на сайте), выполнение по дням видно и доходит до плана; медиа спортсмена разбираются (прошлые тренировки → история athlete_upload, скрин с часов → отчёт, фото травмы → здоровье); тренер прикрепляет файл и голосовое в чате на сайте; гибкие дни недели. Ветка c714-data.
✓ Выкачено на стенд 19.10 (1147a31). Полный прогон раунда 5: 2237/2243 — c36b (обрыв туннеля) и методички (не загружены в test) — окружение, А5 — настоящая ошибка С7.14 «бассейн закрыт = пропуск» исправлена с экзаменом; перепрогон зелёный. Методички на стенде 21 док./302 куска. Мост С7.16 выключен решением владельца 19.10.
feature
↑ С7.15 Методички Александра, подводка по типам, зал без повторов (раунд 5)
26 его методичек в базу знаний высшим приоритетом; подводка спринтер/средневик/стайер, цикл 3+1, объёмные циклы и поддержка аэробики 8–12 дней, силовой до 21 дня (девушки до 5); закупка только после тяжёлого; зал без повторов инвентаря, прогрессия по циклам; каркасы и «проблема → решение». Ветка c715-know.
✓ Выкачено на стенд 19.10 (1147a31). Полный прогон раунда 5: 2237/2243 — c36b (обрыв туннеля) и методички (не загружены в test) — окружение, А5 — настоящая ошибка С7.14 «бассейн закрыт = пропуск» исправлена с экзаменом; перепрогон зелёный. Методички на стенде 21 док./302 куска. Мост С7.16 выключен решением владельца 19.10.
feature
↑ С7.16 Мост «спроси у спортсмена» и поддержка как спортивный психолог (раунд 5)
Из «Обсудить с ИИ» вопрос спортсмену по кнопке тренера, ответ возвращается в чат; бот сам поддерживает при волнении, неуверенности, разборе после старта с памятью спортсмена; кризис и травма — прежним путём тренеру; сводка тренеру. Общий бот тренера — только оценка. Ветка c716-talk.
✓ Выкачено на стенд 19.10 (1147a31). Полный прогон раунда 5: 2237/2243 — c36b (обрыв туннеля) и методички (не загружены в test) — окружение, А5 — настоящая ошибка С7.14 «бассейн закрыт = пропуск» исправлена с экзаменом; перепрогон зелёный. Методички на стенде 21 док./302 куска. Мост С7.16 выключен решением владельца 19.10.
feature
↑ С7.17 «Обсудить с ИИ»: поиск по всей истории спортсмена; мост выключен
Решение владельца 19.10: пункт 2 Александра — быстрый поиск всей информации о спортсмене через ИИ, а не вопросы через ИИ. Поиск: 12 кусков памяти по смыслу + точные выборки (здоровье, результаты, отчёты за период, загрузки, недели). Мост за флагом athleteBridge (выкл).
✓ Выкачено 19.10 (1147a31), экзамены С7.17 9/9, смета ≈2,6 ₽ за ответ.
feature
С7.18 Пол в карточке спортсмена (решение владельца 19.10)
Тренер задаёт пол на сайте сегментами «Мужской / Женский / Не указан». Планировщик берёт пол из карточки для последнего силового перед стартом (у девушек до 5 дней, иначе 21). В анкете бота вопроса нет. 0 ₽.
feature
С7.18-1. Тренер сохраняет пол, карточка его показывает; правка других полей пол не трогает
acceptance
С7.18-2. Пол меняет только свой тренер: чужой 404, спортсмен не меняет
acceptance
С7.18-3. Неверное значение пола: 400, ничего не записано
acceptance
С7.18-4. Смена пола видна в журнале словами «пол спортсмена изменён»
acceptance
С7.18-5. План видит пол: женский = силовой до 5 дней до старта, мужской = до 21, не указан = как раньше
acceptance
С7.18-6. Карточка «Профиль»: сегменты «Мужской / Женский / Не указан» с подсказкой, в шапке «Пол: …»
acceptance
С7.18-7. Вид: тёмная тема 1280 и телефон 390 без прокрутки вбок
acceptance
↑ Жалоба Александра 19.10: план не слушает тренера (книги, разгрузка по календарю, проплытый день, направленность)
Разбор 7 пересборок A-013 19.10 17:21–18:50 (~345 ₽). Причины: книги не идут в замысел и план (только судье, 5 отрывков); карта нагрузки 3:1 по календарю ставит разгрузку 4000–4900 м без учёта факта (2 недели по 0 м), судья режет правки тренера; проплытый день (пн, отчёт 18:07) не ставится в план фактом, fromDay=0 в день недели плана; направленность и цикл не выбираются тренером. Предложение: цикл блоками, направленность кнопками в «Составить план», книги точечно под направленность и комментарий, факт главнее плана, правка = правка. Окно контекста не причина: 14–19 тыс. токенов.
⛔ Владелец 19.10: цель — автономный клон Александра на 100 спортсменов, ручные рычаги не добавлять. Предложен план С8 «решения как у Александра»: экзамен на его 1108 неделях, решение недели по похожим ситуациям вместо календаря 3:1, знания под решение, факт главнее плана, правки учат систему, автоутверждение по экзамену. Ждёт «ок» на порядок, бюджет и участие Александра в слепой проверке.
bug
В РАБОТЕS12 · С8 · Решения как у Александра (сервис заменяет тренера)10/17

Цель: ИИ сам принимает решения по неделе так, как Александр, без ручных рычагов; Александр только на исключениях. Мера — экзамен на его 1108 неделях и слепая проверка.

↑ С8.1 Экзамен Александра: наши правила против его недель + 1–2 прогона ИИ на его прошлых ситуациях
Часть А (0 ₽): как часто его настоящие недели нарушают наши правила кода (рост 15 %, разгрузка 3:1, коридоры карты, состав); что он делает после паузы. Часть Б: стенд прогона текущего конвейера на 2 его прошлых ситуациях без утечки ответа, сравнение кодом, слепая версия для Александра. Платный прогон только по «да» владельца (на счёте клиента ≈177 ₽). Ветка c81-exam.
⛔ Часть А готова (0 ₽, слита в main cfe4df6, экзамены 15/15): календарь 3:1 и карта нагрузки против его практики в 62–69 % недель; после паузы 1 недели он ставит ~79 % обычного объёма с ударной. Часть Б готова до прогона: смета 2 ситуации ~94 ₽ (одна ~47 ₽). Ждёт пополнения счёта Александра и «да» владельца.
feature
↑ С8.2 Проплытое главнее плана, правка тренера главнее наших мягких правил, нет разгрузки без нагрузки
Кейс A-013 19.10: проплытый пн переписывался выдуманным заданием; карта 3:1 ставила разгрузку после 2 недель по 0 м, судья резал правки тренера. Делаем: день с отчётом = проплытое, правка с комментарием главнее коридора/роста/тренда (безопасность остаётся жёсткой), без разгрузки после недель без нагрузки. 0 ₽, ветка c82-fact.
✓ Выкачено на стенд 27.10 в составе 3b7cf75 (миграция c82_session_fact). Полный прогон 226 файлов перед выкатом: регрессий нет.
feature
↑ С8.3 Знания под решение: методички и книги в замысел и план со ссылками, чат «Обсудить с ИИ» видит базу
Книги и методички не шли в замысел и план (только судье, 5 отрывков); чат без базы. Отрывки под направление и слова тренера, его методички первыми, названный автор обязателен, ссылки проверяет код, разминки и залы из его конструкторов. 0 ₽ код, живая проверка после пополнения. Ветка c84-knowledge.
✓ Выкачено 27.10 в составе 3b7cf75; книги на стенде: 129 док., 11 418 кусков, отпечаток совпал с девом. Конфликт критериев live01 B со словарём тренера в отрывках — DECISIONS-QUEUE П-27.1.
feature
↑ С8.4 Вечерний вопрос об отчёте без утверждения плана + знак «↔» в PDF
Вопрос уходил только при утверждённой неделе; на 19.10 утверждена одна (болеет) — 0 напоминаний, Александр жалуется второй раз. Теперь по любой неделе плана или расписанию. «↔» в PDF печатается «☒». Ветка c83-remind.
✓ Выкачено 27.10 в составе 3b7cf75. Вечерний вопрос и до трёх вопросов об отчёте работают по настройкам; нарастающие напоминания — С8.9 (выкат №2).
feature
↑ С8.5 Разбор фото и файлов: доделать по пробе R5
Проба R5: 4/9 обрезаны, не-тренировки ушли бы в историю, xlsx не читается, дни сдвинуты, год без даты. Вид документа сначала, в историю только тренировки, медицинское без подробностей. На стенде ещё не срабатывал. Ветка c85-media.
✓ Код готов в ветке c85-media (80f2cb0 экзамены до кода, c160490 код): 18/18 экзаменов, критик исполнителя 15 находок, 14 исправлено. Ждёт: слияние после полной регрессии main, ОТК проход 1, «ок» на повтор пробы (~1 ₽, потолок 5 ₽), решения по медицинским фото и месту для результатов стартов.
⛔ 3 круга ОТК пройдены, после третьего жёлтый (новые: «вчера, ощущения 6» — отчёт на сегодня; просроченное «противопоказано» вечное; в план 5 старых ограничений; инициалы в протоколе; сроки словами). Ждёт решения владельца на 4-й круг.
feature
↑ С8.6 Стратегия сезона строит ИИ (тренер может поправить блоки) и 2–3 варианта направления недели
Решение владельца 20.10 «доделывай всё, что просил Александр» (его п. 3 и п. 5). ИИ сам строит блоки воды и зала до главного старта по его практике и методичкам, недельный разбор берёт неделю из стратегии вместо календаря 3:1; тренер может поменять длину и вид блока, ИИ перестраивает остальное; варианты направления с рекомендованным. 0 ₽ код, ветка c86-season.
✓ Код в main f144b7b: стратегия сезона (лента вода/зал, правка тренера, перестройка), 2–3 варианта направления; экзамены 40/40; исполнитель правил экзамен после коммита (тип и помощник недели n+1) — проверено, честно. ОТК проход 1 идёт.
⛔ Выкачено 27.10 в составе 3b7cf75 (миграции c85, c86, c86b), но ИИ стратегии выключен AI_STRATEGY_DAY_LIMIT=0 до «ок» владельца на расход (~82 ₽ на проверку). Кнопки и ручная правка блоков на сайте есть.
feature
С8.7 Правки Александра 25.10 + умные повторы вопроса об отчёте + дата рождения в анкете
ACCEPTANCE «С8.7», «С8.7б Умные повторы» (С8.7-15/16/17), «С8.4-15». Ветка c87-fixes: d6cbb28 экзамен, 6c1aa8b повторы, 7e8a07d/dd1b6bc дата. Решение владельца 26.10: в 20:00 вопрос всем с тренировкой; 21:30 и утро только тем, кто отчитывался за 14 дней; 3 тренировочных дня молчания: бот не пишет, тренеру задача.
✓ Выкачено 27.10 в составе 3b7cf75. Кнопки «Закрыть без ответа», «Выздоровел(а)», «Убрать» старт, архив, лучшие результаты есть в живом коде сайта (проверено по бандлу стенда). Умные повторы С8.7б заменяются С8.9 по решению владельца 27.10.
feature
С8.7в Разряд не перехватывает ответ на более свежий вопрос бота (оценка сна «3» писалась разрядом)
Найдено 26.10 на полном прогоне: classifier.test «3 на Как спал» → «Записал: разряд 3 (взрослый)», отметки тренеру нет. Причина: вопрос о разряде (С8.7-12) открыт до следующего сообщения и забирает число, даже если бот потом спросил о сне. Критерий С8.7-18, экзамен до кода.
✓ Выкачено 27.10 в составе 3b7cf75, экзамен c87c Р1–Р4 зелёный.
bug
С8.8 «Я выздоровел(а)» от спортсмена закрывает открытое о здоровье, как кнопка тренера
Просьба владельца 27.10. Сейчас «выздоровела» закрывает только протокол болезни: у A-022 (Лунина) болезнь закрыта 23.10, а жалоба на боль 18.10 (escalated) висит красной, 3 задачи здоровья без ответа. Новое: сообщение спортсмена о выздоровлении закрывает болезнь, боль, события здоровья и задачи здоровья (как recoverAthlete С8.7-5), кроме тревог красного флага; тренеру уведомление.
✓ Выкачено на стенд 27.10 (ad846ce): «выздоровел(а), могу тренироваться» закрывает болезнь, боль, задачи о здоровье, тревоги остаются за тренером. Перед выкатом найдено и исправлено: «ещё не выздоровел» принималось за выздоровление (С8.8-5, экзамен c88b О1–О2). Экзамены c88 В1–В4 и c88b зелёные; код в контейнерах проверен.
feature
Гайд для Александра: где какие кнопки (снимки с выкаченного стенда)
Александр 26.10 не нашёл кнопки из письма: пакет С8.1–С8.7 не был выкачен. После выката: снимки «Убрать» у старта, «Закрыть без ответа», «Выздоровел(а)», «Активные / Архив», «Предложить другую», настройки часов, стратегия сезона. Файл в «Загрузки», владелец пересылает.
✓ Гайд (9 разделов со снимками) и письмо Александру в Загрузках владельца 27.10; подписи кнопок сверены с бандлом стенда 3b7cf75, снимки проверены в браузере. Раздел про самоснятие через бота добавится после выката С8.8.
feature
Разбор 22 пунктов Александра 26.10 (вечер): сделано / баг / в бюджет / вне
Сообщения 26.10 21:44–22:39 МСК, 22 пункта + 3 файла залов (docx). Пункт 1 (больше напоминаний) противоречит решению владельца 26.10 об умных повторах: ждёт решения, дефолт вчерашний.
✓ Разбор 22 пунктов + п. 25 сделан 27.10 (DECISIONS-QUEUE); решение владельца 27.10 вечер: всё рекомендованное «в бюджет» делаем (С9.6–С9.14), п. 19 вне, дальше только качество.
feature
С8.9 Напоминания об отчёте по нарастающей (решение владельца 27.10, заменяет умные повторы С8.7б)
Александр 26.10 п. 1, владелец 27.10 «будем больше напоминать». День без отчёта: 20:00 и 21:30; назавтра 09:00 и 20:00; дальше 09:00, 20:00, 21:30 каждый день, пока нет отчёта. Отчёт обнуляет. Задача тренеру «не отчитывается 3 дня» один раз на серию, бот не замолкает. Только активные, без болезни и тревоги. Выкатить до 28.10 20:00 (иначе умные повторы начнут замолкать на третий вечер).
✓ Выкачено 27.10 (ad846ce): день тренировки 20:00 и 21:30, назавтра 09:00 и 20:00, дальше 09:00/20:00/21:30 до отчёта; тренеру «не отчитывается 3 дня» один раз на серию. Экзамены c89 Н1–Н6, c87 Н1, report-reminder-draft зелёные в полном прогоне ветки 2571/2583.
feature
С8.10 Разбор отчёта A-023 26.10: время через двоеточие, ответы без рода, уточнение не переписывает отчёт
Пункт 24 владельца 27.10 (Рома Осинцев A-023). На стенде: 4 времени 4х100 брасс «1:07:9» не записались; «3000 сплавала» мужчине (пол пустой, в промпт не передаётся); «были только 4х100» на вопрос бота — отчёт стал «частично». Код: ветка c88-recover 1500837, экзамены f5bcf43 (агенты В1–В2, ИИ В3, бот В4–В6), 340/340 зелёные. Не выкачено.
✓ Выкачено 27.10 (ad846ce): время «1:07:9» читается, ответы без рода, уточнение без нового не переписывает отчёт. Экзамены c810 (агенты, ИИ, бот) зелёные. Корень (склейка выбрасывает понимание модели, 5 из 28 отчётов за 14 дней) — следующая задача.
bug
С8.11 Исправление «2 по 400*» заменяет серию, а не дописывает (A-038 26.10: 4×400 и 2×400)
✓ Код f2ff15a (ветка c88-recover): исправление в склейке (звёздочка, «ошиблась», «не 4, а 2») заменяет серии той же дистанции. Экзамен c811 И1–И2 зелёный. Ждёт полного прогона и выката.
bug
С8.12 Правка сообщения в Телеграме переписывает разбор отчёта
✓ f2ff15a: edited_message в allowed_updates, правка в течение часа после отчёта — исправление; правки тренера без ответа. c811 И3–И4 зелёные. Ждёт прогона и выката.
bug
С8.13 Без рода во всех фразах бота и подсказках модели («дошёл», «по сколько плыл»)
✓ f2ff15a: «Какое было время отрезков?», подсказки без «плыл». c811 И5 зелёный. Ждёт прогона и выката.
bug
С8.14 Разбор отчёта: модель читает с контекстом (план дня, вопрос бота, пол), код сверяет числа; офлайн-проверка 0 ₽
✓ Офлайн-сверка 33 отчётов стенда: «модель первой» хуже в 1 отчёте, по сериям — 21 → 23 времени без ухудшений. f2ff15a: времена модели по сериям (дистанция+стиль, без двойного учёта). c814 М1–М3, агенты 338/338.
bug
готовS13 · Проверки по сроку1/3
Вечерний вопрос об отчёте реально ушёл спортсменам 26.10 (первый вечер с С8.4 на стенде)
Проверка: ssh cfru, psql swim-postgres: select count(*), count(distinct "athleteId") from "ProtocolRun" where protocol='report_reminder' and "createdAt" > now()-interval '6 hours'; плюс Message direction='out' 19-22 МСК. Ожидание: вопрос у каждого активного спортсмена с тренировкой сегодня и без отчёта (21 активный). До 26.10 за 12 дней был 1 вопрос: С8.4 не был выкачен с 20.10, плюс падение обработчика 24-26.10. Ноль снова — разбирать по логам воркера, а не писать «работает».
✓ Проверено 27.10 по базе стенда (80b9101, С8.4): ProtocolRun report_reminder 26.10 — 15 вопросов 15 спортсменам (до этого за 12 дней 1). Отчётов за 26.10 — 16 (22.10: 5, 23.10: 3, 24.10: 8, 25.10: 3). Исходящих спортсменам 19:30–22:30 МСК — 31 сообщение 13 спортсменам. Активных 21. Повтор 21:30 и утренний вопрос (С8.7) ещё не выкачены.
check
Напоминания об отчёте по нарастающей ушли на стенде (С8.9, выкат 27.10)
⏱ 28.10 · просрочено 2 дн.
Выкат ad846ce 27.10 13:26 МСК. Проверить, что вечером 27.10 ушли вопросы 20:00 и 21:30, утром 28.10 09:00 — тем, кто не отчитался, и что у отчитавшихся повторов нет. Метки — ProtocolRun.id вида report_reminder:<athleteId>:<день>[:шаг], шаги 2, 3, e, e2, m. Команда: ssh cfru, затем docker exec -i swim-postgres psql -U swim -d swim -At, запрос: select a.code, split_part(r.id, ':', 3) as day, split_part(r.id, ':', 4) as step, r."createdAt" from "ProtocolRun" r join "Athlete" a on a.id = r."athleteId" where r.protocol = 'report_reminder' and r."createdAt" > '2026-10-27 10:26' order by 4. Плюс: нет ли жалоб спортсменов на лишние вопросы в переписке и не перезапускался ли swim-api (docker inspect swim-api --format '{{.RestartCount}}', предел 384m).
check
С12: цена понимания после вводных (сверить через 3 дня после выката)
⏱ 02.11 · через 3 дн.
До С12 (замер 29.10, 14 дней): вызов понимания 0,82 ₽, 3290 токенов на входе, ~14,5 вызова в день. Оценка после вводных: +0,3–0,5 ₽ на вызов. Проверка: ssh cfru, docker exec -it swim-postgres psql -U swim -d swim, затем: select date("createdAt"), count(*), round(avg("costRub")::numeric,3), round(avg("inputTokens")::numeric) from "AiUsage" where feature = 'understand' and success and "createdAt" > now() - interval '10 days' group by 1 order by 1; — сравнить среднюю цену и вход до и после даты выката С12. Больше +0,5 ₽ — урезать вводные (переписка 12→6, строка 300→200), DECISIONS-QUEUE п. 30.8. Если С12 ещё не выкачен — перенести срок.
check
планS14 · С9 · Хотелки Александра 25.10 в бюджете: целевой результат, задания из чата, расписание студентов, группа, циклы0/14
С9.1 Целевой результат как фокус подготовки
Александр 25.10 п. 4. У спортсмена цель: старт, дистанция, время. Замысел и план недели строятся от неё, карточка показывает, сколько до цели. Решение владельца 26.10: в бюджете.
✓ Код fe61341: цель от тренера (дистанция, стиль, время, бассейн, дата/старт) в «Настройках», путь к ней в «Прогрессе» (лучшее, разница, дни), строка цели у замысла, генератора и судьи. Экзамены c91 сайт Ц1–Ц4 и планировщик Ф1–Ф2 зелёные. Ждёт полного прогона и выката.
feature
С9.2 Задания спортсмену из чата с ИИ и сказанное в чате в памяти
Александр 25.10 п. 6. Мост С7.16 есть в коде, выключен решением 19.10, включается флагом. Проверить на стенде, что задание из чата доходит спортсмену, а сказанное тренером попадает в память спортсмена.
✓ Код bc7705b: «передай спортсмену: …» в «Обсудить с ИИ» уходит спортсмену сообщением тренера без модели (0 ₽); слова тренера из чата за 21 день — блоком у модели плана. Экзамены c92 З1–З3, Б1–Б2 зелёные. Мост «ИИ предлагает вопрос» — по настройке, вопрос владельцу. Ждёт полного прогона и выката.
feature
С9.3 Разное расписание по неделям у студентов
Наблюдение Александра 12 (25.10). Расписание тренировок задаётся на неделю, не одно на весь сезон: сессии, пары, учёба. План недели берёт расписание этой недели.
✓ Код fe61341: отметка «Расписание по неделям» (сайт, «по-разному» в анкете), вопрос в субботу 12:00 о днях следующей недели с «Как обычно», дни недели плана из ответа (дни тренера сильнее). Экзамен c93 Р1–Р5 зелёный. Ждёт полного прогона и выката.
feature
С9.4 Разные планы внутри группы: кто на старт, кто продолжает
Александр 25.10 п. 7. В одной группе часть спортсменов подводится к старту, часть продолжает объёмную работу. План группы раздваивается по этому признаку.
✓ Ветка c88-recover cff6bb5, не выкачено. Участник группы со стартом A или B в окне подводки не входит в неделю группы, тренер видит пометку «свой план к старту». Ночной разбор планирует такого участника лично (personalPlanWhereFor), после старта он возвращается в группу. Проходящий старт C участника не выводит. Экзамен c94 (2 из 2) зелёный, 0 ₽.
feature
С9.5 План на циклы из обсуждения в чате с ИИ
Наблюдение Александра 4 (25.10). Тренер обсуждает в чате «Обсудить с ИИ» раскладку циклов, итог обсуждения превращается в стратегию сезона (С8.6) одной кнопкой.
✓ Ветка c88-recover cff6bb5, не выкачено. В «Обсудить с ИИ» у ответа ИИ кнопка «Взять в план подготовки». План подготовки хранится заметкой prep_plan, один на спортсмена, без миграции. В карточке во вкладке «Сегодня» блок «План подготовки» с кнопкой «Убрать». Замысел, генератор и судья недели получают его блоком. Чат раскладывает подготовку по циклам, если тренер просит, лимит ответа прежний. Экзамены c95 (сайт 3, планировщик 2) зелёные, 0 ₽.
feature
С9.6 Старт из слов спортсмена: карточка тренеру «добавить старт?» (п. 2 от 26.10)
✓ Код 431f5ab: старт и дата из слов спортсмена кодом, карточка тренеру «Добавить старт / Не надо», старт B в календарь. Экзамен c96 С1–С3 зелёный. Ждёт полного прогона и выката.
feature
С9.7 Упор на любую неделю прямо в стратегии сезона (п. 6)
✓ Код bc7705b: «Упор по неделям» в карточке (неделя, сколько подряд, текст, «Убрать»); упор строкой у замысла, генератора и судьи, главное в неделе. Экзамены c97 сайт У1–У3 и планировщик А1–А2 зелёные. Ждёт полного прогона и выката.
feature
С9.8 Вернулся в форме, без 8 недель втягивания, и история спортсмена (п. 7 и 20)
✓ Код bc7705b: анкета спрашивает объём последнего месяца (recentWeekM кодом), «История спортсмена» у тренера; «Форма на старте» и история — у плана и стратегии; «в работе» — без адаптации зала в стратегии кодом. Экзамены c98 Ф1–Ф4, И1–И2 зелёные. Ждёт полного прогона и выката.
feature
С9.9 Учёт объёмов по видам работы: ноги, руки, координация, гипоксия, ускорения (п. 10)
✓ Ветка c88-recover cff6bb5, не выкачено. Код раскладывает строки тренировок по видам: координация, упражнения, ноги, руки, сверху ускорения и гипоксия по словам методики. План и проплыто по отчётам считаются по неделям по тем же правилам, что объём недели. В «Прогрессе» тренера таблица за 6 недель, модель плана получает строку с динамикой и «чего не было». Экзамены c99 (планировщик 4, сайт 2) зелёные, 0 ₽. Гипоксия как цикл раз в 9–13 дней остаётся в С10.
feature
С9.10 «Немного болит горло» не повод переписывать план + «следить за здоровьем» (п. 14)
✓ Код fe61341: лёгкое недомогание — «тренируйся по плану», событие «следим»; кнопка «Следить за здоровьем» первой на карточке болезни, план не меняется; неделя без сценария болезни; стало хуже — карточка снова. Экзамены c910 бот Г1–Г3, планировщик Н1–Н2 зелёные. Ждёт полного прогона и выката.
feature
С9.11 Лучшие результаты 25 и 50 м бассейна отдельно (п. 16)
✓ Код 431f5ab: бассейн отчёта из слов, лучшие по дистанции/стилю/бассейну (колонка «Бассейн»), вопрос о бассейне один раз. Экзамены c911 (разбор, сайт, бот) зелёные. Ждёт полного прогона и выката.
feature
С9.12 Три файла залов Александра 26.10 в базу знаний (п. 17)
feature
С9.13 Пол в анкете кнопкой, обращение по полу (п. 25)
✓ f2ff15a: пол после разряда / с «Анкета готова» / после отчёта по отметке pending (миграция 20261027200000, на стенде 24 спортсмена); род в заданиях ответов. Найдено и исправлено: бот не читал Athlete.sex (ATHLETE_COLUMNS). c811 И6–И8 зелёные (в И8 поправлена подготовка стенда: профиль манеры).
feature
С9.14 Расспросы после отчёта: недостающее время и пульс, до двух вопросов (п. 25)
✓ f2ff15a: до двух вопросов по порядку время, пульс, ощущения; пульс и без пульса в плане. c811 И9 зелёный.
feature
планS15 · С10 · Качество планов как у Александра: интенсивность, возврат после паузы, зал из его схем0/8
С10.1 Интенсивность как у Александра: ПАНО и МПК вместо лишней аэробики, две воды в день
Сравнение 26.10 (экзамен Александра, s1 A-007): ИИ 17 150 м против его 32 050, судья rejected; у ИИ лишняя аэробика и техника, нет МПК и двух вод в день. Работа на заглушках, 0 ₽.
feature
С10.2 Возврат после паузы около 79 % обычной недели
Сравнение 26.10: после паузы ИИ ставит слишком мало, у Александра первая неделя около 79 % обычной. Правило в коде плюс экзамен.
feature
С10.3 Зал из схем Александра
Сравнение 26.10: зал у ИИ не совпадает с его схемами. Взять схемы из его недель и методичек, план зала собирать из них.
feature
С10.4 Платная перепроверка ситуации экзамена после правок (около 55 ₽, потолок 60 ₽)
Согласовано владельцем 26.10 («ок да»). Запуск только через журнал: packages/ai/eval/run-exam-aleksandr.ts --dry, потом --run --cap-situation 60 --cap-total 60. Ключ планирования стенда, в лог не печатать.
feature
Баг A-013 26.10: сообщение о прошедших соревнованиях легло отчётом дня, второй вопрос оценки
DECISIONS-QUEUE п. 26.1. Результаты старта из текста — в результаты спортсмена, не отчёт; распознаёт модель понимания.
bug
Баг A-013 26.10: «50 спина + 50 кроль по 1:35» записано как 50 за 1:35, поправка спортсмена пропущена
DECISIONS-QUEUE п. 26.2. Корень как п. 24: склейка ставит серии регулярок выше понимания модели.
bug
С10.5 Разминка разная: отзыв Даши (A-022) 28.10 — вторую неделю одна и та же разминка
Отзыв голосовым через Александра 28.10 20:37: бот «реально поумнел», тренировки «более адекватные», но «опять вторую неделю подряд такую же разминку». Подтверждено по стенду: недели 12.10, 19.10, 26.10, все водные тренировки начинаются с «300–600 вс + спина по 50/100 м спокойно, пульс постепенно до п:20–22», второе задание почти всегда «4х50 ноги … ласты мягко». Почему проверка не ловит: warmupIssues (packages/planner/src/logic.ts:154) срабатывает, только если разминка совпадает текстом без цифр во ВСЕХ тренировках недели; модель меняет слова («спокойно», «пульс постепенно до п:22», «через 100»), ключи разные. Сравнения с прошлой неделей нет совсем. Что сделать: сравнивать разминку по сути (способы и средства: вс+спина, упражнения, ноги), а не текстом; замечание и при повторе с прошлой недели; в подсказку генератора — разминка под задачу дня из методички Александра. Критерии и экзамены до кода.
feature
Баг Даша (A-022) 28.10: «болезнь совсем прошла, болей нет» — срочная карточка «боль» и «колено не нагружай»
Александр 28.10 21:43: «она пишет, что нет боли, он мне пишет что боль есть». Подтверждено по стенду: 28.10 12:55 ответ на вопросы тренера «1) болезнь совсем прошла 2) болей нет, колено не беспокоит…». Модель поняла верно (health.present=false), но страховка кода raiseByCode (apps/bot/src/athlete/dialog.ts:290) подняла до urgent pain: правило pain/red в packages/agents/src/health.ts:131 содержит «болезн*» и «болела/болел» — это болезнь в прошлом, а не боль. detectHealth('болезнь совсем прошла') = pain red; 18.10 «ты учитывал что я неделю болела» — тоже pain red (HealthEvent). Спортсменке ушло «Передал тренеру срочно… колено не нагружай», тренеру — срочная карточка боли. Что сделать: убрать «болезн*», «болел*» из боли (это illness и только с признаками текущей болезни); «прошла/прошёл/нет» после болезни — отрицание; когда модель поняла сообщение и жалобы не нашла, код не поднимает до срочной по неоднозначным словам (решение владельца «доверяй больше ИИ»). Экзамены до кода, прогон c2/c36/health.
feature
готовS16 · С11 · Храним всё, архивы по кнопке, ИИ понимает фото22/22

Цель: Решение владельца 28.10: всё присланное хранится на сервере; архив прошлых тренировок разбирается по кнопке с ценой в историю и память; фото понимает умная модель с контекстом, меньше правил кода.

С11.1 Храним всё, что присылают: файлы, фото, видео, голос — оригиналы на сервере
ACCEPTANCE С11.1, экзамены apps/bot/src/c111.exam.test.ts и apps/web/src/c111.exam.test.ts. Ветка c10-media.
✓ Выкачено на стенд 29.10.2026, коммит 677793e (main). Экзамен apps/bot/src/c111.exam.test.ts зелёный (прогон 29.10 на 677793e), полный прогон: красные те же, что у прода 8ea7248, новых нет. Выкачено на стенд 29.10, коммит 677793e.
feature
С11.1-1 Оригинал фото, видео, файла спортсмена (до 20 МБ) лежит в базе у входящего при любом пути хода
✓ Экзамен apps/bot/src/c111.exam.test.ts зелёный (прогон 29.10 на 677793e), полный прогон: красные те же, что у прода 8ea7248, новых нет. Выкачено на стенд 29.10, коммит 677793e.
acceptance
С11.1-2 Аудио голосового рядом с расшифровкой, и когда расшифровка не удалась
✓ Экзамен apps/bot/src/c111.exam.test.ts зелёный (прогон 29.10 на 677793e), полный прогон: красные те же, что у прода 8ea7248, новых нет. Выкачено на стенд 29.10, коммит 677793e.
acceptance
С11.1-3 Больше 20 МБ: спортсмену «пришли ссылкой», отметка в переписке, тренеру как раньше
✓ Экзамен apps/bot/src/c111.exam.test.ts зелёный (прогон 29.10 на 677793e), полный прогон: красные те же, что у прода 8ea7248, новых нет. Выкачено на стенд 29.10, коммит 677793e.
acceptance
С11.1-4 На сайте фото картинкой, видео плеером, файл «Скачать», голос слушается
✓ Экзамен apps/bot/src/c111.exam.test.ts зелёный (прогон 29.10 на 677793e), полный прогон: красные те же, что у прода 8ea7248, новых нет. Выкачено на стенд 29.10, коммит 677793e.
acceptance
С11.1-5 Отправленное спортсмену хранится: файлы тренера с сайта и неделя PDF
✓ Экзамен apps/bot/src/c111.exam.test.ts зелёный (прогон 29.10 на 677793e), полный прогон: красные те же, что у прода 8ea7248, новых нет. Выкачено на стенд 29.10, коммит 677793e.
acceptance
С11.2 ИИ понимает фото: умная модель с контекстом, меньше правил кода
Колено — спрашивает, что случилось, карточка тренеру; скрин часов — тренировка; протокол — результаты. Модель понимания (Sonnet) вместо Flash Lite, потолок суток 30 ₽. Критерии до кода.
✓ Выкачено на стенд 29.10.2026, коммит 677793e (main). Экзамены apps/bot/src/c112.exam.test.ts и packages/ai/src/c112.exam.test.ts зелёные (29.10, 677793e), ОТК С11 три круга. Выкачено 29.10, 677793e.
feature
С11.2-1 Умная модель
✓ Экзамены apps/bot/src/c112.exam.test.ts и packages/ai/src/c112.exam.test.ts зелёные (29.10, 677793e), ОТК С11 три круга. Выкачено 29.10, 677793e.
acceptance
С11.2-2 Модель видит разговор
✓ Экзамены apps/bot/src/c112.exam.test.ts и packages/ai/src/c112.exam.test.ts зелёные (29.10, 677793e), ОТК С11 три круга. Выкачено 29.10, 677793e.
acceptance
С11.2-3 Фото травмы — вопрос «что случилось»
✓ Экзамены apps/bot/src/c112.exam.test.ts и packages/ai/src/c112.exam.test.ts зелёные (29.10, 677793e), ОТК С11 три круга. Выкачено 29.10, 677793e.
acceptance
С11.2-4 Проверки данных остаются
✓ Экзамены apps/bot/src/c112.exam.test.ts и packages/ai/src/c112.exam.test.ts зелёные (29.10, 677793e), ОТК С11 три круга. Выкачено 29.10, 677793e.
acceptance
С11.3 Архив прошлых тренировок по кнопке с ценой: в историю, результаты и память
Пометка у Александра «Архив: N дней, разобрать ≈ X ₽», «Разобрать» / «Не надо»; цена кодом, она же потолок. Критерии до кода. Проба на файле A-023 после «трачу?».
✓ Выкачено на стенд 29.10.2026, коммит 677793e (main). Экзамен apps/bot/src/c113.exam.test.ts и проверки ОТК apps/bot/src/otk-c11.test.ts (26) зелёные (29.10, 677793e). Выкачено 29.10, 677793e. Первый живой разбор — по «трачу?» владельца на цену с карточки.
feature
С11.3-1 Карточка «Архив»
✓ Экзамен apps/bot/src/c113.exam.test.ts и проверки ОТК apps/bot/src/otk-c11.test.ts (26) зелёные (29.10, 677793e). Выкачено 29.10, 677793e. Первый живой разбор — по «трачу?» владельца на цену с карточки.
acceptance
С11.3-2 «Разобрать»
✓ Экзамен apps/bot/src/c113.exam.test.ts и проверки ОТК apps/bot/src/otk-c11.test.ts (26) зелёные (29.10, 677793e). Выкачено 29.10, 677793e. Первый живой разбор — по «трачу?» владельца на цену с карточки.
acceptance
С11.3-3 Итог тренеру и черновик истории
✓ Экзамен apps/bot/src/c113.exam.test.ts и проверки ОТК apps/bot/src/otk-c11.test.ts (26) зелёные (29.10, 677793e). Выкачено 29.10, 677793e. Первый живой разбор — по «трачу?» владельца на цену с карточки.
acceptance
С11.3-4 «Не надо»
✓ Экзамен apps/bot/src/c113.exam.test.ts и проверки ОТК apps/bot/src/otk-c11.test.ts (26) зелёные (29.10, 677793e). Выкачено 29.10, 677793e. Первый живой разбор — по «трачу?» владельца на цену с карточки.
acceptance
С11.3-5 Архив находится
✓ Экзамен apps/bot/src/c113.exam.test.ts и проверки ОТК apps/bot/src/otk-c11.test.ts (26) зелёные (29.10, 677793e). Выкачено 29.10, 677793e. Первый живой разбор — по «трачу?» владельца на цену с карточки.
acceptance
С11.4 Таблица тренера в карточке и согласие на поиск в боте
ACCEPTANCE С11.4 (решения владельца 28.10 поздний вечер, п. 28.3 и 28.6). Экзамены apps/api/src/web/c114.exam.test.ts и apps/bot/src/c114.exam.test.ts — до кода, падали 16/16, после кода 16/16 зелёные. Поиск результатов включён на стенде 29.10 (RESEARCH_ENABLED=true, у тренера researchEnabled), «авто» выключено.
✓ Выкачено на стенд 29.10.2026, коммит 92d88bb (main). Экзамены apps/api/src/web/c114.exam.test.ts и apps/bot/src/c114.exam.test.ts зелёные; ОТК 3 круга, проверки otk-c114 О1–О8 зелёные (выборочный прогон 18 файлов, 135/135). Полный прогон на ba117e3: красные только известные. Миграций и новых настроек нет, копия базы swim-20261029-004316.dump перед выкатом.
feature
С11.4-1 «Загрузить прошлые тренировки» в карточке
✓ Выкачено на стенд 29.10.2026, коммит 92d88bb (main). Экзамены apps/api/src/web/c114.exam.test.ts и apps/bot/src/c114.exam.test.ts зелёные; ОТК 3 круга, проверки otk-c114 О1–О8 зелёные (выборочный прогон 18 файлов, 135/135). Полный прогон на ba117e3: красные только известные. На стенде: POST /coach/athletes/:id/archive-upload отвечает 401 без входа (адрес есть, у несуществующего 404); в сборке сайта кнопка «Загрузить прошлые тренировки» и тексты итога. Файл частями по 512 КБ (прокси сайта пропускает до 1 МБ), больше 1 МБ читает воркер.
acceptance
С11.4-2 Карточка «Архив» по файлу тренера
✓ Выкачено на стенд 29.10.2026, коммит 92d88bb (main). Экзамены apps/api/src/web/c114.exam.test.ts и apps/bot/src/c114.exam.test.ts зелёные; ОТК 3 круга, проверки otk-c114 О1–О8 зелёные (выборочный прогон 18 файлов, 135/135). Полный прогон на ba117e3: красные только известные. Файл тренера: карточка «Архив» с ценой, как от спортсмена; повтор того же файла — «уже загружен»; скан без текста — «не прочитался» (О4, О8).
acceptance
С11.4-3 Защита
✓ Выкачено на стенд 29.10.2026, коммит 92d88bb (main). Экзамены apps/api/src/web/c114.exam.test.ts и apps/bot/src/c114.exam.test.ts зелёные; ОТК 3 круга, проверки otk-c114 О1–О8 зелёные (выборочный прогон 18 файлов, 135/135). Полный прогон на ba117e3: красные только известные. Чужой спортсмен — 404, без входа — 401, файл не того типа — 400, больше 20 МБ — 413; журнал «загружены прошлые тренировки» (archive_upload).
acceptance
С11.4-4 Вопрос о согласии на поиск в боте
✓ Выкачено на стенд 29.10.2026, коммит 92d88bb (main). Экзамены apps/api/src/web/c114.exam.test.ts и apps/bot/src/c114.exam.test.ts зелёные; ОТК 3 круга, проверки otk-c114 О1–О8 зелёные (выборочный прогон 18 файлов, 135/135). Полный прогон на ba117e3: красные только известные. Вопрос «Можно тренеру искать твои результаты стартов в открытых протоколах?» Да/Нет; бот задаёт его только при включённом поиске у сервера и тренера; «да, можно» — согласие с версией research-bot-2026-10-28, «ок» и ответ после сообщения тренера — нет (О7). На стенде пока 0 заданных вопросов (выкат только что).
acceptance
В РАБОТЕS17 · С12 · ИИ понимает, код не перебивает0/12

Цель: Решение владельца 28.10: модель понимания решает по вводным о спортсмене, код поверх неё не ставит жалобу, срочность и вызов тренера по словам. Страховка кода оставлена только на прямые слова о вреде себе (DECISIONS-QUEUE 30.1).

С12 Модель понимания с вводными решает, код не перебивает
docs/ACCEPTANCE.md раздел С12, план docs/C12-AI-FIRST.md. Экзамен apps/bot/src/c12.exam.test.ts написан до кода (коммит 449e730). Код: коммит aacdf10 (ветка c10-media).
⛔ ОТК три круга, вердикт красный: правки третьего круга сломали два случая («колено прошло» глотает жалобу на болезнь; «сказал тренеру» без передачи) и дают ложный кризис. Не выкачено, ждёт «да» на четвёртый круг (DECISIONS-QUEUE 30.9).
feature
С12-1 Вводные модели: пол, задания, переписка за сутки, вопросы, здоровье, цель, старт, врач
acceptance
С12-2 «Болезнь совсем прошла, болей нет» закрывает болезнь, без срочной боли
acceptance
С12-3 Красные слова не отменяют модель («травма прошла», «38.5 у сына»)
acceptance
С12-4 Питание решает модель, не «решает тренер»
acceptance
С12-5 «Грудь болит после баттерфляя, мышцы забились» без 112
acceptance
С12-6 Вызов тренера по пониманию, не по словам
acceptance
С12-7 Ответы протоколам по пониманию, не по словам
acceptance
С12-8 Модель не ответила: запасной путь на правилах
acceptance
С12-9 Числа сверяет код, как раньше
acceptance
С12-10 Ответ бота: остаётся только запрет препаратов и доз, ложные срабатывания убраны
acceptance
С12-11 Деньги: новые вызовы модели около 0,1–0,3 ₽
acceptance
готовS18 · С13 · План целиком16/16

Цель: Решение владельца 29.10 «делай все три» (Александр 28.10 22:20 и 29.10 10:57): прошедшие дни при переписывании не пропадают, план отдельно от факта, шестая зона «гликолиз». Статистика план/факт экраном — доп, не здесь.

С13а Прошедшие дни при «Составить план» и «Переписать» посреди недели
Причина (стенд): прошедшие дни берутся только из выданной недели, у черновика их нет. A-040 27.10, A-026 29.10 — тренер правил руками. Критерии: docs/ACCEPTANCE.md раздел С13.
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Все критерии задачи закрыты (подзадачи С13). Две миграции (factNote, factVolumeM), копия базы swim-20261029-153129.dump перед выкатом.
feature
С13-1 План тренера в комментарии: прошедшие дни его словами
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Экзамен А1: пн и вт — вода текстом тренера и метрами кода, вт — ещё зал; «г» после даты и «• Зал:» разбираются.
acceptance
С13-2 Плана в комментарии нет: прошедшие дни из заменяемой версии
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Экзамены А2а («Составить план» с заменой черновика) и А2б («Переписать» черновика первого плана).
acceptance
С13-3 Выданная неделя главнее черновика, слова тренера главнее обеих
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Экзамен А3: тренер расписал только вт — пн и ср из выданной недели.
acceptance
С13-4 Ничего не было: прошедшие дни не выдумываются
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Экзамен А4: первый план с четверга, комментарий без дней — прошедших дней нет.
acceptance
С13-5 Будущие дни из комментария — просьба модели; «Составить план» до 4 000 знаков
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Экзамены А1/С13-5 (дни с сегодня — просьба модели), А5 api (4 000 знаков принимаются) и А5 web (поле до 4 000).
acceptance
С13б План отдельно от факта
Меняет С8.2-3 (решение владельца 29.10): прошедший день хранит плановое задание, отчёт — пометкой рядом. Критерии: docs/ACCEPTANCE.md раздел С13.
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Все критерии задачи закрыты (подзадачи С13). Две миграции (factNote, factVolumeM), копия базы swim-20261029-153129.dump перед выкатом.
feature
С13-6 Проплыл своё: план остаётся, рядом отметка и его слова
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Экзамен Б1: вт — плановый текст и метры, fact own, его слова в factNote, метры в factVolumeM.
acceptance
С13-7 «Проплыто», «частично», «не плавал» поверх плана
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Экзамены Б2 (всё по плану — done; не плавал) и Б2б (частично — план, fact partial, его слова).
acceptance
С13-8 Плана на день не было: проплытое его словами
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Экзамен Б3: отчёт за понедельник без плана — день его словами.
acceptance
С13-9 Тренер видит план и факт рядом, спортсмену не задание
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Экзамены Б4а/Б4б бот (карточка тренеру — план и отметка рядом; в PDF спортсмену прошедших нет), Б4в api, Б4 web.
acceptance
С13в Зона «гликолиз»
В таблице зон 5 зон, лактатная работа шла в МПК. Цифры зоны — черновик, вопрос Александру. Критерии: docs/ACCEPTANCE.md раздел С13.
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Все критерии задачи закрыты (подзадачи С13). Две миграции (factNote, factVolumeM), копия базы swim-20261029-153129.dump перед выкатом.
feature
С13-10 Шестая зона «гликолиз» в таблице зон
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Экзамен В1: зона lactate в таблице зон — гликолиз, ударная, восстановление 48–72 ч.
acceptance
С13-11 Замысел ставит гликолиз, проверки его понимают
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Экзамены В1/В2 и В2: замысел видит гликолиз; два гликолиза через 24 ч — повтор замысла.
acceptance
С13-12 Слова тренера «гликолиз», «лактат» — зона гликолиз, не МПК
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Экзамен В3: «гликолиз», «лактат», «анаэробная» — зона гликолиз; «алактатный» — скорость.
acceptance
С13-13 Сайт: подпись и цвет зоны гликолиз
✓ Выкачено на стенд 29.10.2026, коммит 293cc99 (main). Экзамены С13 зелёные: packages/planner/src/c13.exam.test.ts (14), apps/bot/src/c13.exam.test.ts (2), apps/api/src/web/c13.exam.test.ts (2), apps/web/src/c13.exam.test.ts (4); на старом коде падали 16 из 22. ОТК 3 круга, проверки otk-c13 (15) зелёные. Полный прогон на 293cc99: красные только известные. Экзамен В4 web: зона «гликолиз» в замысле недели — цвет ударной.
acceptance

Ворклог (места остановки)

29.10.2026, 15:45:29 · С13 · claude

29.10. С13 «План целиком» выкачен на стенд (293cc99): прошедшие дни при переписывании берутся из плана тренера в комментарии, иначе из выданной недели, иначе из заменяемой версии; прошедший день хранит план, факт отметкой рядом (его слова, его метры); шестая зона «гликолиз». Полный прогон: только известные красные. Копия базы перед выкатом, две миграции.

→ Александр 29.10 19:51: «мышцы и горло — всё в здоровье?» — внутри разделено, на экране одна плашка; правка экрана 32.1 ждёт «в бюджет / доп». Владельцу: 31.7/31.9, цифры гликолиза у Александра (черновик), С12 круг 4 (ветка c10-media, на С13 не перенесена).

29.10.2026, 12:19:56 · С13 · claude

29.10 вечер. ОТК С13 — три круга (76d3b65, ba50d27, 2b8d9c3), после каждого свежий критик на диф круга. Экзамены С13 и проверки круга зелёные (43/43 на 2b8d9c3). Остаток (DECISIONS-QUEUE 31.9): сегодня с отчётом при черновике — текст черновика «проплыто» (решение 31.7); «вместо зала плавал» не узнаётся как «своё» (правила С8.2, было и раньше). Черновик по умолчанию — как план (31.7, после проверки круга 2: пометка «не видел» ломала цепочку «Переписать»).

→ Полный прогон на 293cc99 (~2,5 ч). Выкат С13 — только по «да» владельца: копия базы, две миграции (столбцы factNote, factVolumeM), сборка. Владельцу: 31.7/31.9, цифры гликолиза у Александра (черновик вопроса), С12 круг 4.

29.10.2026, 10:54:21 · С13 · claude

29.10 день. С13: экзамены на старом коде — 16 из 22 падают по сути (5 охраняют прежнее); на коде С13 все экзамены С13 зелёные (планировщик 14, сайт 2+4, бот 2), соседние старые зелёные, c83c Б1 — известный красный. Изменены старые экзамены по решению владельца С13-6: c82 Ф3, c82b Б21 (NOTE). ОТК круг 1 (сверка со спекой + критик): день тренера только с заданием, «• Зал:», черновик не выдан — отчёт своими словами, метры проплытого рядом (factVolumeM, вторая миграция), гликолиз в карте нагрузки и в лимите с МПК, слова зон. Коммит 76d3b65.

→ Прогон круга 1 (проверки otk-c13 + экзамены), проверка правок круга 1 свежим критиком, полный прогон 2,5 ч, копия базы; выкат С13 — только по «да» владельца. Владельцу: DECISIONS-QUEUE 31.7 (отчёт к невыданному черновику — своими словами), вопрос Александру про цифры гликолиза, С12 круг 4.

29.10.2026, 07:23:53 · С13 · claude

29.10 день. Полный прогон С12 (11dcff3) закончился: 12 красных, все из списка известных, новых нет; С12 не выкачен из-за К1/К2/С1 критика (ждёт «да» на 4-й круг). С13 «План целиком» по решению владельца «делай все три»: критерии (92527cd), экзамены до кода (3abdaa8, 2f0ceb2; изменён c82 Ф3 по решению владельца), код (186952d): прошедшие дни из плана тренера в комментарии, иначе прожитая неделя, иначе заменяемая версия; план отдельно от факта (factNote, миграция); зона гликолиз; комментарий 4 000 знаков.

→ Проверка типов, экзамены С13 (сначала падение на старом коде), ОТК, полный прогон. Стоп по памяти: на машине три прогона другой сессии (Маруся), ждём. Выкат С13 — по «да» владельца (с копией базы и миграцией). Вопрос Александру про цифры гликолиза — черновик у владельца.

29.10.2026, 06:19:07 · С12 · claude

29.10 день. Разобраны два новых сообщения Александра (код не трогали, идёт полный прогон). 1) «Переписать» посреди недели ставит прошедшие дни отдыхом: прошедшие дни берутся только из выданной или утверждённой недели, у черновика (в том числе первого плана) их нет. Подтверждено по базе: A-026 29.10 00:53 (остались чт-сб, через 3 мин тренер сохранил неделю руками), A-040 27.10 12:00 и 12:09 (пропал пн, 12:17 руками). Александр: план всегда целиком, факт отдельно (меняет С8.2-3). 2) Нет зоны «гликолиз / анаэробная»: в таблице зон 5 (аэробная, ПАНО, МПК, спринт, техника), лактатная работа относится к МПК.

→ Предложен спринт С13 «План целиком»: а) прошедшие дни при «Переписать» из переписываемой версии или из текста тренера; б) план отдельно от факта (решение владельца по С8.2-3); в) шестая зона «гликолиз», цифры спросить у Александра (черновик вопроса у владельца). Статистика план/факт — доп. Ждём «да» владельца на С12 круг 4 и на С13. После полного прогона на 11dcff3 — сверка красных, пункты в DECISIONS-QUEUE, утренний доклад.

29.10.2026, 04:03:04 · С12 · claude

29.10 утро. С11.4 выкачен на стенд (92d88bb, копия базы до выката, проверки после выката сошлись), main = 92d88bb, критерии С11.4 закрыты. С12 в ветке c10-media: код + 3 круга ОТК (сверка со спекой и 3 прохода критика). Найдено и починено: ответ на «от 0 до 10» решали слова кода; «выздоровела» закрывала карточку кризиса, препарата и даже открытой тревоги красного флага (ошибка была до С12); страховка «вред себе» перебивала 112; «прошло» про колено закрывало болезнь; «хуже» с вопросом терялось. Выборочные экзамены 394/396 (2 известных красных). Цена понимания замерена: 0,82 ₽ за вызов, вводные +0,3–0,5 ₽ (оценка).

→ Полный прогон на 11dcff3 (~2,5 ч) и проверка правок 3-го круга. Зелено — копия базы и выкат С12, критерии в Atlas. Есть серьёзное — С12 не выкатывать, к владельцу (4-го круга нет). Владельцу: DECISIONS-QUEUE 29.1–29.3 и 30.1–30.8, черновик ответа Александру не отправлен.

29.10.2026, 00:29:02 · С11 · claude

Ночь 29.10, 06:30. Полный прогон С11.4 (ba117e3) прошёл: 11 известных красных и два новых. Первое: у действия журнала archive_upload не было подписи на сайте (дыра С11.4, исправлена в круге 3). Второе: c718 П4, строки журнала с одинаковым временем стенда, к С11.4 отношения не имеет. Правки третьего круга ОТК С11.4 применены (опрос итога, скан PDF, номер задания, порог 1 МБ, подпись журнала), типы web/api/bot чистые. С12 закоммичен в боковую ветку c12-ai-first (df58df7).

→ Дождаться выборочных тестов круга 3, коммит, копия базы, выкат С11.4. Потом С12 перенести в c10-media: типы, экзамен c12 и старые экзамены, ОТК, полный прогон, выкат.

28.10.2026, 20:23:34 · · claude

29.10 ночь. С11 выкачен на стенд (коммит 677793e, main): полный прогон — красные те же, что у прода 8ea7248, новых нет (c35 отдельно 17/17, красные были от обрывов базы); копия базы swim-20261028-194742.dump до выката; health ok, код в контейнерах. Поиск результатов включён: RESEARCH_ENABLED=true, у тренера researchEnabled, «авто» выключено, потолок 20 ₽. С11.4 написан: загрузка таблицы тренером в карточке (POST /coach/athletes/:id/archive-upload, кнопка «Загрузить прошлые тренировки» на вкладке «Профиль»), вопрос о согласии на поиск в боте; экзамены до кода падали 16/16, после кода 16/16 зелёные, регресс С11 49/49, типы чистые. Критерии С12 записаны в ACCEPTANCE (С12-1…11).

→ Дождаться ОТК С11.4 (сверка со спекой и критик на дифе), исправить находки, полный прогон, копия базы, выкат С11.4. Параллельно пишутся экзамены С12 (до кода), потом код С12: вводные модели, убрать код поверх понимания, запрет в ответе только на препараты и дозы.

28.10.2026, 04:04:17 · С9 · claude

Финальный полный прогон на 8ea7248 закончен: 13 красных, все известные (2 конфликта критериев П-27.2/П-27.3, 4 по нагрузке на тестовую базу, 7 известны до С9), обрывов базы нет. main перемотан на 8ea7248. Владельцу отдан подробный доклад: что сделано по С9, этап, «да» на выкат и 12 решений с дефолтами.

→ 1) Ждём «да» владельца на выкат по DEPLOY 15.3 (5 миграций, перенос 3 файлов залов, 21→24 coach_manual, 0 ₽). 2) После выката: сверка версии, страница v3 с датой, черновик письма Александру, статусы С8.11–С9.14 в done. 3) Решения: П-27.1–3, Д-27.1–3, Д-28.1–3, п. 15 (≈1 ₽), ИИ стратегий (≈82 ₽), мост С7.16 (оставить выключенным). 4) f0c13f20: утренние напоминания 09:00 28.10. 5) Телеграм Александра не привязан (CoachIdentity 0 на 27.10).

27.10.2026, 22:59:51 · С9 · claude

ОТК спринта С9 (3 круга, ветка c88-recover 8ea7248). Сверка со спекой: 40 из 46 критериев есть, 6 частично; 2 критика нашли около 15 дыр со сценариями. Починено: правка сообщения в Телеграме по времени отправки (окно С8.12-1), метры после «2 по 400*», анкета «перерыва не было», болезнь «не хуже», старт из слов (при сомнении карточка), бассейн, гипоксия «через 5 гребков» (у Александра это смена способа), чат: план подготовки одной частью, отпечаток стратегии, тексты сайта. Круги 2 и 3 поймали регрессии моих же правок в регулярках. Масштаб прогнан на копии дев-базы, правило старта сверено на 272 сообщениях истории. Проверки починки (не экзамены) на старом коде падают. DEPLOY.md 15.3 — порядок выката С9. Проверка f0c13f20: вечер 27.10 сошёлся (20:00 ×13, 21:30 ×10, повторов нет).

→ 1) Финальный полный прогон на 8ea7248 (идёт) → сверить с известными красными → main на ветку. 2) Владельцу «да» на выкат по DEPLOY 15.3: 5 миграций, перенос файлов залов KB_KIND=coach_manual. 3) После выката: страница v3 (дата в шапке), письмо Александру, статусы С8.11–С9.14 в done с доказательствами. 4) Решения одним блоком: П-27.1–3, Д-27.1–3, Д-28.1–3, п. 15 (≈1 ₽), ИИ стратегий (≈82 ₽), мост С7.16. 5) f0c13f20: утро 09:00 28.10. 6) Фаза качества: распознавание старта/болезни/бассейна — моделью понимания, не регулярками.

27.10.2026, 18:20:32 · С9 · claude

27.10 вечер: весь бюджет С9 закрыт кодом в ветке c88-recover (ba3fc2c, 90f7869), экзамены писались до кода и все зелёные, 0 ₽. Сегодня вечером: С9.9 объём по видам работы (таблица в «Прогрессе», строка модели), С9.4 кто из группы едет на старт — свой план, С9.5 «Взять в план подготовки» из «Обсудить с ИИ». Раньше в этой ветке: С9.1–С9.3, С9.6–С9.8, С9.10–С9.14, С8.11–С8.14. Полный прогон 16:00 UTC упал на обрывах связи с тестовыми базами (Can't reach database), а не на коде: 87 упавших файлов перегоняются с пробой связи. Страница-инструкция v3 собрана (7 новых снимков), не опубликована до выката.

→ 1) Итог перегона 87 файлов и соседей (c713, c82b, c83c, c3), потом полный прогон ветки на последнем коммите (в 6 потоков). 2) Зелёный → main на кончик ветки, владельцу на «да» выкат: миграции c91/c93/c97/c98, отметка sexAsk, transfer-principles KB_KIND=coach_manual. 3) После выката: страница v3 (C:\tmp\ii-trener-instrukciya\page3.py), письмо Александру. 4) Решения владельца одним блоком: П-27.1–3, Д-27.1–3, п. 15 (≈1 ₽), ИИ стратегий (≈82 ₽), мост С7.16. 5) Проверка f0c13f20 28.10.

27.10.2026, 13:10:13 · · claude

27.10 вечер. Страница-инструкция для Александра https://myvisionagency.ru/lab/ii-trener-instrukciya/ (12 правок «просили → сделано → где», снимки с обведёнными кнопками, бот дословно), письмо со ссылкой в Загрузках. Новое от Александра 13:20 (п. 25: исправление 4→2 по 400 дописалось, правку сообщения бот не видит, мужской род, нет расспросов) — разобрано, в DECISIONS-QUEUE. Александр не подключил Телеграм тренера (CoachIdentity 0) — вписано в страницу. Решение владельца: доделать бюджет С9.1–С9.14, сдать, дальше только качество (DECISIONS-QUEUE). Блок 1 «Отчёт и обращение» (С8.11–С8.14, С9.13–С9.14) — код f2ff15a, экзамены c811 9/9, c814 3/3, агенты 338/338; полный прогон ветки идёт. Офлайн-сверка опровергла «модель первой»: по сериям 21→23 времени без ухудшений. Найден баг: бот не читал пол из карточки. Блок 2: С9.11 (бассейн 25/50) критерии и экзамены 1942e8e, С9.12 файлы залов скачаны и грузятся в базу знаний.

→ 1) Итог полного прогона f2ff15a → слияние в main → выкат блока 1 по «да» владельца (миграция данных sexAsk pending). 2) С9.12: перенос coach_manual на стенд (KB_KIND=coach_manual), доказательство запросом. 3) С9.11 код: бассейн из текста отчёта, лучшие по бассейну (API + сайт), вопрос о бассейне. 4) Дальше С9.6, С9.10, потом С9.1, С9.3, С9.7, С9.8, потом С9.2, С9.4, С9.5, С9.9. 5) п. 15 проверка ≈1 ₽ — ждёт «ок».

27.10.2026, 10:31:21 · · claude

27.10 день. Выкат №1 3b7cf75 (С8.1–С8.7в) в 11:46 МСК: 4 миграции, книги 129/11 418, AI_STRATEGY_DAY_LIMIT=0. Гайд и письмо Александру в Загрузках владельца. Полный прогон ветки c88-recover в 5 частях: 2571/2583, падения известные. Выкат №2 по «да» владельца: перед ним найдена ошибка — «ещё не выздоровел» принималось за выздоровление (и закрыло бы жалобы и задачи о здоровье); критерий С8.8-5 и экзамен c88b до кода (a69c918), исправление ad846ce, тесты с фразами о выздоровлении зелёные, на 61 исторической фразе 9/9 без изменений. Выкачено ad846ce в 13:26 МСК (С8.8 самоснятие, С8.9 напоминания по нарастающей, С8.10 разбор A-023), новый код проверен в контейнерах. Найдено: swim-api убивался памятью при запуске (192m; 26.10 04:09–04:19 по кругу ~10 мин, 27.10 10:26) — SWIM_API_MEM=384m на стенде, compose и DEPLOY.md (ab278fc); сейчас 173 МБ, перезапусков 0. Гайд с разделом про самоснятие — в Загрузках.

→ 1) Владелец пересылает Александру письмо и гайд (версия «с самоснятием»). 2) Проверка по сроку: напоминания по нарастающей ушли 27–28.10 (ProtocolRun report_reminder с шагами e/e2/m). 3) Переделка разбора отчёта: модель читает с контекстом, код сверяет числа; офлайн-проверка 0 ₽ на сохранённых пониманиях. 4) Ответ Александру по 22 пунктам после решений владельца; конфликты критериев (c62g, c36, live01 B П-27.1, цифры в именах) ждут владельца.

27.10.2026, 08:41:07 · · claude

27.10 утро. Полный прогон main 3b7cf75 (С8.1–С8.7в): серийный шёл бы до ~13:10, переведён на 4 части по 4 тестовым базам (swim_test9/4/6/7), 226 файлов за ~40 мин. Регрессий кода нет; падения: известные конфликты критериев (c62g ×2, c36 4г, c83 З5, c83c Б1, c86b Э2, exam С1-8, uat-r3, uat-r2 Н-20), тайминг под нагрузкой (Н5, С1-9), окружение (chats.exam без импорта таблиц; web uat-r2 Н-6 — CRLF Windows-копии, на LF коде проходит). Новый конфликт критериев live01 B: в промпт плана попадает словарь тренера («голый» = без инвентаря) из отрывков С8.3 — в DECISIONS-QUEUE П-27.1 (426f9dd). Поломка теста словаря dates.test.ts от С8.7 (фразы о стартах со списком) — исправлена на c88-recover (cfbf620), поведение не менялось. Бесплатная проверка по стенду за 14 дней: в 5 из 28 отчётов с пониманием модели склейка кода выбросила верное понимание модели (A-023 4 времени→0, A-039 8→3, A-024, A-013, A-025) — довод за «модель читает с контекстом, код сверяет числа». Выкат №1 3b7cf75 начат 11:35 МСК: дамп перед миграциями swim-20261027-083521.dump, AI_STRATEGY_DAY_LIMIT=0 в .env (копия .env в backups), код распакован, сборка образов идёт. Параллельно полный прогон c88-recover (С8.8–С8.10) в 5 частях.

→ 1) Сборка готова → migrate (4 миграции) → up -d --force-recreate api worker → health, HNSW, BUILT/DEPLOYED_COMMIT → книги KB_KIND=book (ожидается 129). 2) Проверить кнопки на живом стенде, гайд и письмо Александру в Загрузки владельцу. 3) Итог прогона c88-recover → слияние в main → выкат №2 по «да» владельца. 4) Переделка разбора отчёта: модель читает с контекстом (план дня, последний вопрос бота, пол), код сверяет числа с текстом; сначала офлайн-проверка на сохранённых пониманиях стенда (0 ₽).

26.10.2026, 13:45:33 · · claude

26.10 вечер: роадмап следующих спринтов заведён в Atlas (С8.7 в С8; С9 «Хотелки Александра 25.10 в бюджете», 5 задач; С10 «Качество планов как у Александра», 4 задачи с платной перепроверкой ≈55 ₽). Регресс ветки c87-fixes: 22 падения оказались окружением (в swim_test4 не было базы знаний; обрыв туннеля 16:19). В swim_test4 скопированы Coach-владелец и база знаний (157 документов, 11 785 кусков), заведена чистая swim_test7 (миграции + база знаний) под перепроверку падений полного прогона main (c714, c86 и др.: «Unique constraint on code» от остатков оборванного в 14:00 прогона в swim_test). Ветка c87-fixes впереди main на 5 коммитов, слияние перемоткой. Перед выкатом найдено: стратегия С8.6 тратит деньги клиента (≈82 ₽ первая постройка на 7 спортсменов), цена владельцу при согласовании не называлась: выкат с AI_STRATEGY_DAY_LIMIT=0 до его «ок» (DECISIONS-QUEUE 26.10 вечер п. 5, не закоммичено). Счёт клиента OpenRouter: 70 $ внесено, 30,3 $ потрачено.

→ 1) Дождаться перепроверок brviw19k5 (swim_test4) и buo0v472u (swim_test7) и полного прогона btslqauhq. 2) Зелёные: перемотать main на c87-fixes, закоммитить DECISIONS-QUEUE п. 5. 3) Выкат на стенд до 19:30 МСК или после 22:00: дамп базы, AI_STRATEGY_DAY_LIMIT=0 в .env, сборка, migrate, up api worker, проверка здоровья и HNSW. 4) Книги на стенд: KB_KIND=book transfer-principles-from-dev.sh (ждём 129). 5) 21:45 МСК: проверка fb40ec7d (вопросы об отчёте реально ушли). 6) По «ок» владельца поставить AI_STRATEGY_DAY_LIMIT=5.

26.10.2026, 09:34:37 · · claude

26.10 день: книги Александра (Мякинченко, Swim Coaching Bible) в базе знаний разработки, английские книги больше не считаются битыми (cf4e1c6). Полный прогон на main сорван обрывом сети около 14:00 (нет связи с тестовой базой), не в счёт. Найден настоящий сбой: в задании разбора медиа поле «time» ловилось проверкой имён как «Тима», переименовано в «result», старое принимается. Исполнитель С8.7 (8 пунктов Александра 25.10) оборвался той же сетью, возобновлён со своего места.

→ Дождаться С8.7 и перепроверки разбора медиа; полный прогон main заново; 2 книги в тестовую базу; лёгкая проверка ОТК С8.2/С8.3/С8.6; выкат пакета на стенд только по «да» владельца; вечером проверить напоминания и понимание сообщений на стенде.

26.10.2026, 04:07:18 · С8 · claude

26.10: авария стенда — swim-worker падает по нехватке памяти (OOM, лимит 1,6 ГБ, bge-m3) каждые ~18 с, 6 754 перезапуска с вечера 24.10 после подключения 21 спортсмена: висят первые планы A-036/A-038, «Составить план» A-022/A-038, разбор сообщений, напоминания. Вторая поломка: защита ПДн блокирует «понимание» сообщений (pii_blocked: фамилия или имя) у A-013, A-022, A-027, A-046. Счёт OpenRouter пополнен: $42,67 из $70. Прочитаны сообщения Александра 20–25.10 (фото, 2 книги, 12+12 пунктов).

→ 1) «да» владельца → docker update памяти воркера до 3 ГБ + SWIM_WORKER_MEM в .env. 2) Разобрать ложные срабатывания защиты ПДн на новых именах. 3) Разложить пункты Александра: баги в работу, новое — владельцу «в бюджет/вне». 4) Возобновить С8 (остановлено 20.10 по «стоп»).

20.10.2026, 13:49:40 · С8 · claude

20.10 день: в main слиты С8.3 (книги и методички в замысел/план/чат, ход «что найти»), С8.4 (вечерний вопрос без утверждения + «↔» в PDF + день зала не про воду), С8.5 (файлы: всё понимать и заносить, 3 круга ОТК), С8.6 (стратегия сезона и варианты направления). Ветка выката release-1020 (пол + вечерний вопрос) прогнана 129/129, ждёт «да». Сторож туннеля с проверкой ответа базы.

→ 1) «да» владельца → выкат release-1020 до 20:00 МСК, вечером проверить исходящие вопросы A-012/013/023/025. 2) ОТК С8.6 проход 1; круг правок С8.2 и С8.3 → проверки. 3) Решения владельца: 4-й круг С8.5, «112» для документа врача, потолок 80 ₽, «Фармаков», порог паузы, пополнение $30, объёмы блоков у Александра. 4) Полная регрессия main перед следующим выкатом.

20.10.2026, 09:47:41 · С8 · claude

20.10: причина вечернего вопроса — только при утверждённой неделе (утверждена 1 из 7) → С8.4 готов. Слиты в main С8.2 (ОТК круг 1 жёлтый, правки 13 пунктов у исполнителя) и С8.5 (по решению владельца: всё понимать и заносить; ОТК круг 1 жёлтый, правки 10 пунктов). Запущены С8.3 (книги и методички в замысел, план и чат, как ChatGPT-проект) и С8.6 (стратегия сезона ИИ + правка тренера, варианты направления) по решению «доделывай всё». Ветка выката release-1020 (пол + вечерний вопрос). Туннель к тестовой базе зависал — сторож. Файл swim-secrets.json затёрт моим скриптом чтения и восстановлен.

→ 1) ОТК С8.4 и тесты release-1020 → «да» владельца → выкат до 20:00 МСК, вечером проверить report_reminder у 6 спортсменов. 2) ОТК круг 2 по С8.2 и С8.5. 3) Итоги С8.3 и С8.6, слияние, полная регрессия. 4) После пополнения счёта: пробы (файлы ~1 ₽, экзамен ~47 ₽). 5) Решения владельца: документ врача и «112», порог паузы 1 или 2 недели.

19.10.2026, 17:00:29 · С7 · claude

С7.18 «пол в карточке» слит в main (4a52525), экзамены С7.18 зелёные; на стенд не выкачен. Прогон затронутых: 13 файлов зелёные, 90 тестов, файл c716 упал целиком (разобрать). Живые пробы раунда 5 закончены: 33,28 ₽ из 100 (психолог годится; поиск по истории с правками; разбор медиа не выкатывать; ФИО дорого). Разобрана жалоба Александра 19.10 на качество планов: 4 причины в коде, предложение отправлено владельцу.

→ 1) Разобрать падение c716 на main; 2) выкатить С7.18 на стенд, когда Александр не активен, закрыть критерии С7.18; 3) отчёт по пробам R5 владельцу; 4) ждать решения владельца по жалобе на планы, потом критерии и экзамены до кода.