| 2026-10-10 |

Инлайн-правка длительности и скругление иконок (0.90)
...
Поля «Оценка времени» и «Фактически» были нерабочими: очищенное поле мгновенно
наполнялось прежним числом. Причина — кольцо «поля → значение → поля»: на каждую
цифру компонент отдавал родителю сумму, а родитель возвращал её назад, и раскладка
затирала набираемое («30 мин» → «0 ч 30 мин» в том самом поле, которое человек
только что очистил). Теперь текст полей — источник истины, пока в них печатают:
пришедшее значение применяется, только если не совпадает с уже набранным.
Границы (1…1440 мин, как в API) зажимаются на выходе из полей, а не на вводе —
зажим на каждой цифре переписывал бы число под курсором. Там же минуты
сворачиваются в часы («0 ч 90 мин» → «1 ч 30 мин»), а «Фактически» получило min
как у API (ge=1): «0 мин» сервер отвечал 422-й после нажатия ✓.
Строка параметров: редактор ставит фокус в первое поле (клик по значению =
«начать печатать»), а Esc отменяет независимо от того, где фокус. Обработчик на
самом компоненте ловил событие, только пока фокус оставался внутри, — после
клика по соседней строке Esc молча переставал работать, а сразу после открытия
не работал вовсе.
Иконки: скругление логотипа (rx 10) не было видно — растрирование впечатывало в
PNG фон страницы, тот же, что заливка холста, и углы сливались с ним: и в шторке
уведомлений, и у установленного приложения иконка читалась квадратом с острыми
углами. У иконок «any» (192/512 — они же icon системного уведомления) углы теперь
прозрачные. Где прозрачность недопустима, фон остался впечатан: maskable
обрезается Android по кругу, а для iOS добавлен отдельный apple-touch-icon.png
(180, непрозрачный квадрат — прозрачность iOS рисует чёрным).
ТЗ 0.90: §3.15 — состав иконок и правило скругления, §3 — фокус и Esc в
инлайн-редакторе, ввод длительности часами и минутами.
root
committed
12 hours ago
|

Напоминания: сроки, ритм, сводка, тихие часы (0.89)
...
Push из 0.88 доставлял события агента, но о сроке и о регулярном деле по-прежнему
напоминала только открытая вкладка. Теперь о них напоминает планировщик: строгий
дедлайн за день, в день и один раз о просрочке; «пора» регулярной задачи; утренняя
сводка. Нестрогий срок («в течение недели/месяца/года») не напоминает вовсе — в
модели у него нет дня отсчёта, а выдумывать якорь не стали. Задачи в done,
cancelled и deferred молчат: «сейчас не в приоритете» — решение владельца.
Правила — чистые функции (app/services/reminders.py): «сегодня» приходит
аргументом, поэтому календарные границы проверяются без часов и без сети, а
планировщик (app/services/scheduler.py) остаётся тонким. День ритма считается тем
же recurrence.next_date, что создаёт следующий экземпляр, — отдельного календаря
напоминаний нет, иначе правила разъехались бы.
Дедуп — журналом push_deliveries (unique(user_id, kind, ref_key)), и запись идёт
до отправки: тик 15-минутный, а поводы дневные, поэтому без журнала одна и та же
просрочка приходила бы сотню раз, а перезапуск контейнера рассылал бы дубли.
Обратный размен (падение между вставкой и отправкой) даёт пропуск, а не дубль —
для напоминания это правильная сторона ошибки.
Тихие часы — настройка quiet_hours («HH:MM-HH:MM», окно 22:00-09:00 в интерфейсе,
пересекает полночь). Попавшее в окно напоминание не отправляется и не
записывается: условие дневное, и следующий тик после окна отправит его сам. Работа
агента тихими часами не глушится — она ждёт решения владельца.
Планировщик живёт задачей в lifespan приложения: итерация уходит в
asyncio.to_thread (внутри синхронные SQLAlchemy и requests), цикл отменяется
вместе с приложением, сбой итерации логируется и не прекращает напоминания.
Сводка отправляется в окне 09:00-14:00 по REMINDER_TIMEZONE и молчит при нуле.
Заодно починен свой service worker: createHandlerBoundToURL('index.html')
бросал исключение при вычислении воркера в dev-режиме, где манифест precache пуст
(VITE_PWA_DEV=1), и регистрация падала целиком — отлаживать push было негде.
Маршрут теперь ставится только если index.html и правда в precache.
ТЗ 0.89: §3.21 дополнен подразделом «Напоминания», §5 — PushDelivery, §7 — строка
этапа, §8 — открытые вопросы про часовой пояс напоминаний и ретенцию журнала.
root
committed
12 hours ago
|

Системные уведомления: транспорт Web Push, события агента, настройки (0.88)
...
О работе агента владелец узнавал только из открытой вкладки: SSE-кадры
task.claimed/task.review живут ровно столько, сколько она открыта, а агент
работает как раз тогда, когда вкладки нет. Web Push — второй транспорт тех же
событий на той же шине; SSE остаётся за мгновенный refetch интерфейса.
Backend: pywebpush и пара ключей VAPID (app/vapid.py печатает готовые строки
для .env; пустые ключи — push тихо выключен, а не падение на старте),
таблица push_subscriptions (endpoint уникален глобально: тот же браузерный
профиль может войти другим аккаунтом — подписка перепривязывается),
app/api/push.py (config/subscribe/unsubscribe/subscriptions), тексты
уведомлений на ru/en/uk собирает сервер — у service worker локалей нет.
Отправка идёт вне HTTP-ответа (BackgroundTasks в REST, поток в MCP) со своей
сессией; мёртвые подписки (404/410, серия ошибок) удаляются лениво.
Frontend: свой src/sw.ts через strategies: 'injectManifest' — в generateSW
обработчик push вставить некуда; precache, SPA-fallback и CacheFirst переехали
из vite.config.ts в воркер, у SW отдельный tsconfig (WebWorker не уживается с
DOM). Подавление при видимой вкладке — по visibilityState клиента, иначе
системное уведомление дублировало бы тост. Разрешение спрашиваем при входе
(жеста нет — браузер вправе проигнорировать), надёжный путь — переключатель
в Настройках.
Тесты: подписка/отписка/перепривязка, отправка с подменённым webpush, связка
событий. Фоновую отправку в тестах глушим: она идёт в чужом потоке по общему
SQLite-соединению и перемешивала транзакции тестов мандата.
ТЗ 0.88: §3.21 «Системные уведомления», правки §3.14, §3.15, §5, §7.
root
committed
13 hours ago
|
Промпт для ИИ-агента: кнопка на странице задачи (0.87)
...
Текст задачи целиком — параметры, описание, предложение ИИ, подзадачи и
ссылка — собирается в aiPrompt.ts и копируется одной кнопкой из меню «⋯».
root
committed
13 hours ago
|
Форма создания задачи закрывается на мобильных (0.86)
...
Порог мобильного вынесен в viewport.ts — один на шторку меню и формы.
root
committed
13 hours ago
|
Интерфейс мандата: бейджи, приёмка, журнал, тосты (0.85)
root
committed
13 hours ago
|

Теплокарта проекта, облако тегов, две колонки, иконка подвала (0.83)
...
- ProjectHeatmap.vue: своя карточка «Активность» в сайдбаре страницы
проекта — та же сетка «как в гитхабе», что в статистике, но по задачам
одного проекта: столбец — неделя, строка — день недели, заливка — по
числу закрытых за день (done_at), в подсказке клетки дата и оба числа
(«закрыто N, создано M»). Периодов два: «За месяц» (5 недель, по
умолчанию) и «За полгода» (26 недель). Запросов к серверу нет: страница
проекта и так держит все свои задачи, включая завершённые. В месячном
режиме ячейки 18px, в полугодовом 9px (26 недель — 284px, влезает в
сайдбар без прокрутки): пятью неделями мелкая сетка терялась бы в
широкой карточке. Легенда шкалы встаёт рядом с сеткой, а когда сетка во
всю ширину — переносится под неё.
- ProjectView: карточка «Теги» — облаком, а не списком: размер шрифта по
ранжиру частоты (0.85–1.2em, число задач — в подсказке), клик ставит тег
в фильтр (тот же поиск по подстроке), повторный клик снимает, активный
тег подсвечен; до 960px список подтягивается к верху экрана — там
сайдбар стоит ниже списка.
- ProjectView: карточки задач раскладываются по две в ряд (до 700px — одна
колонка, как и раньше).
- TaskCard: пункт меню «Переместить в проект» сокращён до «В другой
проект» — длинная надпись рвалась на две строки в китовом меню 220px.
- kit-overrides.css: в подвале карточки снята китовская поправка иконки
(.ph.normalize, top:.15em). Она рассчитана на иконку на общей базовой
линии с текстом, а строка подвала — флекс с align-items:center: коробка
иконки центрируется сама (у иконочного шрифта нет нижнего выноса), и
поправка складывалась с этим центрированием — глиф уезжал вниз на 1.3px
(замер по пикселям: центр глифа ниже центра цифры «2» в «2 недели
назад»). Без поправки низ глифа садится на базовую линию, как у буквы.
Правка самого кита заказана отдельной задачей (vertical-align вместо
position:relative; top — на флекс-элемент он не действует).
- ТЗ 0.83.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
17 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
17 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
17 hours ago
|
Единая иконка «⋯», действия шапки справа на узком экране, полоса у табов (0.80)
...
- TaskView: иконка меню действий — ph-dots-three-outline, как в карточках
задач, стека и на странице проекта (был залитый ph-dots-three).
- App.vue: до 640px строка действий шапки растягивается на всю ширину и
прижимается вправо — у кита перенесённые действия встают у левого края,
и «⋯» на странице задачи оказывался под бейджами слева.
- ListView: у табов статуса спрятана полоса прокрутки (прокрутка осталась);
переключателю «Приоритетные» дан сдвиг 3px влево-вправо — бегунок кита
выступает за коробку контрола на 5px и вылезал левее соседей по ряду.
- ТЗ 0.80.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
17 hours ago
|
Страница задачи не едет по горизонтали, отступ табов статуса (0.78)
...
- TaskView: мобильный трек сетки — minmax(0, 1fr) вместо голого 1fr
(тот не сжимается ниже min-content: 517px в коробке 358px), колонки
получили min-width: 0 — на 390px страница уезжала вбок (scrollWidth 533).
- TaskView: overflow-wrap: break-word у md-view — длинный неразрывный токен
в описании (URL, инлайновый code) заставлял абзац скроллиться по горизонтали.
- ListView: отступ снизу у табов статуса 0.6rem → 1.25rem, табы липли
к первой карточке списка.
- ТЗ 0.78.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
20 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
20 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
|
Карточки стека по три в ряд; заголовок без двойного отступа (0.59)
...
- Стек входящих — сетка по три карточки (0.59): две на узких экранах,
одна на телефоне; карточки выравниваются по верху, скелетон повторяет
ту же сетку, чтобы загрузка не дёргала раскладку.
- Заголовок-ссылка карточки носит собственный card-link: класс card-title
принадлежит шапке карточки кита (header.card-title, padding 15px), и на
вложенной ссылке он давал вторые 15px — заголовок уезжал вправо от
остального содержимого карточки.
- tools/rasterize_icons.sh теперь обновляет и копию лого в public/
расширения (попап показывает лого из своего корня) — одна команда на
правку логотипа, копию больше нельзя забыть. Иконки расширения, dist и
ZIP пересобраны: всё с текущим знаком.
- ТЗ 0.59.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|

Сад отключён (0.58): страница «Достижения» вместо сада
...
Сад не готов к использованию, а сервис разрастается — убрали его из
интерфейса и сосредоточились на основном функционале. Код сада,
модель GardenItem, coin_events и rarity у xp_events сохранены: сад
вернётся для доработки.
- Выдача растений прекращается сама: GardenItem создавался лениво в
ensure_garden(), которую звал только GET /api/garden, — UI его
больше не запрашивает.
- Прогресс и ачивки переехали на новую страницу /achievements (пункт
меню на месте «Сада»); /garden редиректит туда же.
- Блок ачивок вынесен в общий components/AchievementsPanel.vue —
им пользуются и «Достижения», и сад (для возврата).
- Баланс монет отдаёт GET /api/xp (coins) — единственная правка
бэкенда; паритет с /api/garden покрыт тестом.
- Тост закрытия — «+N XP • +N монет» с похвалой, без слов про
растение; золотое конфетти за xp >= 25 и «не хочется делать».
- Тексты прогресса — в общем неймспейсе progress.*, сад-специфичные
остались под garden.*.
- ТЗ 0.58: пункт «Сад отключён» с причиной, детальное описание сада
оставлено историческим блоком.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
Экран входа — карточка кита (0.55)
...
Как на экране входа gnexus-creds: GnCard 460px по центру вместо голой
колонки, содержимое — своя колонка-обёртка (внутренности .card-content
кита не трогаем). Пока /auth/me не ответил, в карточке лого и лоадер —
кнопка не вспыхивает перед редиректом уже залогиненного.
Кнопка на узком экране (<=420px) уменьшена: «ВОЙТИ ЧЕРЕЗ GNEXUS»
переносилась на две строки.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
| 2026-09-30 |
Паста изображений в описании при создании задачи/заметки
...
Вложения привязаны к документу, а он создаётся лениво при сохранении —
в форме создания задачи паста молча ничего не делала. Теперь файлы
держатся локально, в поле blob-плейсхолдер с живым превью, после
создания они грузятся к документу и ссылки заменяются настоящими
(PATCH описания). MdEditor получает imageHref для URL заглушки.
В заметке проекта без документа он материализуется текущей заметкой.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
10 days ago
|
Сырые кастомные блоки — под визуальный язык кита 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-23 |
Ачивки: описание условия по клику (GnPopover)
...
Карточка-ачивка в саду — триггер GnPopover кита: клик открывает панель
с кратким описанием условия (garden.achHint, ru/en/uk). Тултип по hover
не годится — не работает на тач-экранах; карточка стала button-триггером
и тянется на всю колонку грида. ТЗ 0.49 (§3.13).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
| 2026-09-22 |
iOS Safari: типовые проблемы iPhone-версии
...
- 16px на полях/селектах/поле тегов на touch (media hover:none, pointer:coarse) —
иначе iOS зумит страницу при фокусе и зум застревает
- 100dvh у drawer'ов/меню/модалок (100vh в iOS выше видимой области — низ
уезжал под панель браузера), фолбэк 100vh остаётся
- safe-area (viewport-fit=cover): тосты, drawer-body, топбар и refresh-лоадер
отступают от индикатора «домой» и статус-бара
- apple-mobile-web-app-* меты: standalone до iOS 16.4, black-translucent
статус-бар, тайтл
- тап-подсветка WebKit отключена; кнопка fullscreen сада скрыта там, где
requestFullscreen нет (iPhone Safari умеет только video)
ТЗ 0.47 (§3.15).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Страница-инструкция расширения: /extension в меню веб-версии
...
Скачивание ZIP (extension pack → статика фронта), шаги загрузки unpacked
и подключения MCP-токена; из установленного PWA пункт меню скрыт
(display-mode: standalone), по прямому адресу — пояснение.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Карточка тегов на странице проекта: максимум 400px, внутри скролл
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Подсказка про README — у заметки проекта, не у задачи
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Карточка тегов на странице задачи: максимум 400px, внутри скролл
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Подсказка: описание можно заполнить ссылкой на публичный репозиторий
...
В подписи редактора при создании задачи и на странице задачи
(пустое описание, инлайн-правка) — «вставьте ссылку на публичный
репозиторий — вместо описания подтянется README». Локали ×3, ТЗ 0.41.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Длинная заметка проекта сворачивается: начало + «Развернуть»
...
Высота блока заметки (или README от ссылки) мерится по факту рендера
(ResizeObserver — картинки догружаются и растут): выше ~420px —
сворачивается, под ней подсказка «Заметка большая — показано начало»
и кнопка «Развернуть»/«Свернуть». Локали ×3, ТЗ 3.8/0.41.
Проверено headless: длинный README свёрнут (420px, подсказка на
месте), «Развернуть» раскрывает до полных ~4700px.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|