| 2026-10-10 |

Стек входящих: только задачи без проекта, карточка как в списке, выдача «3 в ряд» (0.95)
...
Набор правок из разбора стека входящих.
Стек — только «сырые» задачи без проекта. Задача, созданная сразу в проекте
(страница проекта, подзадача, агент через MCP), уже получила контекст от владельца,
и разбирать её не за чем: стек — стопка для того, что захвачено на бегу и ещё ни к
чему не отнесено. Такие задачи никуда не пропадают: они видны на странице своего
проекта, автодетализация для них идёт как обычно, а предложение ИИ ждёт на странице
самой задачи. Туда же уходит задача, перенесённая из стека пунктом «В другой
проект»: этот пункт карточка задачи даёт сама, и это ровно тот жест «это к проекту X».
Карточка стека — та же карточка задачи, что в списке и в выдаче (TaskCard), а
своё у неё в новом слоте #extra внизу: предложение автодетализации бейджами и
кнопки «Да, всё верно» и «Детализировать». Прежняя карточка стека была отдельным
набором разметки и разошлась с карточкой задачи: ссылка (классом card-link внутри
китовой шапки card-title) наследовала аперкейс шапки — заголовок кричал; «⋯»-меню
было своё, из двух пунктов, поэтому смена статуса и перенос в проект из стека были
недоступны. Теперь карточка даёт всё то же, что в списке, а стек добавляет к «⋯»
один пункт — «Переспросить ИИ»: он уместен только у сырой задачи, поэтому пункт
передаётся карточке снаружи, через menuExtra. Бейдж «в стеке» и абсолютная дата
создания из карточки ушли — дублировали место карточки и её подвал.
Карточки ряда — одной высоты, а блок предложения с кнопками прижат к низу
содержимого. В 0.59 они выравнивались по верху, и «Да, всё верно» у задач с разным
числом бейджей стояла на разной высоте. Скелетон загрузки повторяет ту же сетку.
Выдача /options — три карточки в ряд (больше и не бывает: pick_options отдаёт
максимум три). Сетка и ломающиеся точки (1080/720px) те же, что у стека: карточка
там та же, и ряд читается одинаково на обеих страницах.
Локали: ушли stack.inStack (за бейджем) и stack.deleteTask (за «Удалить» из общей
карточки).
Проверено живым прогоном в браузере (временный пользователь, данные засеяны SQL,
XP не начислялся): в стеке три карточки из четырёх сырых (четвёртая — с проектом, и
она видна на странице проекта), счётчик шапки совпадает, китовой шапки .card-title
в карточке нет, заголовок без аперкейса и ведёт на задачу, сниппет, бейджи, подвал и
«⋯» на месте, «Переспросить ИИ» в меню рядом со штатными пунктами, три карточки
одной высоты (293px) с кнопками на одной линии, в выдаче на 1440px три карточки в
ряд (461px), на 1000px две, на 700px одна, на 390px горизонтальной прокрутки нет ни
на главной, ни в выдаче. Стенд вычищен.
ТЗ 0.95: §3.1, §3.2, §3.7, §3.9, §3.19, §7.
root
committed
8 hours ago
|

Корешок у карточки проекта, «без активности», перенос задачи в проект (0.82)
...
- ProjectsView/ArchiveView: у карточки проекта левая грань 6px (китовый
--gn-border-width-accent, тот же шаг, что у полосы шапки страницы) и цвета
проекта — того же, что метка у имени и заливка прогресса; у проекта без
цвета грань берёт акцент кита. У карточки задачи рамка осталась ровной 2px:
по одной этой грани видно, что перед тобой папка с задачами, а не сама
задача. Тот же корешок у карточки проекта в архиве и у заготовок списков,
иначе при загрузке карточка дёрнула бы ширину содержимого. Наведение
подкрашивает рамку, но не корешок — цвет грани принадлежит проекту, а не
состоянию карточки.
- ProjectsView: у проекта без задач подвал больше не пустует — вместо
свежести стоит «без активности» (ключ projects.noActivity, три локали).
- kit-overrides.css: полоса прокрутки спрятана у всех табов — правило было
только у фильтра «Списка задач», и на странице проекта табы статуса
оставались с полосой. Прокрутка сохранена.
- TaskCard/TaskMoveDialog: в «⋯»-меню карточки задачи появились «Перейти к
проекту» (нет у задачи без проекта и на странице самого проекта) и
«Переместить в проект». Перенос — модалка с выбором проекта (GnModal +
GnSelect кита, первым пунктом «без проекта», текущий проект выбран по
умолчанию) → PATCH /api/tasks/{id} с project_id: XP и монеты за перенос не
начисляются, успех подтверждается тостом, а списки перечитываются по
событию moved (в «Выдаче» и на странице задачи подписки на task.changed
нет — без события карточка осталась бы в старом проекте).
- ТЗ 0.82.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
16 hours ago
|
| 2026-09-22 |
Лоадеры и скелетоны: спиннер обновления в шапках, скелетоны под макет страниц
...
- Спиннер обновления (GnLoader circle, .refresh-loader fixed под топбаром) в
#actions шапок списков: задачи, стек, проекты, архив, проект, задача, опции
- Скелетоны заменены с рамочного .skeleton-stack на макет-мимикрирующие
карточки кита: списки — сетка карточек с бейджами, задача — сетка main/сайд,
статы — метрики, сад — блок + строки
- kit-overrides.css: только теговые бейджи/чипы без uppercase, позиция спиннера
- Локаль common.loading (ru/en/uk)
Проверено headless на живом фронте: скелетоны на первом входе (list 4 карточки,
task 5 карточек/12 линий, stats 3 метрики, garden блок+2 линии, projects 3,
archive 2, stack 3+6 бейджей), спиннер появляется при обновлении данных.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days 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 |
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
|
feat: геймификация — XP, уровни, сад и ачивки (ТЗ 0.8, п. 3.13)
...
Награда за закрытие задачи, принцип «только позитив» (без стриков и сгорания):
- XP = 10 база + бонус за приоритет (0–15) + бонус за оценку времени (0–15),
один раз на задачу (xp_events, UniqueConstraint); удаление задачи не отнимает
- PATCH /api/tasks/{id} при первом закрытии ставит заголовок X-Earned-XP,
фронт ловит его и празднует: конфетти + тост «+N XP» с похвалой
- GET /api/xp — сводка (total_xp, уровень, прогресс)
- Сад (/garden): растение за каждую закрытую задачу + уровень + ачивки-вехи
(1/10/50 задач, уровни 5/10, регулярная, закрытый проект) с прогрессом
- celebrateEarned() в TaskView/ListView/ProjectView/OptionsView; локали ru/en/uk
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
feat(frontend): переименование в GNexus Tasks, тайтлы страниц
...
- Сервис «gntodo» → «GNexus Tasks»: brand топбара, kicker шапок видов,
subtitle навигации (ru/en/uk), index.html, PWA-манифест (short_name Tasks)
- taskui: APP_NAME + setPageTitle(); тайтлы через meta.title роутов
(afterEach в main.ts) — «{страница} — GNexus Tasks»
- TaskView/ProjectView уточняют тайтл после загрузки (watchEffect):
заголовок задачи / имя проекта
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
| 2026-09-19 |

UI: ревью всех страниц (mobile+desktop), полный набор компонентов кита
...
- Root-фикс intrinsic-ограничений кита: .card max-width 340px → 100%,
overflow visible (иначе dropdown-меню обрезается).
- Все виды задач (стек/дерево/список) — двухстрочные карточки:
заголовок + меню «⋯» (GnDropdown c GnIconButton-триггером, статусы
с отметкой текущего, подзадача в дереве, удаление с подтверждением)
и строка бейджей (новый TaskBadges: статус, проект, P{n}, ≈время,
recurring, дедлайн, бюджет, теги).
- Редактирование задач/проектов перенесено в GnDrawer (детализация
в стеке, карточка — только просмотр).
- Удаления — через GnConfirmDialog (confirm-variant danger), промпты
создания проекта/тега/подзадачи — через модалку QuickPrompt вместо
window.prompt.
- Действия — тосты (useToast) вместо inline-алертов; при загрузке —
GnSkeleton; пустые состояния — GnEmptyState с CTA-кнопками.
- Список: фильтры в GnToolbar с авто-применением (компактные,
фиксированная ширина select-wrap).
- Настройки: GnRadioGroup для валюты и языка; «3 варианта» —
компактная форма времени.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
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
|
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
|