| 2026-10-10 |
Аренда задачи агентом: взятие, heartbeat, возврат (0.85)
root
committed
13 hours ago
|

Мандат ИИ-агента: поле задачи, модель журнала, миграция (0.85)
...
- ТЗ 0.85: новая §3.20 «Мандат ИИ-агента: доступность, взятие, приёмка,
журнал» (четыре части: флаг доступности задачи, аренда, приёмка,
журнал) и правки §3.4 (плоскость приёмки рядом с raw/approved), §3.5
(экземпляр наследует доступность), §3.10 (тулы и флаг is_user), §3.13
(момент начисления XP при агентском закрытии), §3.14 (kind'ы task.claimed
и task.review), §5 (поля Task, таблица TaskEvent, конверт пагинации),
§7 (этап M5+), §8 (открытый вопрос о ретенции журнала). Отдельным
абзацем зафиксировано, что ai_eligible — не граница безопасности.
- models.Task: ai_eligible (по умолчанию нет), created_by_kind/created_by_name
(под фильтр «создано агентом»), done_by_kind, accept_state (плоскость
приёмки, отдельная от статуса — «done = сделано» сохраняется для XP,
статистики, теплокарты и спавна регулярных) и аренда: claimed_by_token_id
(FK mcp_tokens, ON DELETE SET NULL — label токена не уникален, поэтому
сравнивать арендатора можно только по id), claimed_by_name, claimed_at,
claim_expires_at. Свойства claim_is_alive и claimed_by: протухшая аренда
наружу не показывается. Индексы (user_id, ai_eligible/accept_state/
created_by_kind).
- models.TaskEvent — журнал «кто, что и когда»: task_id обнуляется при
удалении задачи (ON DELETE SET NULL), заголовок хранится снапшотом, иначе
записи умирали бы вместе с задачей. Актор (actor_kind/actor_name/via),
комментарий, вид события.
- schemas: TaskCreate.ai_eligible, TaskUpdate.ai_eligible и close_comment
(не поле задачи — уходит в событие закрытия, как earned_via), поля мандата
в TaskOut, новые TaskEventOut/TaskEventPage/AcceptIn.
- services/recurrence._copy: новый экземпляр регулярной задачи наследует
доступность агенту и автора правила.
- Миграция a1b2c3d4e5f7 (после d4e5f6a7b8c9): поля и индексы tasks, таблица
task_events. Существующие задачи бэкфиллятся server_default — «не доступно
агенту, создано пользователем»; accept_state и done_by_kind остаются NULL,
приёмка к старым закрытиям не применяется.
ТЗ 0.85.
root
committed
13 hours ago
|
| 2026-10-09 |

Проекты: цвет, сайт, фавикон, закрепление, README из репозитория (0.63–0.67)
...
- Цвет-метка проекта (0.63): у проекта может быть цвет-кружок. Селектор
цвета — сырым блоком в стиле кита (в ките компонента нет); кружок рисует
общий компонент ProjectColorDot.
- Сайт проекта (0.63): отдельное поле site_url. Иконку сайта тянет
бэкенд-прокси с кэшем (GET /api/projects/{id}/favicon, том favicons) —
сторонние favicon-сервисы не используются, данные не покидают VPS. В 0.65
иконка встала в метку проекта (кружок + фавикон), а ссылка на сайт —
чипом в шапке страницы проекта.
- Карточка списка кликабельна целиком (0.63; кнопка «Открыть» дублировала
ссылку), тайтл крупнее (0.65), клетки прогресса — поверх полосы кита
(0.64): сегментированной полосы в ките нет.
- Закрепление проектов (0.66): поле pinned, закреплённые — секцией сверху,
сортировка списка по свежести активности, подвал карточки — отсчёт до
ближайшего дедлайна.
- Место булавки переставлено (0.67): на карточке — правый верхний угол
рядом с бейджем актуальности и видна всегда (была приглушена в подвале),
на странице проекта — кнопка-булавка рядом с именем (искали строкой
«Закреплён» в параметрах).
- Репозиторий проекта (0.67): ссылка на git-репозиторий — отдельное поле
repository_url, отдельно от заметки и сайта. README из репозитория
показывается вторым описанием — карточкой «README из репозитория» под
заметкой, со ссылкой на репозиторий и сворачиванием длинного текста;
тянет такой же бэкенд-прокси с кэшем (GET /api/projects/{id}/readme),
не нашли — «README не найден». Распознавание ссылки на репозиторий в
заметке проекта снято (у задачи README-вместо-описания остаётся),
данные в БД не мигрировались.
- Фантомный отступ перед именем у проекта без цвета и фавикона (0.67):
ProjectMark рисовал пустой спан в ряду с gap.
- ТЗ 0.63–0.67; MCP зеркалит поля проекта (color, site_url,
repository_url, pinned). Тесты: 207.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
| 2026-09-21 |
Пачка UI + Ollama + SSE-реактивность (ТЗ 3.14)
...
- Бейдж приоритета с иконкой (PriorityBadge) во всех видах
- Фильтры страницы проекта запоминаются в localStorage (глубокий watch)
- DurationInput (ч/мин, шаг 5), ConfirmDialog, пагинация, иконки удаления
- Диалоги: «В архив» warning, кнопки поменяны местами
- Автодетализация на Ollama 192.168.1.130 (qwen3.5:2b, think:false)
- SSE /api/events: шина realtime, публикации после коммита, coarse-события + refetch
- Фронт: realtime.ts, удаление поллинга StackView, refetch по видам,
подавление во время drag сада, дедуп XP-тостов
- Тесты 93 passed, e2e двух вкладок; ТЗ 0.24
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
19 days ago
|
| 2026-09-20 |
Сущность «документ»: описания и заметки — единый текст с вложениями
...
- Новая таблица documents (owner_type task|project, owner_id, body) —
описания задач и заметки проектов теперь одна сущность; на моделях
полиморфная relationship + свойства description/note (API не меняется).
- Вложения привязаны к документу: attachments.document_id; эндпоинты
/api/documents/{id}/attachments; URL файла /api/attachments/{id}/file
не тронут (зашит в сохранённый markdown и PWA-кэш).
- Миграция d9e8f7c6b5a4: перенос текстов в документы (документ заводится
каждому владельцу), бэкфилл вложений, дроп старых колонок.
- Картинки в заметке проекта: Ctrl+V в инлайн-редакторе, drawer на
странице проекта и в списке проектов.
- MCP: поиск по описанию через join по документу; вложения в _full.
- ТЗ 0.13: модель данных обновлена.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
20 days ago
|
feat: метка «ментально сложная» — кнопка «Не хочется делать» + геймификация
...
- Task.mentally_hard (миграция c8f7e6d5b4a3) + поле в TaskUpdate/TaskOut
- compute_task_xp: +10 WILLPOWER_BONUS за закрытие «ментально сложной»
- заголовок X-Mentally-Hard при закрытии; +2 теста (66 зелёных)
- TaskView: warning-кнопка-переключатель в карточке статуса (скрыта у done)
- TaskBadges: warning-бейдж «ментально сложная»
- празднование: «+N XP • сила воли», золотое конфетти всегда, фраза в тосте
- сад: ачивка «Преодоление» 5/25/50; справка сада и локали ru/en/uk обновлены
- ТЗ 0.12: пункт про метку в 3.13
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
20 days ago
|
feat: прокачка геймификации — тиры ачивок, редкие растения, история (ТЗ 0.9)
...
- Редкие растения: редкость решается при закрытии по весу задачи (epic — только
крупные, rare — шанс растёт с XP), хранится в xp_events.rarity; в саду —
золото + бейдж (sparkle/crown), PATCH отдаёт X-Plant-Rarity
- Связка с «3 вариантами» (3.9): PATCH принимает earned_via="options",
xp_events.via_options, заголовок X-Options-Close; тост «выбрал и сделал»
- Празднование: «золотое» конфетти (56 частиц) на редкости/крупные закрытия,
тост с припиской о редком растении
- GET /api/xp/events — события начисления (для сада: редкости, счётчик, история)
- Сад: названия уровней (ботанические звания), «последний росток», история
закрытий по месяцам (12 мес), ачивки с тирами I/II/III + новые исследователи
(Спринтер, Разносторонний, Марафонец, Дедлайн-босс, Выбрал и сделал)
- Локали ru/en/uk, ТЗ 0.9 (п. 3.13 дополнен)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
| 2026-09-19 |
i18n: ru/en/uk, язык из gnexus auth + переопределение в настройках
...
- vue-i18n v11 (legacy:false, fallback ru); локали src/locales/{ru,en,uk}.ts,
en/uk типизированы как typeof ru — полнота проверяется vue-tsc
- резолюция: settings.language (override, ''=auto) → SSO profile.locale → ru
- backend: /auth/callback прокидывает profile.locale в сессию; /api/settings
получил поле language, PUT стал частичным (model_fields_set)
- taskui.ts и все views переведены на t(); дни недели и даты через Intl
- в Настройках — карточка «Язык интерфейса», переключение мгновенное
- тесты: test_settings.py (частичный PUT, 422), AUTH_USER += locale
- ТЗ 0.5: новый пункт 3.11 «Мультиязычность»
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
Дедлайны и регулярные задачи (ТЗ 3.4, 3.5)
...
- дедлайны двух видов: строгий (deadline_date) и нестрогий
(deadline_period: день/неделя/месяц/год); бейджи в дереве и списке,
просроченные — красным
- регулярные задачи: три правила (интервал N дней, дни недели, день месяца),
якорь — фиксированный календарь от даты выполнения; при завершении
автоматически рождается следующий экземпляр (API и MCP)
- «3 варианта»: срочность дедлайнов влияет на отбор (просроченные и близкие
строгие — первыми, затем нестрогие периоды)
- ТЗ 0.4: вопросы 8.1–8.3 помечены решёнными (правила повторения, прогноз,
валюта)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
Правки по обратной связи: прогноз = LLM, валюта в настройках, «3 варианта» +50%
...
- прогноз длительности: убрана медиана истории и эндпоинт /predict —
оценка приходит только из LLM-детализации (или вручную)
- валюта бюджетов — глобальная настройка (app_settings): UAH/USD/EUR/GBP/PLN,
выбирается один раз и применяется всюду; UI — страница «Настройки»,
суммы через formatMoney (символ по настройке)
- «3 варианта»: допуск нестрогий — оценка может превышать доступное время
до +50%, короткие задачи подходят всегда; задачи без оценки — фолбэк
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
M4: прогноз времени, бюджет, режим «3 варианта»
...
- Прогноз: LLM оценивает длительность в предложении детализации
(estimated_minutes в prompt/propose/apply); пересчёт по истории
похожих завершённых задач (медиана по проекту/тегам) — эндпоинт
POST /api/tasks/{id}/predict
- Бюджет: budget_money и cost_estimate_money (целые рубли) на задаче;
в дереве/списке — чип «бюджет / оценка» рядом
- «3 варианта»: POST /api/tasks/suggest — до трёх задач под доступное
время (активные проекты, не более одной на проект, сначала строго
укладывающиеся); вью OptionsView — выбор и переход к выполнению
- Миграция 09f0fefd5d6a (4 колонки tasks), 36 тестов зелёные
- Фронт: чипы оценок ≈ в дереве/списке, кнопка пересчёта прогноза,
поля бюджета и оценки в редакторе стека
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
M3: дерево подзадач, список с фильтрами, проекты с заметками
...
- Подзадачи: parent_task_id в create/patch, защита от циклов и
самородительства; relationships parent/children; фильтры списка
parent_id и tag_id
- Проекты: GET /api/projects/{id}, PATCH заметки и актуальности
- Фронт: TreeView — настоящее дерево с раскрытием ветвей и сменой
статуса; ListView — фильтры (статус/проект/тег); ProjectsView —
актуальность, приоритет, Markdown-заметка с предпросмотром
- Общие помощники статусов и Markdown в src/taskui.ts; GnPageHeader
переведён на слоты #meta/#actions (пропсы meta у кита нет)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
M2: автодетализация (Ollama) и вложения
...
- LLM-детализация в фоне при быстром захвате: черновое предложение
тегов/проекта/приоритета (только из существующего справочника),
применяется только при утверждении («Да, всё верно»)
- Эндпоинты approve (apply_proposal) и redetail; Attachment-модель и
API вложений (изображения, FileResponse)
- Важное исправление: в FastAPI 0.141 фоновые задачи выполняются до
teardown-коммита зависимости get_db — create/redetail теперь коммитят
явно, иначе background worker не видит задачу
- Тесты detailing/attachments с моком LLM; tests как пакет (иначе
дублировался модуль conftest и в памяти оказывались две БД)
- Фронт: чипы предложения, опрос стека, Markdown-редактор с
предпросмотром (marked + DOMPurify), вставка изображений Ctrl+V
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
M1: MVP задач — быстрый ввод, стек входящих, ручная детализация
...
- Модели Task/Project/Tag (SQLAlchemy 2.0) + миграция alembic
- API: POST/GET/PATCH/DELETE /api/tasks, approve (raw→approved), проекты, теги
- Все /api эндпоинты за сессией SSO (регрессионный тест на 401)
- Frontend: api-клиент, StackView — быстрый ввод одной строкой, стек,
детализация с проектом/тегами/приоритетом, «Да, всё верно»
- dev-БД: docker postgres:17 на 15432
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|