| 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.93)
...
ИИ переписывал заголовок и описание — и портил их: контекста задачи у модели нет,
поэтому сжатый текст терял важные детали или менял суть. А карточка предложения
принимает всё или ничего, так что верно угаданные теги приходилось отклонять
из-за кривого описания. Теперь ИИ предлагает только то, где он полезен: теги,
градацию приоритета и оценку длительности.
- теги ДОПОЛНЯЮТ назначенные, а не заменяют их — потому существующие теги задачи
идут в контекст промпта отдельной строкой с правилом «не повторяй» (раньше теги
предлагались, только когда у задачи нет ни одного);
- приоритет просим градацией интерфейса (very_low…urgent), число шкалы 0-10
считаем сами: маленькой модели выбрать слово проще, чем откалибровать число.
Выдуманные ею градации («Very High», «critical», «normal») притягиваются к
ближайшей из пяти, иначе ответ пропадал бы целиком;
- оценка в минутах, границы 5…1440 (как ge=1, le=24*60 в схеме), округление до
5 минут. Она же включает задачу в режим «3 варианта», куда задачи без оценки
попадали лишь фолбэком;
- применение безопасно по определению: теги сливаются, приоритет и оценка пишутся
только в пустое поле. Проверка «пусто» стоит в apply_proposal, а не только в
промпте: владелец мог проставить приоритет, пока модель думала, — перетирать его
нельзя. Заголовок и описание не трогаются вовсе;
- флаг force у detail_task убран: переспрос всё равно ничего не перетирает,
«перепредложить всё» потеряло смысл. «Переспросить ИИ» теперь сбрасывает
предложение и анализирует текущий текст задачи;
- пустой ответ модели («добавить нечего») карточку не показывает — молчим, как и
просил владелец. Сырую задачу в этом случае утверждают из меню шапки (и в стеке
кнопка утверждения остаётся); «Детализация подбирается…» в стеке показывается
только пока ai_proposal === null, то есть пока ИИ думает;
- в интерфейсе из предложения ушли строки заголовка, описания и проекта; сниппет
карточки в списке сводится к тегам («Средний · ≈ 30 мин» текстом задачи не
читается), из промпта внешнего агента описание тоже уходит.
Живой прогон на qwen3.5:2b-q4_K_M (временный пользователь): оценки осмысленны, но
шумны (одна задача давала 15/25/30/45/60 мин от прогона к прогону), приоритет в
основном попадает, но бывает завышен (смазка петель двери → urgent), теги — слабое
место: модель редко переиспользует русский каталог и придумывает английские.
Понижение температуры до 0.1 даёт стабильность, но выравнивает всё (приоритет
почти всегда low, оценка всегда 15), поэтому оставлено как есть.
ТЗ 0.93: §3.2, §3.4, §3.11, §3.22, §5, §7, §8 п.2 (решение 2026-09-22 отменено,
решение 2026-09-19 подтверждено).
root
committed
9 hours ago
|
Форма создания задачи закрывается на мобильных (0.86)
...
Порог мобильного вынесен в viewport.ts — один на шторку меню и формы.
root
committed
12 hours ago
|
| 2026-10-09 |
Карточки стека по три в ряд; заголовок без двойного отступа (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
|
| 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
|
Теги — без аперкейса кита (бейджи тегов и чипы ввода тегов)
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Массовое добавление задач: форма не закрывается, проект из контекста (ТЗ 0.39)
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
| 2026-09-21 |

Пачка 1 ревью: безопасность + порча данных (находки 1-5)
...
Бэкенд:
- DELETE /api/tags/{id} требовал сессии только фактически — добавлен UserDep;
регрессия-тест проверяет require_user на каждом /api-роуте (не пройдёт для
любого нового эндпоинта без UserDep).
- Вложения: SVG отклоняется (скриптуемый формат — inline-отдача = stored XSS),
лимит 10 МБ на файл, X-Content-Type-Options: nosniff на отдаче.
- Open redirect закрыт: return_to только внутренние пути (не //, не внешние).
- MCP-токен сравнивается constant-time (hmac.compare_digest).
- Дефолтный SESSION_SECRET валит старт валидатором — молчаливо подделываемая
кука вместо этого даёт явную ошибку конфигурации.
- backend/data/ (runtime-вложения) в .gitignore.
Фронтенд:
- Черновик инлайн-правки больше не переезжает между задачами: при смене
/tasks/:id сбрасываются descEditing/draft, заголовочный InlineField
перемонтируется по key=taskId (PATCH старого текста в новую задачу).
- Утечка SSE-подписок: onRealtime сам отписывается при dispose scope —
N визитов на страницу больше не оставляют N load() на мёртвых инстансах.
- Out-of-order: токен запроса в load() TaskView/ProjectView — поздний ответ
старого id не перетирает данные нового; ListView — то же на фильтрах.
- Смена фильтра сбрасывает пагинацию: watch(filters, {deep}) (ТЗ 3.6).
- Двойной submit не создаёт дубликаты: busy в TaskForm и quickAdd стека.
- Утечка Pixi: unmount во время init уничтожает рендерер после резолва.
- Оффлайн-старт PWA: /auth/me без сети не роняет onMounted молча.
Тесты: 103 passed (+6: auth-все-роуты, SVG, oversize, nosniff, return_to,
дефолтный секрет). ruff/mypy чисты.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
19 days ago
|
Пачка 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 |
Разгрузка формы создания: «Дополнительно» свёрнуто, редирект на задачу
...
- Оценки (время, затраты) и дедлайн в TaskForm свёрнуты в GnAccordion
«Дополнительно»: при создании скрыты (детализация — позже), при правке
раскрыты по умолчанию.
- После создания задачи из стека (StackView) и со страницы проекта
(ProjectView) пользователь направляется на страницу созданной задачи —
там блоки заполняются через «Редактировать».
- Локали: stack.form.extra (ru/en/uk).
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
|
fix(frontend): убрать дёргание главной при фоновом опросе
...
Тик опроса (5 с) включал loading — при пустом стеке мигал скелетон —
и заменял массивы задач/проектов новыми объектами, вызывая полную
перерисовку дашборда и стека. Теперь фоновый тик тихий: скелетон
только при первой загрузке, массивы не трогаются, если не изменились
(сверка JSON), поэтому между реальными изменениями DOM не мутирует.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days 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
21 days ago
|
| 2026-09-19 |
Иконки во всех бейджах; approve — success; quick-add вертикально
...
- TaskBadges: иконки у всех меток — статус (квадрат/полукруг/галка/
крест/пауза), приоритет (флаг), оценка (таймер), бюджет (монеты),
теги (ярлык); предложение ИИ на стеке — бейджи с иконками
(proposalItems возвращает {icon, label})
- «Да, всё верно» на стеке — success вместо accent
- quick-add: вертикальная компоновка, текстовое поле на всю ширину
(снят max-width:600px у .form-group кита)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
Добавление задач — полная форма; подзадачи карточками
...
- TaskForm умеет создавать: проп task опционален, дефолты из
projectId/parentId (create + PATCH, тост «Создано — попала в стек»)
- Подзадача на странице задачи — полная форма в drawer (было
окно-промпт одной строкой)
- Новая задача из проекта — полная форма в drawer
- В стеке кнопка «Новая задача» (шапка) открывает полную форму;
quick-add одной строкой остаётся как опция
- Подзадачи на странице задачи — классические карточки TaskCard
(заголовок-ссылка, сниппет, бейджи, меню) вместо дерева
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
feat(frontend): страницы задачи и проекта, карточки, наглядное дерево
...
- /tasks/:id — полная страница задачи: просмотр/редактирование (TaskForm),
статусы, предложение ИИ, описание md + вложения, параметры, подзадачи
- /projects/:id — страница проекта: заметка, прогресс, задачи с фильтрами,
дерево проекта, создание задачи в проект (create + PATCH project_id)
- общие компоненты: TaskForm (вынесена из drawer'а стека), TaskCard
(заголовок-ссылка, сниппет, меню), TaskTree (шевроны, линии связей,
прогресс поддерева)
- стек: drawer на TaskForm, quick-add — многострочное поле (Enter — закинуть)
- .app-content 1200px, ключи i18n task.*/projectPage.*, ru/en/uk
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
Мелкие правки: профиль в gnexus auth, кнопка quick-add, ширина drawer'а
...
- /auth/me отдаёт account_url ({gauth_base_url}/account); профильная
ссылка в футере навигации ведёт в систему авторизации (в новой вкладке).
- Кнопка «Закинуть» обычного размера (46px), поле осталось 60px.
- Drawer детализации 760px на десктопе.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
21 days ago
|
Стек: quick-add — солидное поле (60px) и вертикальные отступы
...
- Форма отделена margin 1.75rem сверху и снизу (от заголовка и списка).
- Поле ввода: height 3.75rem, шрифт 1.1rem; кнопка той же высоты.
- Иконки ph-inbox → ph-tray в empty-состояниях (inbox нет в
phosphor-наборе кита — не рендерилась).
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
|
Дедлайны и регулярные задачи (ТЗ 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
|
Интеграция gnexus-ui-kit в SPA
...
- kit.css + phosphor icons в main.ts, глобальная регистрация через GnexusUiVue
- vite-плагин: /assets кита (шрифты/иконки) — middleware в dev, копирование в build
- App.vue: GnNavigationShell + GnToastProvider, nav через items с router-ссылками
- StackView: GnPageHeader/GnInput/GnButton/GnCard/GnBadge/GnTextarea/GnSelect/
GnCheckbox/GnEmptyState/GnAlert/GnIconButton — ноль сырых кнопок и полей
- TreeView: заготовка на GnEmptyState
- d.ts-декларации для JS-пакета кита
- правило в CLAUDE.md: максимум готовых Gn*-компонентов
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
|
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
21 days ago
|