← все проекты

AITODO — Мой день

Редизайн aitodo вокруг одной страницы «Мой день»: режим дня + задачи на таймлайне, фокус, клиенты, бэклог, ИИ-строка. Концепция: myvisionagency.ru/lab/aitodo-day

repo: E:/Проекты для Гитхаба/Новое поколение TODO (сервер aitodo:/opt/TODO-New, docker compose)server: prod https://aitodo.myvisionagency.ru, контейнеры aitodo-backend/frontend/postgres/redis
В РАБОТЕS1 · С1 · Мой день5/6

Цель: Страница /my-day: таймлайн (режим дня + задачи), режим в БД, галочки, панели Фокус/Бэклог

Бэкенд: routine_blocks + routine_logs + миграция 019 + API /api/routine
Модели, alembic 019 (stamped, таблицы создал create_all), CRUD блоков + /day + /log, RAG-запись при создании/отметке
feature
Фронт: страница /my-day — таймлайн с жёлобом часов, галочки режима, сейчас/следующее
Две дорожки, раскладка пересечений задач по колонкам, линия «сейчас», задачи без времени отдельной полосой
feature
Панели Фокус и Бэклог + «→ в план» + модалка настройки режима (импорт из Идеального дня)
Фокус через useFocusTimer (синхронно с виджетом), бэклог pending → todo на выбранный день + открытие TaskDetailModal
feature
Пункт «Мой день» в сайдбаре + деплой на aitodo
Задеплоено: https://aitodo.myvisionagency.ru/my-day (200)
feature
Проверка глазами владельца + мелкие правки по фидбеку
feature
Верхняя навигация вместо сайдбара 18 пунктов (Мой день·Задачи·Календарь·Фокус·Ещё)
TopNav.tsx: 4 пункта + «Ещё» (15 разделов, 2 колонки), мобильное меню; Header без lg:left-64, логотип, компактный чип состояния; Sidebar отключён; убран мёртвый линк lia.myvisionagency.online
feature
готовS2 · С2 · Клиенты3/3

Цель: Сущность clients + touches, страница-пайплайн, панель «сегодня написать» на Моём дне

Бэкенд: clients + client_touches, миграция 020, API /api/clients (+/today, касания)
Статусы new→contacted→dialog→waiting→client/refused, источник, next_contact_date; касание обновляет last_contact и спрашивает следующую дату; RAG-записи
feature
Страница /clients: пайплайн 6 колонок + модалка (статусы, заметка, журнал касаний, архив)
Бейджи «написать сегодня/просрочено», быстрые даты след. касания (завтра/+3/+нед), пункт «Клиенты» в TopNav
feature
Панель «Клиенты» на /my-day: кому написать сегодня + счётчики пайплайна + «Написал ✓»
GET /api/clients/today; кнопка открывает модалку сразу с формой касания
feature
готовS3 · С3 · Лия-руки1/1

Цель: ИИ-строка на Моём дне: создание задач/бэклог/перенос через tool-парсер с превью-подтверждением

ИИ-строка Лии на /my-day: parse + превью-подтверждение + исполнение
POST /api/ai-command/parse (gpt-4o-mini, только парсинг; превью и исполнение — код): create_task/add_to_backlog/reschedule_task/complete_task/complete_routine. Фронт AiCommandBar: чипы-примеры, превью «Лия поняла… Ок?», исполнение через существующие tasksApi/routineApi
feature
готовS4 · С4 · Полировка3/3

Цель: Вкладка «Неделя», объединение двух страниц фокуса, drag идей из бэклога на таймлайн

Вкладка «Неделя» на /my-day: 7 колонок, режим N/M, задачи, клик в день
Стрелки листают неделю по 7 дней; сегодня подсвечен
feature
Drag идей из бэклога на таймлайн (время по месту дропа, шаг 15 мин)
HTML5 dnd, зелёный индикатор времени; «→ в план» остался как альтернатива
feature
Супер-фокус на странице /focus: полоска активного челленджа
День N из M + прогресс-бар, ссылка в /super-focus; страницы объединены логически, «Фокус» один пункт в нав
feature
готовS5 · С5 · Лия видит всё4/4

Цель: Клиенты и режим дня в телеграм-Лие (lia-v2) + веб ИИ-строке; клиенты в утреннем брифе

lia-v2: 8 тулов клиентов и режима дня + методы AitodoClient
CLIENT_TOOLS (get/today/add/update/touch) + ROUTINE_TOOLS (day/check/add_block) в backend/tools/clients_routine.py; request_raw без авто-слэша (иначе 307); X-User-Id auth; бэкапы .bak-20260727
feature
lia-v2: клиенты + режим дня в утреннем брифе 08:00
proactive/routines.py: шаги get_clients_today и get_routine_day + секции 🤝/🗓 в формате брифа
feature
Веб ИИ-строка: add_client + log_client_touch с превью
/api/ai-command/parse: 2 новых действия, контекст клиентов с /my-day; исполнение через clientsApi
feature
Старый telegram-bot (V1, выключен): те же 8 тулов на будущее
telegram-bot/main.py в TODO-New обновлён, но контейнер не запущен — живая Лия это lia-v2 (/opt/lia-v2)
feature
готовS6 · С6 · Виджеты для ПК9/9

Цель: Десктопные виджеты Windows (спорт, задачи/бэклог, фокус поверх окон, музыка) с синхронизацией через API aitodo

6.1 Бэкенд: дневная норма у workout_types + миграция
Поле daily_target (nullable float) + unit уже есть. Alembic ревизия после 020. Существующие тренировки не трогаем. Доказательство: строка из базы, ответ сервера.
Поле daily_target у workout_types, миграция 021 накатана на прод (alembic 021), 6 типов и 6 тренировок целы, дамп базы снят
feature
6.2 Бэкенд: GET /workouts/today — прогресс за сегодня с учётом часового пояса
По каждому типу с нормой: сделано, осталось, проценты. Считает код. Параметр tz_offset_minutes, день по местному времени.
GET /api/workouts/today?tz_offset_minutes: done_today/remaining/percent считаются запросом к базе, сходятся с суммой primary_value
feature
6.3 Бэкенд: часовой пояс в /focus-sessions/stats
Сейчас день считается по UTC, в Екатеринбурге цифра «за сегодня» врёт до 05:00. Добавить tz_offset_minutes, не сломав веб /my-day и Лию.
tz_offset_minutes в /api/focus-sessions/stats, «сегодня» от местной полуночи (from +05:00), без параметра поведение прежнее
feature
6.4 Каркас Electron: трей, автозапуск, окна, вход, очередь синхронизации
Папка desktop/ в репо. Безрамочные окна: перетаскивание, сворачивание в заголовок, закрытие, запоминание позиций. Вход по логину и паролю, токен в safeStorage. Локальный кэш + outbox с ретраями.
Electron + esbuild без нативных модулей: трей, автозапуск, безрамочные окна с перетаскиванием, сворачиванием и уголком размера, вход с токеном в safeStorage, очередь отправки в state.json
feature
6.5 Виджет Спорт
Нормы списком: сделано из нормы, осталось, проценты, полоска. Быстрый плюс и произвольное число. Добавить, изменить, удалить норму. Сброс дня по местной полуночи.
Виджет «Спорт»: нормы, проценты, быстрые кнопки и своё число, создание, правка и удаление нормы. Не проверен вживую до входа владельца
feature
6.6 Виджет Задачи и бэклог
Группы Сейчас / Дальше / Бэклог. Ввод строки в бэклог, «в план на сегодня», закрытие галочкой, дописать подпункт в задачу.
Виджет «Задачи»: Сейчас / Дальше / Бэклог, запись в бэклог, «в план на сегодня», закрытие, подпункты. Не проверен вживую до входа владельца
feature
6.7 Виджет Фокус поверх всех окон
Старт, стоп, таймер сессии, время за сегодня. alwaysOnTop уровня screen-saver, не перекрывается браузером и VS Code. Подхват активной сессии после перезагрузки.
Виджет «Фокус»: старт и стоп, таймер, время за сегодня, alwaysOnTop screen-saver с подтверждением каждые 4 секунды, подхват открытой сессии
feature
6.8 Музыка для фокуса
Плеер из локальной папки с mp3: играть, пауза, следующий, громкость, повтор. Путь в настройках, пустое состояние объясняет куда класть файлы.
Плеер из локальной папки через схему aitodo-media с проверкой пути: играть, пауза, следующий, громкость, повтор, вперемешку
feature
6.9 Сдача: установщик .exe, проверка на живом ПК, ревьюер, документация
electron-builder NSIS, автозапуск при входе в Windows. Проверка на машине владельца, агент-ревьюер, ACCEPTANCE / DECISIONS / SCOPE-CUTS, ворклог.
Установщик «Виджеты aitodo Setup 1.0.0.exe» собран дважды (второй раз с фиксом автозапуска). Живая проверка снимками экрана: виджеты рисуются, задачи и нормы приходят с сервера, счётчик суток обнулился к новому дню, фокус держится поверх развёрнутого браузера, плеер видит папку с музыкой. Документация и срезанные углы записаны. Агента-ревьюера не запускал: разрешения на подагентов не было.
feature
ревьюS7 · С7 · Проекты и рабочий день8/8

Цель: Раздел «Проекты» (проекты по группам, спринты со сроком, задачи, бэклог проекта), привязка задач и бэклога к проекту, виджеты «Проекты» и «Мой день»

7.1 Данные: миграция 022
projects: группа, признак архива, порядок. Новая таблица sprints (проект, название, цель, начало, конец, статус, порядок). tasks: project_id, sprint_id, estimate_minutes. Канбан (columns/cards) не трогаем.
Миграция 022 накатана (alembic 022): у projects группа и порядок, таблица sprints, у tasks project_id/sprint_id/estimate_minutes. Связи переведены на SET NULL. Миграция смотрит на фактическое состояние базы: прод разошёлся с моделями (emoji и is_archived у projects, project_id у tasks уже были). 4 проекта, 12 колонок, 5 карточек, 253 задачи до и после.
feature
7.2 API проектов и спринтов
Список проектов со счётчиками (бэклог, в работе, активный спринт), CRUD спринтов, сводка проекта одним ответом: спринты с задачами + бэклог проекта.
GET /projects/overview со счётчиками и активным спринтом (два групповых запроса, без N+1), GET /projects/{id}/summary одним ответом, CRUD спринтов. Один активный спринт на проект; найден и починен баг «новый активный спринт гасил сам себя» (нужен flush до снятия активности у остальных).
feature
7.3 API планирования дня
Фильтры задач по project_id и sprint_id, постановка задачи в день со слотом (scheduled_date + start/end), снятие из дня. Часовой пояс клиента.
Фильтры задач project_id/sprint_id/only_general/day с часовым поясом, POST /tasks/{id}/plan (дата + слот, из бэклога сама в план) и /unplan. Проверено ответами сервера: слот 10:00–10:45 из оценки 45 минут, снятие возвращает в бэклог.
feature
7.4 Веб: раздел «Проекты»
Страница: список по группам с цветом и счётчиками, вход в проект, спринты аккордеонами, задачи со статусом и оценкой, бэклог проекта со строкой ввода, переносы бэклог→спринт и задача→мой день. Пункт в TopNav.
Страница /projects: проекты по группам с цветом и счётчиками, вход в проект, спринты со сроком и статусом, задачи с оценкой и статусом, бэклог проекта со строкой ввода, переносы в спринт и в мой день, пункт в TopNav. Прогнано мышью в браузере: проект, спринт, задача, отправка в день.
feature
7.5 Веб: связи проекта с бэклогом и днём
Выбор проекта в общем бэклоге и в карточке задачи, фильтр бэклога по проекту, цвет проекта у задач на таймлайне «Мой день».
В общем бэклоге выбор проекта у каждой идеи и фильтр по проекту (фильтр же адрес новой записи). Цвет проекта полосой на таймлайне «Мой день». Побочно починен старый баг: бэклог грузил сто последних задач любого статуса и показывал 16 идей вместо 21.
feature
7.6 Виджет «Проекты»
Список проектов с цветом и счётчиками, создание проекта, вход в проект: спринты, задачи, бэклог проекта. Добавить задачу, отправить в мой день.
Виджет «Проекты»: список по группам с цветом и счётчиками, создание проекта, вход в проект со спринтами, задачами и бэклогом, отправка задачи в день. Проверен снимком окна на живых данных.
feature
7.7 Виджет «Мой день»
Лента по часам на сегодня: режим дня и задачи слотами, отметка «сейчас», цвета проектов. Поставить задачу на время, перенести из бэклога, взять из проектов.
Виджет «Мой день»: лента по часам (режим дня + задачи слотами), подсветка текущего блока, цвета проектов, «добрать работу» с фильтром бэклог/проекты, «поставить на время» одним запросом. Заодно починены подпункты в виджете «Задачи»: сервер отдаёт subtasks, а читался checklist.
feature
7.8 Сдача спринта 7
Деплой по явному «да», доказательства ответами сервера и снимками, ACCEPTANCE по пунктам, установщик, docs/DESKTOP_WIDGETS.md и раздел про проекты, SCOPE-CUTS, dev-sync.
Бэкенд и веб выкачены на прод по «да», бэкап снят, тестовые данные вычищены. Установщик 1.1.0 собран. Написаны docs/PROJECTS.md, обновлены DESKTOP_WIDGETS.md, ACCEPTANCE (с доказательствами) и SCOPE-CUTS-LOG. Не закрыто мышью: часть кнопок в вебе и действия в новых виджетах, это за владельцем.
feature
В РАБОТЕS8 · С8 · Входящие: одно место для всего20/21

Цель: Одно место, куда падает что угодно из любого канала (текст, пересылка, голос, файл) и не теряется: сущность «входящие», Лия как приёмник, виджет и страница для разбора

8.1 Данные: сущность «входящие»
Таблица inbox_items: источник (telegram/voice/file/manual/email/meeting), ссылка на исходник, автор, текст, расшифровка, файлы, подсказки (заголовок/проект/оценка/срок), статус new/task/dropped, связь с задачей. Миграция 023.
Таблица inbox_items, миграция 023 на проде. Источник, ссылка на исходник, автор, текст, расшифровка, файлы, подсказки, статус new/task/dropped.
feature
8.2 API входящих
POST /api/inbox (текст + файлы), GET /api/inbox?status=, POST /api/inbox/{id}/to-task (создаёт задачу с проектом), /to-backlog, /drop. Разметка проекта по совпадению названия — кодом, не моделью. Файлы через существующий uploads.
API входящих: положить, список со счётчиками, в задачу (создаёт задачу с проектом и переносит вложения), выкинуть, вернуть. Проект угадывается кодом по названию, проверено: «в Клиенты» → проект 8, «Пульс цен» → пусто (такого проекта нет, не выдумывает).
feature
8.3 Расшифровка голоса на стороне aitodo
Сервис транскрипции (OpenAI gpt-4o-mini-transcribe / whisper-1 на существующем ключе), пригодный и для будущих встреч: сменный движок, чтобы добавить Groq и локальный whisper без переписывания.
Сервис расшифровки со сменным движком, по умолчанию Groq whisper-large-v3-turbo (3,6 ₽/час вместо 32 ₽ у OpenAI). Ключ Groq в .env, приложение его видит, путь проверен живым запросом. Платная разметка голосов только по явному флагу.
feature
8.4 Лия как приёмник
Не команда → во входящие: текст, пересылка (с ссылкой на сообщение и автором), голосовуха (расшифровка), документ и фото (файл в uploads). Ответ одной строкой «записал: ... → проект». Команды работают как раньше.
Лия принимает: пересылки, файлы, фото, аудио и видео идут во входящие без вызова модели (обработчик до общего), плюс инструменты inbox_add и inbox_list для «запиши». Инструментов стало 53. Проверено вызовом инструмента изнутри контейнера: запись доехала до базы как source=telegram.
feature
8.5 Виджет «Входящие»
Поле ввода, перетаскивание файла в окно, список входящих с источником, три кнопки разбора. Счётчик непрозобранного в трее.
Виджет «Входящие»: список с источником и автором, разбор в три кнопки с выбором проекта, строка записи, перетаскивание файла в окно.
feature
8.6 Страница /inbox в вебе
То же в браузере: список, разбор, файлы, ссылка на исходник.
Страница /inbox: вкладки неразобранное и выкинутое, разбор, ссылка на исходник, пустое состояние. Пункт в TopNav первым; «Календарь» уехал в «Ещё», иначе меню налезало на индикаторы.
feature
8.7 Сдача
Деплой по «да», доказательства: голосовуха из телеграма доехала во входящие с расшифровкой, файл сохранён, задача создалась с проектом. Документация docs/INBOX.md, ACCEPTANCE, dev-sync.
feature
8.8 Календарь: неделя, разворот окна, цвета
Виджет «Мой день»: переключатель день/неделя, семь колонок с раскладкой по часам и прибитой шапкой дней, клик по клетке ставит встречу на этот день и час, легенда цветов по проектам, разворот окна на весь экран, выбранный вид запоминается. В вебе починен щелчок по времени: было округление к ближайшим 15 минутам и клик по 15:00 давал 15:15, теперь магнит к часу.
Проверено снимком: шапка дней прибита, сегодня подсвечен, блоки стоят по времени, линия «сейчас» на месте. Не проверено мышью: разворот на весь экран и создание встречи кликом по клетке.
feature
8.9 Календарь: правка времени и карточка задачи
По замечанию владельца: в форме постановки день, время и длительность стали полями (ткнул мимо — поправил, а не кликал заново). Клик по блоку задачи открывает карточку в виджете: название, день, время, длительность, проект, кнопки готово / снять с дня / удалить / открыть в aitodo. Раньше на клике стояла заглушка со всплывашкой.
Типы чистые, собрано, приложение перезапущено. Мышью проверяет владелец: правка времени в форме и сохранение карточки.
feature
8.10 Прогон разбора на настоящей встрече
Запись 19.08.2026, 43 минуты, 587 МБ видео. ffmpeg локально вынул звук в opus 24k моно (7 МБ), загрузка на /api/meetings/audio, расшифровка Groq whisper-large-v3-turbo за 24 секунды (28 388 знаков), разбор gpt-4o-mini. Итого около 3 рублей.
Разбор осмысленный: тема «контент-стратегия и реклама в соцсетях», саммари, решение, две задачи (медиаплан до 25 числа, автоматизация КП) — обе автоматом легли во «Входящие» со ссылкой meeting:1, плюс повисший вопрос и прозвучавший срок. Файлы саммари.md и разбор.json легли в папку встреч. СЛАБОЕ МЕСТО: у этой записи микрофон и собеседники сведены в одну дорожку (разница каналов −91 дБ), поэтому роли не разделились: «Говорящий 1, 100% времени», тезисы сторон слились. Для будущих встреч решается записью через виджет (две дорожки, те же 3 ₽), для этой — платной разметкой за ~23 ₽, владелец решает.
test
8.11 Документы по встрече: подробный md и синопсис PDF
Формат по образцу владельца. Расшифровка Groq переведена на verbose_json — появились таймкоды по отрезкам, реплики склеиваются в блоки по минуте. Промпт разбора расширен: решения с таймкодами, задачи с ответственным/сроком/триггером/уверенностью, разделы обсуждения по темам, развилка (тезис-антитезис), статус-факты, риски, вехи, что требует подтверждения владельца, следующая контрольная точка. Новые блоки лежат одним json-полем meetings.extra (миграция 025), чтобы следующий блок не требовал миграции. Рендер в app/services/meeting_docs.py: markdown с шапкой полями и таблицами + светлый синопсис карточками. Маршруты GET /meetings/{id}/docs и POST /meetings/{id}/redigest (пересборка разбора по сохранённой расшифровке, без повторной оплаты распознавания). Виджет после записи сам пишет саммари.md, синопсис.html и печатает синопсис.pdf скрытым окном.
Проверено на записи 19.08 (43 мин): таймкоды в решениях 00:00-01:29 и 10:12-11:39, документы в папке встречи, PDF 63 КБ. Слабое место: gpt-4o-mini выдаёт мало деталей (2 решения, 2 задачи на 43 минуты) против образца владельца. Ждём решения по модели разбора: 0,3 руб/встреча против ~5 руб за сильную модель.
feature
8.12 Пересборка приложения: владелец сидел на сборке от 12.08
Обнаружено при проверке: запущенная программа «Виджеты aitodo» была собрана 12.08 и держала блокировку единственного экземпляра, из-за чего версия из исходников молча выходила. В той сборке нет «Входящих», «Встречи», недели в календаре и карточки задачи — то есть всей работы спринта 8. Дополнительно: ELECTRON_RUN_AS_NODE от VS Code прилетает в дочерний процесс и запускает Electron как Node, launch надо делать с чистым окружением.
npm run dist пересобрал, папка запуска E:\...itodo-widgets обновлена через robocopy /MIR, приложение запущено (10 процессов, asar от 19.08 11:52, внутри inbox/meeting/day). Старая сборка остановлена.
bug
8.13 Разбор встречи по окнам вместо одного прохода
Владелец заметил: в разборе только начало встречи. Проверка подтвердила, что расшифровка полная (554 отрезка, 0-2575 сек из 2579, две паузы больше 20 сек), а обобщала модель: одна просьба на 28 тыс. знаков давала 2 решения и 2 задачи. Переделано на карту-свод: код режет встречу на окна по 8 минут / 7 тыс. знаков, модель выписывает факты из каждого окна отдельно (по 4 параллельно), код сшивает и чистит повторы, затем один проход на связный текст по уже собранным фактам. Плюс смысловая склейка: сравнение по буквам не ловит «прописать медиаплан» и «накидать общий план с бюджетом», поэтому модель отдаёт группы номеров, а склеивает код, выбирая формулировку с ответственным и сроком.
На той же записи: решений 2 -> 8, задач 2 -> 12, темы от 00:00 до 41:40, 4 пункта на подтверждение, 6 открытых вопросов. Пересборка идёт по сохранённой расшифровке, повторно за распознавание не платим: около 1 рубля за прогон, 20-30 секунд.
bug
8.14 Чистка задач разбора: владелец, пустые значения, входящие
Найдено при разборе живой встречи. 1) В графе ответственного стояло слово null строкой и метка «Говорящий 1» — теперь оба случая дают прочерк. 2) В сроке задачи тоже попадалось слово null: чистка и на сборке, и на отрисовке, чтобы старые разборы выглядели чисто. 3) «Маша — 0% времени» у человека, которого лишь упоминали: доля времени теперь только у тех, кто есть в записи голосом, остальные помечаются «упомянут на встрече». 4) Задачи без названного владельца не уезжали во «Входящие» и терялись — теперь уезжают с пометкой «владелец не назван, решить при разборе». 5) Пересборка разбора уносила в «выкинутые» неразобранные пункты от прошлой версии, чтобы во «Входящих» не лежали две формулировки одной задачи.
Проверено на встрече 19.08: в документах слово null не встречается ни разу, участники «Говорящий 1 — 100%» и «Влад — упомянут», во «Входящих» 11 активных пунктов и 15 автоматически убранных от прошлых прогонов.
bug
8.15 Запись встречи не уходила: nginx резал на 10 МБ
Владелец записал встречу 1 ч 35 мин виджетом, отправка упала с 413 Request Entity Too Large. Дорожки 13 и 15 МБ, вместе 28 МБ, а в /etc/nginx/sites-enabled/aitodo-mva стоял client_max_body_size 10M. Поднято до 300M, для location /api/ добавлены proxy_read_timeout и proxy_send_timeout 1800s и proxy_request_buffering off: разбор часовой встречи идёт минутами в том же запросе, 60 секунд его обрывали. Бэкап конфига рядом, nginx -t пройден.
Запись дослана тем же файлом, ответ 201 за 52 секунды. Запись не потерялась: виджет пишет файлы на диск до отправки.
bug
8.16 Две дорожки склеивались без времени, диалог рассыпался
transcribe_two_tracks складывал дорожки одна за другой: два огромных куска с start=0, сначала весь монолог владельца, потом весь чужой. Из-за этого окно разбора было одно на 1,5 часа и разбор снова выходил поверхностным. Теперь реплики берутся из отрезков обеих дорожек и сшиваются по времени, получается диалог с ролями «Ты» и «Собеседник». Резчик окон научился делить один огромный блок по тексту, а разбор помечает флагом, было ли в расшифровке настоящее время: без времени таймкоды не печатаются ни в md, ни в синопсисе, чтобы не было ссылок на «00:00».
На встрече 1 ч 35 мин: окон 9, решений 18, задач 9, на подтверждение 3, вопросов 7, тем 9. Роли разделились: Собеседник 90%, Ты 10%. Таймкодов у этой записи нет: расшифровка сделана до фикса.
bug
8.17 Кривая кодировка папки встреч и досылка записи
Виджет писал записи в E:/Р СћРЎР‚... — путь попал в state.json от сборки 12.08 в неверной кодировке и жил там, потому что настройки читаются из состояния, а не из значений по умолчанию. Записи ложились в отдельный кривой корень на диске E. Папка перенесена в «Транскрибации встреч и саммори», кривой корень удалён, путь в состоянии исправлен. Плюс: вместо страницы ошибки nginx с тегами виджет показывает человеческую причину (413 — файл больше разрешённого, 401 — сессия истекла), и появилась кнопка «Дослать запись»: отправка идёт тем же путём из файлов на диске, перезаписывать встречу не надо.
Папка встреч в настройках: E:/Транскрибации встреч и саммори, обе встречи лежат там. Приложение пересобрано и запущено (10 процессов). Кнопка досылки мышью не проверена.
bug
8.18 Склейка повторов теряла задачи
Смысловая склейка на gpt-4o-mini объединяла разные дела: за один прогон список задач усох с 15 до 6. Промпт ужесточён (сомневаешься — не объединяй), и добавлена проверка в коде: склейка проходит только при общем значимом слове (грубые основы по первым пяти буквам) или высокой похожести строк. Иначе пункт остаётся отдельным. Приоритет: лишний пункт в списке не страшен, потерянная задача страшна.
После правки на той же записи 18 решений и 9 задач вместо 7 и 6. Разброс между прогонами остался — это модель.
bug
8.19 Ответственный за задачу — из метки дорожки, а не из слова «я»
Владелец показал: почти все задачи встречи висели на нём, включая «показать, как дорабатывать изображения в Photoshop» — это дело дизайнера. Причина: модель видела в реплике слово «я» и ставила owner_is_me, не различая, чья это реплика. Переделано: модель теперь отдаёт said_by (метка блока, где задача прозвучала) и owner_kind (сам / собеседник / третий / неясно), а владельца выводит код по функции resolve_owner. Правило: сказал «сделаю» владелец записи — его задача; сказал то же собеседник — задача собеседника; «сделай» в адрес другого переворачивает владельца; названо третье лицо — берётся имя; неясно или запись одной дорожкой — владелец не назван, пункт уезжает в «Входящие» на разбор. В каждой задаче сохраняется said_by, чтобы было видно, из чьей реплики она взята.
На встрече с дизайнером было 15 задач «на меня», стало 2 моих и 15 на собеседника. Photoshop, гайд по шрифтам, каталог рамок, дизайн-ревью ушли дизайнеру. Проверено по синопсису.
bug
8.20 Модель разбора: DeepSeek V4 Flash вместо gpt-4o-mini
Владелец попросил DeepSeek Flash. Сверился с каталогом OpenRouter: deepseek/deepseek-v4-flash, 0,083 доллара за миллион входных и 0,165 за выходные против 0,15 и 0,60 у gpt-4o-mini, то есть дешевле и вдвое, и вчетверо. Заодно потребовалась устойчивость: ответ обрывался на полуслове (поднял max_tokens до 12000 и добавил починку обрезанного json по последнему целому элементу), иногда приходил пустой content вместо json (теперь своя ошибка и потеря одного окна вместо падения запроса). В промпте развёл решение и задачу, плюс код выкидывает решение, дословно повторяющее задачу.
На встрече с дизайнером 19 решений и 33 задачи против 18 и 9 у mini, формулировки конкретные: шрифт Inter, отклонён Baldet, цвета fit yellow 400/200, NanoBanana только для фото, шаблоны в Figma, созвон 25-го. Владельцы расставлены верно. Разбор полуторачасовой встречи меньше рубля, время 3 минуты против 30 секунд у mini — это цена качества.
feature
8.21 Грабля OpenRouter: скорость уводит к пожатой модели
Разбор на DeepSeek занимал 7 минут. Добавил provider sort throughput — стало 2:45, но в русском тексте начали выпадать буквы: «цифрово идентики», «выступю пртив», «чисты цвеа», Figma превратилась в «Film». json при этом валидный, код не падает, видно только глазами в готовом документе. Причина: среди быстрых поставщиков попадаются сильно квантованные копии. Лечение: sort throughput вместе с quantizations fp8/bf16/fp16/fp32 — 3:08 и чистый текст.
Записал в память как общую граблю для всех проектов через OpenRouter, не только aitodo.
bug
ревьюS9 · С9 · План дня и поля задачи6/6

Цель: Один список разбора, перенос задач мышкой на время, честные поля задачи и пометка встречи

9.1 Входящие и бэклог одним списком «Разобрать»
Страница /backlog показывает заметки входящих и идеи одним потоком, у заметок кнопки Запланировать/Отложить/Выкинуть. /inbox ведёт туда же, в меню один пункт. Данные не переносил: сущности остались свои.
task
9.2 Страница «Спланировать день» с переносом мышкой
Новая /plan-day: слева задачи без времени, справа сетка дня по 30 минут. Перетащил — встало время и длительность, обратно в список — время снялось. Проверено на проде.
task
9.3 Конвертация спрашивает день и время
Окно «Когда сделать»: быстрые кнопки (сегодня утром/после обеда/завтра), дата-время и длительность. Раньше молча ставило сегодня.
task
9.4 Перетаскивание задач по времени в «Моём дне»
Блок задачи тянется мышкой, длительность сохраняется. Сделано на том же механизме, что и перенос из бэклога.
task
9.5 Поля задачи: «Когда начать» + «Сколько времени»
Убран блок «Запланированное время», дедлайн переименован в «Когда начать» (пишет scheduled_start), длительность кнопками 15/30/45/1ч/1,5ч/2ч/3ч или своё. Миграция 026 перенесла старые дедлайны в scheduled_start — 158 задач сохранили время.
task
9.6 Описание: рост под текст, файлы, чек-лист + пометка «встреча»
Описание тянется при наборе и принимает файлы перетаскиванием и вставкой из буфера (до 10 МБ). Пометка «встреча» отдельным полем is_meeting (не тегом) — своя рамка в списке, календаре и «Моём дне».
task
В РАБОТЕS10 · Проверки по сроку0/1

Цель: Отложенные проверки: сработало ли то, что чинили

Встречи: ушло ли удвоение фраз в расшифровке
25.08 · просрочено 6 дн.
21.08 в расшифровке встречи 4 каждая фраза шла дважды и вылезали выдумки Whisper на тишине («Продолжение следует», подписи субтитров с ютуба). Выкатил чистку: фильтр по no_speech_prob>0.6, compression_ratio>2.4, список выдуманных фраз, склейка повторов в окне 45 секунд. На старых данных выкинуло 126 отрезков из 380. Осталась неясность: внутри одной реплики текст тоже повторялся — это похоже на эхо из колонок в микрофон, то есть проблема в самом звуке, а не в расшифровке. КОМАНДА ПРОВЕРКИ (после следующей записанной встречи): curl -s 'https://aitodo.myvisionagency.ru/api/meetings/?limit=1' -H "Authorization: Bearer $TOKEN" Взять transcript, посчитать пары почти одинаковых соседних реплик (difflib > 0.82 в окне 8 реплик). Было: 433 пары на 380 реплик. Должно стать близко к нулю. Если повторы внутри одной реплики остались — смотреть звук: ffprobe запись-микрофон.webm и запись-система.webm в папке встречи, проверить, не слышен ли собеседник в микрофонной дорожке (эхо из колонок).
check
ревьюS11 · С11 · Битрикс: задачи и встречи с работы5/5

Цель: Забирать задачи и встречи из рабочего портала в план дня, уведомлять в телеграм

11.1 Клиент к порталу и разбор механики
Вебхук читает задачи, календарь и профиль. Поймано и записано в код две ловушки портала: методы задач живут под правом «task» в единственном числе (с «tasks» отказ), а фильтр «!=STATUS» со списком портал понимает наоборот и отдаёт ровно закрытые задачи — заменено на сравнение числом «<5».
task
11.2 Время встреч читается верно
Поле DATE_FROM_TS_UTC на портале смещено на пояс (13:00 Екб приходит как 03:00 UTC вместо 08:00 — двойная конвертация Битрикса). Время берём из DATE_FROM плюс смещение события. Проверено: 13:00 и 16:00 встали как в портале.
task
11.3 Перенос в план без дублей
Таблица связей bitrix_links: внешний номер, отпечаток содержимого, отметки об уведомлении. Миграция 027. Задача с дедлайном получает старт за два дня до срока, встреча занимает время в дне и получает пометку «встреча». Удалённое руками не возвращается. Три захода подряд — ни одного дубля.
task
11.4 Уведомления Лии
Одно сообщение на заход, только про новое и про перенесённое: проактивный чекер в этом проекте уже выключали за спам. Проверено, что бот видит чат владельца; отказ телеграма больше не проходит молча — код смотрит на ответ.
task
11.5 Планировщик каждые пять минут
Задание bitrix_sync в APScheduler. Ручки /api/bitrix/status, /preview и /sync для проверки руками. Ключ портала только в .env, в коде и в дашборде его нет.
task
ревьюS12 · С12 · Качество разбора встреч5/5

Цель: Русский язык без иероглифов, отбор задач от болтовни, контекст встречи в каждом пункте

12.1 Иероглифы в задачах: язык проверяется кодом
Модель deepseek-v4-flash китайская и на длинных окнах уплывала на свой язык: на встрече 26.08 девять задач из сорока семи пришли по-китайски, включая тему встречи. Правило языка добавлено в оба промпта (окна и сводный текст), плюс проверка кодом: нашли иероглифы — просим ещё раз по-русски, второй отказ — выкидываем чужие пункты и подписи. Проверено на данных встречи 9.
task
12.2 Отбор задач от разговорной шелухи
В промпте прямо стояло «выписывай ВСЕ задачи, даже мелкие, лучше десять пунктов чем два общих» — отсюда сорок семь пунктов с «Допилить» и «Нажать ещё раз». Заменено правилами: задача = дело после встречи с результатом; не задача — то, что сделали по ходу, и общие намерения. Плюс отбор кодом перед Входящими (worth_inbox): иероглифы, обрывки короче 14 знаков, одно общее слово, низкая уверенность без срока. На встрече 9: 46 задач, во Входящие прошло бы 34.
task
12.3 Контекст встречи в каждом пункте
Задача помнит встречу: поле meeting_id, миграция 028, связь в модели. Входящие отдают контекст (название, тема, дата) одним запросом на список. Видно в «Разобрать», в бэклоге, в карточке задачи и в виджете. Проставил связь у 9 задач, конвертированных ранее. Убрал китайскую тему у встречи 9.
task
12.4 Описание пункта без повторов
Описание больше не дублирует название задачи и не пишет заново «Со встречи X» (это в подписи). Вместо повтора — «Начинать когда» и «Прозвучало на 15:08», чтобы найти место в записи. Почищено 72 уже существующих пункта.
task
12.5 Виджет: окно не замирает на разборе
Сервер отдаёт решения объектами, виджет ждал строк — экранирование падало, окно замирало на «Разбираю встречу» и записать новую было нельзя. Экранирование терпит любой тип, отрисовка обёрнута в защиту с запасным экраном, «Записать новую» и «Проверить разбор» доступны сразу, поздний ответ не перебивает новую запись. Примечание про роли убрано из поля ошибки.
task
готовS13 · С13 · Знания по проектам4/8

Цель: Единый склад материалов по проектам и контекст, который ИИ находит сам

13.1 Спроектирована архитектура склада знаний
Страница myvisionagency.ru/lab/aitodo-znaniya: четыре уровня (контур, проект с паспортом, материал, куски для поиска), четыре точки входа, правило «сначала код сужает до проекта, потом поиск по смыслу», бриф собирается кодом. Разобрано что уже есть: pgvector установлен, таблица памяти 282 записи но только личное, 288 тысяч знаков расшифровок, MCP в репо только про деплой.
task
13.2 Контур, вид, паспорт и алиасы у проекта
Миграция 029. Контур work_1/work_2/own отдельно от группы: он решает, что уходит наружу и что нельзя показывать не тому работодателю. Паспорт — один экран, который ИИ читает первым. Алиасы — как проект называют в жизни.
task
13.3 Поиск проекта по фразе человека
GET /api/projects/resolve: нормализация без пробелов и регистра, точное совпадение по названию и алиасам, затем вхождение. Двусмысленность не разрешаем сами — отдаём варианты («контент завод» = два проекта). Проверено: «фл» и «фитлид» находят Фит Лид, «навесы», «аитуду», «кз идеи» — свои проекты. Ловушка: маршрут /resolve перехватывался /{project_id}, пришлось поднять выше по файлу.
task
13.4 Экран паспорта на странице проектов
Компонент ProjectPassport: контур кнопками, вид, алиасы чипсами, паспорт с подсказкой по структуре (чем занимается, ЦА, что пробовали, кто решает, чего обещать нельзя). Сохраняется по месту, без кнопки «сохранить».
task
13.5 Заполнить паспорта проектов
Контуры и алиасы проставлены у шести проектов из фактов. Осталось: сам текст паспортов (у владельца), контур «Пульс цен» (нет однозначного признака) и решение, создавать ли три проекта-бренда первой работы (Искра, Рабочее место маркетинга, СММ-Агент — видны в задачах Битрикса).
task
13.6 Материалы, куски и поиск по смыслу
Второй этап по плану: таблица материалов (вид, откуда, файлы, состояние, связи), нарезка длинных текстов на куски, векторы, страница «Знания» у проекта, пересчёт того что накопилось.
task
13.7 Точки входа: телеграм, встречи, веб
Третий этап: голосовое и файл в знания через Лию с подтверждением проекта, идеи со встречи кнопкой в материалы, перетаскивание файлов на странице проекта. Файлы до 50 МБ у себя, видео ссылкой с расшифровкой звука.
task
13.8 Инструменты для Клода
Четвёртый этап: найти проект, бриф проекта, искать в знаниях, положить материал, кусок расшифровки. Та же база, что у Лии.
task

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

27.08.2026, 11:28:22 · · claude

Спроектирован склад знаний по проектам (страница /lab/aitodo-znaniya) и сделан первый этап: у проекта появились контур, вид, паспорт и алиасы, плюс поиск проекта по фразе человека. Проверено на живых данных: «фл» находит Фит Лид, «навесы» — клиента, двусмысленное «контент завод» просит уточнить. Контуры и алиасы проставлены у шести проектов. Ключевое архитектурное правило зафиксировано: сначала код сужает до проекта, потом поиск по смыслу внутри границ.

1) Владельцу заполнить тексты паспортов на /projects. 2) Решить контур «Пульс цен» и создавать ли три бренда первой работы. 3) Второй этап: материалы, куски, векторный поиск, страница «Знания». 4) Не забыть: перезапуск разбора встречи 9 по просьбе владельца («давай потом»).

27.08.2026, 02:06:23 · · claude

Разбор встреч: починены три жалобы владельца. Иероглифы в задачах (китайская модель уплывала на свой язык) — правило в промптах плюс проверка кодом с повтором. Мусорные задачи («Допилить», «Нажать ещё раз») — причина была в самом промпте, который требовал выписывать всё подряд; добавлены правила и отбор кодом перед Входящими. Контекст встречи (название, тема, дата) теперь виден в каждом пункте и в бэклоге, задача помнит встречу через meeting_id, миграция 028. Плюс починен виджет: окно замирало на «Разбираю встречу», потому что отрисовка падала на решениях-объектах.

1) Предложено владельцу перезапустить разбор встречи 9 «навесы» (около 2-3 руб): даст тему по-русски и меньше мусора, дублей не будет — в повторном разборе есть защита по отметкам inbox_item_id. Ждём «да». 2) Проверить на следующей записанной встрече, что иероглифов больше нет и задач стало меньше при том же смысле. 3) Не сделано из плана: контуры работа1/работа2/своё, Outlook, вместимость дня.

26.08.2026, 09:12:27 · · claude

Спроектировал систему (страница myvisionagency.ru/lab/aitodo-sistema): встречи до конца, три контура, связь календарей, что ещё оптимизировать. Затем сделал первую часть по факту — чтение Битрикса: 4 живые задачи и 2 встречи перенесены в план, встречи видны в «Моём дне» на правильном времени. Две ловушки портала разобраны и записаны в код: право «task» в единственном числе и перевёрнутый фильтр «!=STATUS» со списком. Плюс смещение UTC-отметок календаря на пояс. Наружу пока не пишем: портал рабочий, запись — отдельное решение.

1) Первое уведомление в телеграм пришло с путаницей: из-за перевёрнутого фильтра в него попали две уже закрытые задачи. Фильтр исправлен, задачи убраны, второе сообщение верное. 2) Outlook: проверить, пускает ли обычного пользователя к своему календарю (десять минут), от этого зависит запись. 3) Контуры (работа 1 / работа 2 / своё) ещё не сделаны — задачи из Битрикса пока помечаются словом «битрикс». 4) Отложенные задачи портала (статус 6) не тянем — решить, надо ли.

21.08.2026, 03:35:01 · · claude

Виджет встреч: часы считались двумя таймерами и удваивали длительность (получасовая встреча уезжала на сервер как час) — теперь время от метки, плюс спасение из зависшей отправки (через 6 минут кнопка «Проверить разбор»). Разбор встречи: включил режим json и глушение размышления у модели (она присылала свой монолог вместо ответа и теряла окна), чистку латинских двойников в русских словах, повтор окна при сбое. Расшифровка: выкидываю выдумки Whisper на тишине («продолжение следует», подписи субтитров) и повторы — на встрече 4 это 126 отрезков из 380. AITODO: шесть правок пользователя — один список разбора, страница планирования дня с переносом мышкой, конвертация со временем, перенос задач в «Моём дне», поля «Когда начать» и «Сколько времени», описание с файлами и пометка встречи. Миграция 026 на проде, проверено в браузере.

1) Проверить на следующей записи встречи, ушло ли удвоение фраз внутри реплики: если осталось — причина в самом звуке (эхо из колонок в микрофон), а не в расшифровке. 2) Отдельная поломка, не трогал: крон ИИ-офиса сыплет «run_cron_task() takes 3 positional arguments but 4 were given». 3) Проверка здоровья бэкенда в docker дёргает curl, которого нет в образе — контейнер вечно «unhealthy». 4) Статус в карточке задачи остался системным select — предложить заменить на кнопки, как приоритет.

19.08.2026, 10:46:07 · С8 · claude

Модель разбора переведена на DeepSeek V4 Flash: дешевле gpt-4o-mini и заметно точнее в формулировках и в деталях. По пути добавлена устойчивость к обрезанным и пустым ответам, разведены решения и задачи, и найдена грабля OpenRouter: просьба о скорости без фильтра точности уводит к пожатой копии модели, из русского текста выпадают буквы. Документы и PDF по обеим встречам перевыпущены.

Владелец подтвердил: боты в Телемост не нужны, всё идёт через виджет на его ПК. Значит следующее по этой линии — автоподсказка «идёт разговор, писать?» по занятому микрофону и наблюдатель за папками записей. Кроме этого не сделано: вечерний разбор и план на завтра, страница встреч в вебе, посадки-пульты. Проверить мышью кнопку «Дослать запись». Во «Входящих» скопилось 30 пунктов с двух встреч — им нужен разбор.

19.08.2026, 09:47:36 · С8 · claude

Главная претензия владельца закрыта: задачи больше не приписываются ему поголовно. Ответственный выводится кодом из метки дорожки (микрофон против звука системы), а не из слова «я» в реплике. На живой встрече это дало 2 своих задачи вместо 15 и корректную передачу дел дизайнеру.

Владелец спрашивает про готовые опенсорс и коммерческие решения. Ответ: расшифровка и роли у нас уже дешёвые и рабочие, слабое место — модель разбора. Предложить А/Б: тот же транскрипт на сильной модели (около 6-8 рублей на встрече 43 минуты) против текущего gpt-4o-mini за рубль. Для имён вместо «Собеседник» — локальная диаризация WhisperX плюс pyannote на его RTX 3050, бесплатно. Ждём решения.

19.08.2026, 09:14:55 · С8 · claude

Запись встречи не уходила на сервер: nginx пускал 10 МБ, а запись на 1,5 часа весит 28. Лимит поднят до 300 МБ, таймауты разбора до 30 минут, запись дослана из файлов на диске. По пути найдено и починено ещё четыре вещи: склейка двух дорожек без времени (диалог рассыпался, окно было одно), кривая кодировка папки встреч из старой сборки, страница ошибки nginx вместо человеческого текста, и склейка повторов, которая теряла задачи. Добавлена кнопка «Дослать запись».

Хочет ли владелец перегнать запись 1 ч 35 мин заново ради таймкодов и правильного диалога по ролям (около 12 рублей за распознавание двух дорожек). Решение по модели разбора: разброс между прогонами на gpt-4o-mini заметный. Проверить мышью кнопку «Дослать запись». Не сделано: вечерний разбор и план на завтра, автоподсказка записи по занятому микрофону, наблюдатель за папками записей, страница встреч в вебе, посадки-пульты.

19.08.2026, 07:11:25 · С8 · claude

Владелец был прав: разбор охватывал только начало встречи. Расшифровка оказалась полной, виновата была одна просьба на все 43 минуты. Разбор переделан на окна с последующей сшивкой кодом и смысловой склейкой повторов: на той же записи решений стало 8 вместо 2, задач 12 вместо 2, факты по всей встрече. Заодно вычищены слово null в ответственном и сроке, фальшивые «0% времени» у упомянутых людей, а задачи без владельца теперь доезжают до «Входящих».

Решение владельца по модели разбора: сейчас gpt-4o-mini и около 1 рубля за встречу; сильная модель даст более точные формулировки за ~5 рублей. Роли по-прежнему не разделяются на записях с одной дорожкой. Не сделано: вечерний разбор и план на завтра, автоподсказка записи по занятому микрофону, наблюдатель за папками записей, страница встреч в вебе, посадки-пульты.

19.08.2026, 06:56:53 · С8 · claude

Встречи теперь дают два документа: подробный md с таймкодами, задачами по людям и тем, что требует подтверждения, и синопсис одной страницей в PDF. Для этого расшифровка переведена на сегменты с временем, промпт разбора расширен, добавлены маршруты документов и пересборки разбора. Виджет пишет файлы и печатает PDF сам. Отдельно выяснилось, что владелец всё время работал на сборке от 12 августа: пересобрал и запустил актуальную.

Решение владельца: модель разбора (0,3 руб мало деталей против ~5 руб подробно, пересборка без повторной расшифровки уже готова). Не сделано: вечерний разбор и план на завтра, автоподсказка записи по занятому микрофону, наблюдатель за папками записей, страница встреч в вебе, посадки-пульты.

19.08.2026, 06:06:46 · С8 · claude

Календарь виджета доведён по замечаниям: день, время и длительность в форме постановки стали полями, клик по задаче открывает карточку с правкой и действиями (была заглушка). Прогнали разбор на живой 43-минутной встрече: 24 секунды на расшифровку, около 3 рублей, саммари и решения по делу, две задачи уехали во «Входящие» сами. Подтвердилось ограничение: из записи с одной сведённой дорожкой роли не достать, «кто что говорил» получается только при записи двумя дорожками или за платную разметку.

Владелец: проверить мышью правку времени и карточку задачи; решить, перегонять ли ту встречу за ~23 ₽ ради ролей; писать следующие встречи виджетом «Встреча», чтобы роли были бесплатно. Не сделано: вечерний разбор и план на завтра, автоподсказка записи по занятому микрофону, наблюдатель за папками записей, страница встреч в вебе, посадки-пульты. Установщик 1.1.1 устарел: в нём нет виджетов «Встреча», «Входящие» и недели в календаре.

17.08.2026, 08:22:33 · С8 · claude

Спринт 8: «Входящие» появились везде (бэкенд, API, страница /inbox, виджет), Лия стала приёмником (пересылки, файлы, голос, инструмент «запиши»), расшифровка переведена на Groq по 3,6 ₽ за час, сделан виджет записи встреч с двумя дорожками и разбор встречи (саммари, кто что говорил, решения, задачи с ответственными; свои задачи автоматом во «Входящие», чужие в «ждём от других»). Календарь: в виджете появилась неделя колонками с раскладкой по часам, прибитая шапка дней, клик по клетке, легенда цветов и разворот окна; в вебе починен щелчок по времени (было 15:15 вместо 15:00).

Владелец: тестовая запись встречи на 30 секунд перед реальным созвоном; проверить пересылку в Лию с телефона; завести проекты Пульс цен и Фит Лид, чтобы в календаре заработали цвета (сейчас все задачи без проекта и легенда показывает только «моя задача»). Не сделано: вечерний разбор и план на завтра, автоподсказка записи по занятому микрофону, наблюдатель за папками записей, страница встреч в вебе, посадки-пульты. Установщик надо пересобрать: 1.1.1 без виджетов «Встреча» и «Входящие».

17.08.2026, 03:38:46 · С7 · claude

Хвост сессии: виджеты не были запущены (версия из исходников не переживает перезагрузку ПК, установщик 1.1.1 собран, но ещё не установлен) — владелец не мог их найти. Запустил, поднял окна наверх, показал путь к установщику и открыл папку. Кода не менял.

Владелец ставит desktop/release/Виджеты aitodo Setup 1.1.1.exe (закрыв версию из исходников через трей). Согласован, но НЕ начат спринт 8 «Пульт: четыре посадки»: посадка = группа проектов, подраздел = проект; посадки Пульс цен, Фит Лид (Фит Лид/СММ агент/Искра), Клиенты, Мои проекты (Контент завод 24, ЛидФордж, ИИ Полигон); дизайн «тёмный пульт, крупные цифры, всё в одном экране», горячие даты = просроченные дедлайны + 7 дней + конец активного спринта + проверки по сроку из Atlas /api/dev (потребует токен дашборда в .env на aitodo). Ждёт «ок» на план.

12.08.2026, 06:35:17 · С7 · claude

Правка по замечанию владельца: виджет «Мой день» рисовал режим дня и задачи одним списком, а в вебе это две дорожки. Переделан в такой же таймлайн: жёлоб часов, дорожка «Режим дня», дорожка «Задачи и встречи», блоки по времени, подсветка текущего, красная линия «сейчас», автопрокрутка к текущему часу, пересечения задач делят дорожку по колонкам, шапка с кнопками прибита сверху. Заодно найден баг класса «атрибут hidden перебивался классами с собственным display» — скрытая форма «Поставить на время» была видна всегда; добавлено общее правило в css. Установщик пересобран как 1.1.1.

Владелец ставит 1.1.1 и смотрит день в работе. Дорожка «Задачи и встречи» пока пустая: задач на сегодня нет, наполнится когда пойдут задачи из проектов.

12.08.2026, 06:09:55 · С7 · claude

Спринт 7 «Проекты и рабочий день» собран и выкачен. В aitodo появился раздел /projects: проекты по группам (Работа, Свои проекты, Клиенты) с цветом и счётчиками, спринты со сроком и целью, задачи с оценкой, бэклог внутри проекта, перенос задачи в «Мой день» на слот. Задача теперь знает свой проект и спринт, поэтому общий бэклог фильтруется по проекту, а на таймлайне задачи окрашены цветом проекта. В приложении на ПК два новых виджета: «Проекты» и «Мой день». Найдено и починено по ходу: связь tasks.project_id стояла без обнуления (удаление проекта упало бы), новый активный спринт гасил сам себя, страница бэклога показывала 16 идей из 21, виджет «Задачи» не показывал подпункты (сервер отдаёт subtasks, а читался checklist), перенос в день без времени садился на 00:00. Проверено ответами сервера, запросами в базу, прогоном мышью в браузере и снимками окон виджетов; тестовые проект и задачи удалены.

Владелец заводит свои проекты (Пульс цен, Фит лид, Контент завод, ЛидФордж, клиенты) и раскладывает по группам, ставит установщик 1.1.0 из desktop/release. Проверить мышью: смена статуса задачи, перенос в спринт списком, оценка в минутах, архив проекта, действия в новых виджетах. Не закрыто: работа без сети, перезагрузка с включённым фокусом, агент-ревьюер. Отдельно висит healthcheck бэкенда: зовёт curl, которого нет в образе, контейнер вечно unhealthy.

12.08.2026, 02:59:06 · С6 · claude

Виджеты для ПК доведены до рабочего вида. Учётка привязана разовым долгим ключом в шифрованном хранилище Windows: экран входа больше не спрашивает ничего, остался запасным путём. Найдено и починено по ходу: автозапуск из исходников прописывал electron.exe без папки приложения (Windows на входе показывал стандартное окно Electron со ссылками на репозиторий), теперь автозапуск только для установленной версии; папка настроек принудительно одна для обеих версий (app.setName), иначе после установки пришлось бы входить заново; битый файл состояния молча сбрасывал настройки и очередь неотправленных отметок, теперь метка порядка байтов срезается, а нечитаемый файл откладывается как state.json.broken. Доказано снимками: живые данные, обнуление суток по местной полуночи, фокус поверх развёрнутого браузера, чтение папки с музыкой. Тестовые данные и лишние нормы вычищены, тестовые сессии фокуса остановлены.

Владелец ставит установщик из desktop/release и закрывает версию из исходников через трей. После установки проверить мышью: свернуть, закрыть, вернуть из трея, создать и удалить норму, записать задачу в бэклог, выбрать свою папку с музыкой. Не закрыто: живая проверка без сети, перезагрузка с включённым фокусом, агент-ревьюер. Отдельно висит: healthcheck бэкенда в docker-compose.yml зовёт curl, которого нет в образе, контейнер поэтому вечно unhealthy.

07.08.2026, 12:04:04 · С6 · claude

Спринт 6 «Виджеты для ПК». Бэкенд выкачен на прод: daily_target у workout_types (миграция 021), GET /api/workouts/today с часовым поясом, tz_offset_minutes в статистике фокуса. Проверено ответами сервера и запросами в базу, включая границу суток (01:05 Екб попадает в сегодня) и доступ чужого пользователя (404 и пустые списки), тестовые данные вычищены. Собрано десктопное приложение в desktop/: Electron без нативных модулей, трей, автозапуск, три виджета, музыка из локальной папки, очередь отправки для работы без сети. Установщик 1.0.0 собран, приложение запускается, раскладка окон проверена скриншотом.

Владелец входит в приложение своей почтой и паролем, после этого прогнать вживую: завести норму, отметить подход, записать задачу в бэклог, включить фокус поверх браузера и VS Code, подключить папку с музыкой. Затем агент-ревьюер и закрытие ACCEPTANCE. Отдельно: healthcheck бэкенда в docker-compose.yml зовёт curl, которого нет в образе, поэтому контейнер вечно unhealthy.

27.07.2026, 05:49:57 · UX · claude

UX-правки Моего дня по фидбеку: таймлайн 05:00-22:00 (с авторастяжкой при выходе за рамки); клик по пустому месту в дорожке Задачи открывает форму создания задачи с этим временем (шаг 15 мин), клик в дорожке Режим дня — добавление блока режима с префиллом времени; в панели Бэклог поле быстрого ввода идеи (Enter) без перехода на /backlog.

Владелец пользуется, копим фидбек.

26.07.2026, 20:26:35 · С5 · claude

Лия теперь видит клиентов и режим дня. ВАЖНОЕ ОТКРЫТИЕ: живой телеграм-бот = lia-v2 (/opt/lia-v2, контейнер lia-backend, network host, aitodo API через localhost:8000 + X-User-Id), а telegram-bot из TODO-New выключен. В lia-v2 добавлены 8 тулов (клиенты: список/сегодня/добавить/обновить/касание; режим: день/отметить/добавить блок), клиенты и режим в утреннем брифе 08:00 Екб. Веб ИИ-строка научилась «добавь клиента Сергей с Авито, написать в четверг» и «написал Марине, следующее касание вторник». Всё задеплоено, 51 тул зарегистрирован, эндпоинты проверены через X-User-Id.

Владелец тестит: в TG спросить Лию «кому написать сегодня?», «добавь клиента...», «отметь спорт»; в вебе — чипы ИИ-строки. Возможное следующее: отдельное напоминание о просроченных касаниях днём, голосом в TG.

26.07.2026, 19:37:47 · С2+С4 · claude

Закрыты С2 и С4. Клиенты: мини-пайплайн (6 статусов, источники, касания с датой следующего касания, архив), страница /clients, панель «сегодня написать» на /my-day, пункт в TopNav, миграция 020. С4: вкладка «Неделя» на /my-day, drag идей из бэклога прямо на таймлайн, полоска супер-фокуса на /focus. Всё задеплоено на aitodo.myvisionagency.ru, alembic 020 (stamp — таблицы создал create_all).

Все 4 спринта концепции закрыты. Владелец проверяет глазами: /clients (добавить первых клиентов), неделя, drag. Возможные следующие шаги по фидбеку: клиенты в ИИ-строке Лии («добавь клиента Сергей с Авито»), напоминания о касаниях в Telegram, сжатие «Ещё».

26.07.2026, 19:15:26 · С1+С3 · claude

По фидбеку владельца подтянул прод к макету: верхняя навигация вместо сайдбара на 18 пунктов (везде) + полная ИИ-строка Лии на «Моём дне» (создание задач/бэклога фразой, перенос, отметка выполненного — всегда через превью-подтверждение). Бэкенд /api/ai-command/parse на gpt-4o-mini (существующий ключ проекта), LLM только парсит намерение, исполнение — детерминированные API. Задеплоено на aitodo.myvisionagency.ru.

Владелец проверяет глазами: верхнее меню, /my-day с ИИ-строкой (примеры-чипы). Дальше С2 «Клиенты» (clients+touches+пайплайн+пункт в нав) и С4 (неделя, объединение фокуса, drag бэклога).