Files
xboct-flow/docs/AUDIT-PLAN.md
T
2026-07-18 07:18:11 +05:00

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.tsTaskStatus.UNKNOWN, TASK_STATUS_ORDER, TASK_STATUS_META
  • model/taskPriority.tsTaskPriority.UNKNOWN, TASK_PRIORITY_ORDER, TASK_PRIORITY_META
  • utils/markdown.ts — маппинг в parseTaskFile
  • validateFrontmatter.ts — возможно, смягчить валидацию для unknown

4. Хрупкие тесты

Snapshot-тесты

  • model/taskStatus.test.tstoMatchSnapshot() на TaskStatus
  • model/taskPriority.test.tstoMatchSnapshot() на TaskPriority

Ломаются от любого изменения порядка ключей.

→ Заменить на toEqual() с явными ожиданиями.

_unsafeUnwrap() вместо проверок isErr/isOk

7 мест, где используется _unsafeUnwrap() — при падении теста вместо понятной assertion ошибки будет RuntimeError: called _unsafeUnwrap on an Err:

  • src/commands/addProjectTag.test.ts:27,28,50,63,66
  • src/projectConfig/parseProjectConfig.test.ts:14,15,24
  • src/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.tsfrontmatterFields.ts + тесты
  • Edge case тесты — 14 тестов добавлены, все зелёные
  • Дизайн-вопрос — решить судьбу неизвестных статусов/приоритетов
  • Хрупкие тесты — snapshot → toEqual, _unsafeUnwrap → безопасный паттерн
  • config.ts + taskFile.ts — unit-тесты
  • todo.md — refresh боковой панели
  • Интеграционный тест — полный round-trip через файл