| 2026-10-10 |

Корешок у карточки проекта, «без активности», перенос задачи в проект (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
15 hours ago
|
Подвал карточки проекта как у задачи, строка подвала по центру (0.81)
...
- ProjectsView: подвал карточки проекта переехал в китовый слот #footer —
раньше это была строка внутри содержимого, без черты; теперь подвал прижат
к низу карточки и отделён чертой во всю ширину, как в карточке задачи.
Скелетон списка повторяет ту же полосу.
- kit-overrides.css: полоса подвала стала общей для карточек задач и проектов
(правила были одни и те же в двух местах). Отступы выровнены: у кита 8px
сверху против 15px снизу — строка висела на 3.5px выше середины полосы;
пустой подвал (проект без задач и без срока) держит высоту строки, иначе
черта у соседей по ряду встала бы на разной высоте.
- ProjectsView: иконки свежести и срока — с китовым классом normalize (глиф
иконочного шрифта садился выше середины строки и читался подвешенным).
- ТЗ 0.81.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
16 hours ago
|

Список задач, карточки и шторка дропдауна на мобильных (0.68–0.77)
...
- Цвета проектов (0.68–0.72): палитра пересобрана с объективным порогом
различимости — 8 базовых тонов × ступени светлоты + 5 нейтральных = 27
клеток, минимальная попарная ΔE76 в CIELAB 12.5 (приглушённые варианты
сливались, чёрный не виден на тёмной панели). Метка проекта — кружок, у
проекта с сайтом — фавикон внутри метки.
- Список задач (0.70–0.74): фильтр по проекту и табы приоритета убраны,
приоритет — переключателем «Приоритетные» с серверной отсечкой
priority_min (7–10; задача без приоритета в отсечку не попадает). Тег
ищется подстрокой имени (параметр tag, icontains с autoescape) с debounce,
ввод — GnCombobox; статус — табы кита с горизонтальной прокруткой. То же
на странице проекта. Фильтры-поля переехали в слот действий шапки.
- Выравнивание фильтров (0.76): кит держит 8px margin-top у input и 15px
margin-bottom у form-group — внутри flex-обёртки они не схлопываются, и
поле стояло на 3.5px выше центра ряда, а крестик сброса (отсчёт от низа
обёртки) уезжал к нижнему краю поля. Отступы внутри фильтра обнулены:
обёртка стала ровно в коробку поля, центры сходятся до пикселя.
- Карточка задачи (0.75–0.76): кликабельна целиком (клик мимо внутренних
ссылок/кнопок и по невыделенному тексту), бейдж проекта — ссылкой.
Свежесть задачи переехала из ряда бейджей в подвал карточки (слот footer,
черта 1px, прижат к низу — в сетке все карточки на одной линии): height
100% содержимого у кита выталкивало подвал, карточка стала flex-колонкой.
Иконка рядом с текстом — с китовым классом normalize.
- Полосы прокрутки (0.76): тонкие, бегунок акцентом, скругление в пилюлю,
прозрачная дорожка — как у полосы меню-дровера кита. Заданы и
scrollbar-width/color, и ::-webkit-scrollbar-*; у дровера приоритетнее
правило кита.
- Шторка дропдауна на мобильных (0.77): до 767px меню — лист снизу во всю
ширину экрана с затемнением и «ручкой», пункты 44px, выезд снизу 0.22s
вместо китового overlay_reveal. Слой затемнения — div вне #app (index.html)
и body:has(.dropdown.is-open): для китового обработчика клик по нему «вне
меню», поэтому тап по затемнению закрывает меню без JS, а JS-кламп
координат на мобильных выключен. Китовый panel_boot оставляет у шапки
transform (содержащий блок для position:fixed) — на мобильных анимация
шапки снята, правило «меню в шапке прижато вправо» тоже оставлено
десктопу. Задача на перенос в кит оформлена отдельно:
gnexus-ui-kit/docs/tasks/gn-dropdown-mobile-sheet.md.
- Кнопка «назад» над шапкой страницы (0.70): показывается, когда в истории
приложения есть предыдущий экран; возврат на экран входа не предлагается.
ТЗ 0.68–0.77; тесты бэкенда 209, ruff/mypy чисто, сборка фронта зелёная.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 hours ago
|
| 2026-10-09 |
Булавка на карточке проекта — по центру бейджа актуальности (0.67)
...
Кнопка стояла на top 0.75rem (центр 26px), а бейдж — по центру шапки кита
(центр 29.8px): расхождение 3.8px, а на перенёсшемся на вторую строку имени
оно доходило до 16.6px — шапка растёт, бейдж едет за её центром, абсолютная
кнопка нет.
Общая точка отсчёта — центр первой строки имени (29.8px от верха .card-wrap,
от переноса не зависит): булавка top 1rem (центр 28px-кнопки 30px), бейдж
align-self flex-start + 1px (центр 24px-бейджа 30px). В шапку булавку не
положить — кнопка внутри RouterLink невалидна, поэтому под кнопку
подстраивается бейдж.
Замеры 1440/1024/768/480/390/360 — центры совпадают до пикселя в обоих
случаях, горизонтального скролла нет.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|

Проекты: цвет, сайт, фавикон, закрепление, 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
|
Карточка проекта — метрики вместо заметки (0.62)
...
Заметка убрана с карточки списка (целиком живёт на странице проекта): она
делала карточки разной высоты и мешала сравнивать. Вместо неё — актуальность
в шапке справа, ряд метрик (приоритет, «N в работе», «просрочено N» — только
ненулевые), полоса прогресса «Закрыто N из M» и подвал с ближайшим дедлайном
(просроченный красным) и кнопкой «Открыть»; у проекта без задач — подсказка.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
Проекты карточками по две в ряд (0.61)
...
Карточка проекта несёт бейджи и заметку — в две колонки список читается
компактнее; на узких экранах одна колонка (860px). Заголовок секции
занимает всю ширину строки, скелетон повторяет ту же сетку.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
Проекты без задач — отдельной секцией в конце списка (0.60)
...
Бейдж «Задач закрыто 0/0» у пустого проекта ничем не отличался от
заполненных, и такой проект терялся среди остальных. Список делится на
секции «С задачами» и «Без задач» (ph-folder-dotted, приём подписи
секции из стека); счётчики в заголовках — по всему списку, а не по
странице.
Заголовки показываются только когда пустые проекты есть — без них
список выглядит как раньше. Порядок (с задачами сверху, пустые в конце)
применяется до пагинации, иначе секция разъезжается по страницам.
- ТЗ 0.60.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
| 2026-09-30 |
Сырые кастомные блоки — под визуальный язык кита 1.0.0
...
Дерево уровней, маркет, ачивки, график/heatmap статистики, инвентарь и
оверлеи сцены, полнотекстовые превью/миниатюры, tags-fieldset: бордеры
2px var(--gn-border-color-muted) вместо 1px, радиусы 6px (панели) и
3px (инсеты/контролы), поверхностные подложки поверх --gn-surface-panel.
Иконки в заголовках карточек — в цвете заголовка (было тёмные).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
10 days 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 |
Сущность «документ»: описания и заметки — единый текст с вложениями
...
- Новая таблица 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(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 |
UX-пачка: заметка проекта через MdEditor, троеточие, фиксы шапки
...
- Заметка проекта в drawer'е — тот же MdEditor с тулбаром, что у
описания задачи (новый проп caption; предпросмотр-чекбоксы убраны)
- Кнопка «Действия» в шапке задачи — иконка-троеточие (ph-dots-three)
- «Изменить статус» — маленькая кнопка (size sm)
- Дропдаун шапки не обрезается: overflow:visible у .page-header
(+ декоративная скан-полоска ::after скрыта — с visible overflow
вылезает за рамку); меню прижато к правому краю; z-index шапки
поднят — transform из panel_boot кита делал карточки поверх меню
- Иконки в заголовках карточек — фиолетовый #bb9af7 (сливались)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
Задача и проект: UX-пачка из 7 правок
...
- Действия задачи (статусы/правка/переспрос/подзадача/удаление) —
в дропдаун-меню «Действия» в шапке вместо тулбара
- Карточка «Статус» в сайдбаре: бейдж статуса + явная кнопка
«Изменить статус»
- Понятная шкала приоритета: 5 градаций с цветом (очень низкий/
низкий/средний/высокий/срочно) вместо P0–P10 — в карточках,
на страницах задачи и проекта, в формах
- Быстрое добавление тега прямо в карточке «Теги» (GnTagInput,
новое имя создаёт тег в каталоге)
- «Добавить подзадачу» создаёт полноценную задачу с parent_id
(тост-подтверждение; подзадача сразу видна в дереве)
- Фильтры страницы проекта переоформлены: подписанные селекты
со сбросом
- Список/дерево проекта — переключатель вида (GnTabs) вместо
двух секций подряд
Шкала приоритета: grade в UI, число 0–10 в БД; ProjectsView —
drawer переведён на градации.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
Страница проекта: двухколоночная раскладка, статистика, вход из списка
...
- Список проектов: заголовок карточки — ссылка на /projects/:id
(раньше страница не была достижима), бейдж со счётчиком задач
- Страница проекта: сетка «содержимое + сайдбар» как на странице задачи;
заметка всегда видна (с подсказкой, если пуста), прогресс, фильтры
статус/тег с иконками, карточки задач, дерево проекта
- Сайдбар: статистика (всего/завершено/в работе/к выполнению/просрочено
с подсветкой), параметры, теги проекта с количеством
- Исправлено: GnBadge не имеет пропа icon — иконки везде переложены
в слот (TaskBadges, шапки проектов, теги задачи); несуществующая
иконка ph-list-magnifying-glass заменена на ph-magnifying-glass
- Сниппет карточки задачи больше не показывает сырой markdown
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|

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
|
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
|