| 2026-09-20 |
Сад: пиксель-арт сцена на PixiJS 8 — спрайты из кода, рендерер вне Vue-reactive
...
- PixiJS 8 (WebGL): nearest, roundPixels, нативный пиксель 16px×2 (клетка 32px),
динамический импорт — pixi в async-чанке (main не раздут, PWA в лимитах)
- src/game/pixelart.ts: пиксель-матрицы → canvas → CanvasSource(nearest) с кэшем
- src/game/sprites.ts: тайлы травы/дикой земли/изгороди, домик, 6 видов × 3
стадии растений, декорации, кольца rare/epic, блёстки — без внешних ассетов
- src/game/GardenRenderer.ts: слои terrain/house/items/fx, дифф items по id,
z-sort, drag на канвасе, grow-in/покачивание/блёстки, один тикер
- GardenScene.vue: renderer через shallowRef — deep-reactive-прокси Vue ломал
identity-проверку shared defaultScale в Pixi (TypeError при первом drag)
- ТЗ 0.16: 3.13 дополнен (отрисовка сцены), вопрос 8 закрыт
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
12 hours ago
|
Сад: инвентарь декораций — покупка кладёт на склад, drag на карту и обратно
...
- Бэк: garden_items.x/y nullable; покупка декорации не размещает её,
а кладёт в инвентарь; PATCH с x/y null возвращает декорацию в инвентарь
(растениям — 400); авторазмещение учитывает только размещённые элементы.
- Фронт: полоса инвентаря под сценой с чипами, drag из инвентаря на карту
с призраком у курсора, drag размещённой декорации обратно в инвентарь,
GnAlert «Куплено…» в маркете. Фикс: убран pointer-events:none у декораций —
из-за него декорации нельзя было перетаскивать по карте.
- Миграция f2a3b4c5d6e7, локали ru/en/uk, ТЗ 0.15.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
13 hours ago
|
Сад-сцена: монеты, растения на карте, магазин декораций и расширений
...
Контент открывается за опыт, покупается за монеты: XP — ранг садовника
(только растёт), монеты — валюта сада. Монеты за закрытие = floor(xp/2)
(заголовок X-Earned-Coins) и бонус 25×L за уровень; журнал — coin_events.
- Бэкенд: CoinEvent/GardenItem + миграция с backfill монет; сервис сада
(баланс, авторазмещение спиралью вокруг домика, виды по уровням,
premium только у rare/epic); API /api/garden — сцена, перемещение,
апгрейд растений, магазин декораций и расширений карты.
- Фронт: SVG-сцена GardenScene (сетка 20px, домик, drag&drop, поповер
роста), кошелёк в шапке, маркет (расширения, декорации, каталог видов
с замками), тост «+XP • +N монет», локали ru/en/uk.
- Тесты сада (10), ТЗ 0.14 (3.13 + модель данных).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
16 hours ago
|
Сущность «документ»: описания и заметки — единый текст с вложениями
...
- Новая таблица 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
17 hours ago
|
ТЗ 0.12: инлайн-редактирование полей задачи и проекта
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
19 hours 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 hours ago
|
stats: переключатель диапазона сетки активности — полгода / год
...
- GnTabs «Полгода / Год» в шапке сетки активности: 26 или 52 недели
- Заголовок секции зависит от диапазона (stats.heatmapHalf/heatmapYear)
- GnTabs в ките тянется на width:100% — в шапке посажены в одну строку
- Локали ru/en/uk; ТЗ 0.11: сетка активности «за полгода или год»
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
20 hours ago
|
feat(frontend): сравнительный график и сетка активности на статистике
...
- График периодов стал сравнительным: текущий и предыдущий аналогичный период
— пары столбиков (час↔час, день недели↔день недели, число↔число), легенда
«Сейчас / Предыдущий период»
- Сетка активности «как в гитхабе»: последние 26 недель, заливка 0–4 по
закрытым задачам или XP (переключатель), тултипы с датой, легенда
- Локали ru/en/uk, ТЗ 0.10 дополнен
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
20 hours ago
|
feat: страница «Статистика» с периодами и сравнением + справка «О саде» (ТЗ 0.10)
...
- Страница /stats: день/неделя/месяц с листанием стрелками ‹ ›; метрики
(закрытые задачи, XP, созданные задачи, часы, «дни с результатом») — каждая
GnMetricCard со сравнением с предыдущим аналогичным периодом (дельта + %)
- Анимированный график закрытых задач по бакетам периода (24 часа / 7 дней /
дни месяца), «волна» scaleY при смене периода, подписи через Intl по локали
- Данные — из GET /api/xp/events и списка задач, без новых эндпоинтов
- Сад: кнопка «Как это работает» → GnModal с объяснением механик
- Локали ru/en/uk (stats.*, garden.about*), ТЗ 0.10
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day 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
1 day 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
1 day ago
|
feat(frontend): дашборд на главной — совмещён со стеком
...
- Dashboard.vue: «В работе», «Просрочено», дедлайны недели, «Следующие»
(to_do по приоритету, топ-5) + сайдбар (сводка статусов, активные проекты)
- StackView — главная «Главное»: дашборд сверху, стек снизу, один список
задач на оба блока (Promise.all задач и проектов)
- Нав-пункт «Главная» (ph-house) вместо «Стек входящих»
- Локали home.* (ru/en/uk); ТЗ 0.7 — новый п. 3.7, перенумерация 3.8–3.11
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|
| 2026-09-19 |
ТЗ 0.6: представление «дерево задач» убрано
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day 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
1 day 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
1 day ago
|
M0: каркас проекта
...
- ТЗ v0.3 (docs/TZ.md): требования, модель данных, архитектура, вехи
- backend: FastAPI-скелет (health), конфиг из окружения, интеграция gnexus-gauth
- frontend: Vue 3 + Vite + TypeScript, каркас SPA (стек/дерево), gnexus-ui-kit
- Docker: Dockerfile'ы, docker-compose (postgres/api/web), nginx с /api-прокси
- Гейты: ruff + mypy strict (pass), vue-tsc + vite build (pass)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
1 day ago
|