5.6 KiB
Аудит и план доработок
1. Невыполненный пункт todo.md
- Боковая панель — при изменении настроек должна обновляться (или кнопка
refresh)
todo.md:58-60
2. Рефакторинг: слияние frontmatterBlock.ts → frontmatterFields.ts
✅ Выполнено
frontmatterBlock.tsудалён, логика перенесена вfrontmatterFields.ts- Обновлены импорты в
validateFrontmatter.tsиparseTaskTags.ts - Написаны 7 unit-тестов на
extractFrontmatterBlock
3. Тесты на edge cases
✅ Выполнено — добавлено 14 тестов во все перечисленные модули.
Список покрытых кейсов:
| Модуль | Что добавили |
|---|---|
dashboard/sortTasks |
пустой массив, одинаковые created, invalid даты |
kanban/buildKanbanBoard |
одинаковые updated (стабильность) |
storage/FsTaskRepository |
кириллица, title 80 символов, спецсимволы в тегах, slug для Fix___bug |
dashboard/applyRawTaskContent |
разный порядок полей, пустое body |
dashboard/buildDashboardView |
пустой массив |
dashboard/groupTasks |
неизвестный статус/приоритет |
dashboard/filterTasks |
пустой массив |
🟡 Ещё можно добавить
| Модуль | Кейс |
|---|---|
| — | Интеграционный тест: create → serialize → write → read → parse |
FsTaskRepository |
конфликт ID при merge задач из project + global |
❓ Дизайн-вопрос: неизвестные статусы/приоритеты
groupTasks молча дропает задачи, у которых status или priority не входит в
известный список (TASK_STATUS_ORDER / TASK_PRIORITY_ORDER). Такая задача
будет в visibleTasks, но не попадёт ни в одну группу → фактически невидима в
grouped-view.
Возможное решение: добавить TaskStatus.UNKNOWN / TaskPriority.UNKNOWN и
маппить любые невалидные значения на них при парсинге в parseTaskFile
(utils/markdown.ts). Тогда groupTasks всегда найдёт такую задачу в группе
"Unknown".
Решение требует изменений:
model/taskStatus.ts—TaskStatus.UNKNOWN,TASK_STATUS_ORDER,TASK_STATUS_METAmodel/taskPriority.ts—TaskPriority.UNKNOWN,TASK_PRIORITY_ORDER,TASK_PRIORITY_METAutils/markdown.ts— маппинг вparseTaskFilevalidateFrontmatter.ts— возможно, смягчить валидацию для unknown
4. Хрупкие тесты
Snapshot-тесты
model/taskStatus.test.ts—toMatchSnapshot()наTaskStatusmodel/taskPriority.test.ts—toMatchSnapshot()наTaskPriority
Ломаются от любого изменения порядка ключей.
→ Заменить на toEqual() с явными ожиданиями.
_unsafeUnwrap() вместо проверок isErr/isOk
7 мест, где используется _unsafeUnwrap() — при падении теста вместо понятной
assertion ошибки будет RuntimeError: called _unsafeUnwrap on an Err:
src/commands/addProjectTag.test.ts:27,28,50,63,66src/projectConfig/parseProjectConfig.test.ts:14,15,24src/projectConfig/serializeProjectConfig.test.ts:11,17
→ Заменить на isErr()/isOk() + if (result.isErr()) return паттерн.
5. Untested-модули (кроме UI/vscode-адаптеров)
src/config.ts (60 строк) После слияния frontmatterBlock.ts — самый
крупный untested модуль.
Стоит покрыть: getConfigSection, getSettingDefault, ошибки при missing keys.
src/model/taskFile.ts (46 строк) isTaskFileName + константы — можно
быстрый unit-тест.
Текущий статус
- Рефакторинг —
frontmatterBlock.ts→frontmatterFields.ts+ тесты - Edge case тесты — 14 тестов добавлены, все зелёные
- Дизайн-вопрос — решить судьбу неизвестных статусов/приоритетов
- Хрупкие тесты — snapshot →
toEqual,_unsafeUnwrap→ безопасный паттерн - config.ts + taskFile.ts — unit-тесты
- todo.md — refresh боковой панели
- Интеграционный тест — полный round-trip через файл