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

6.1 KiB

Аудит и план доработок

1. Невыполненный пункт todo.md

  • Боковая панель — при изменении настроек должна обновляться (или кнопка refresh)
    • todo.md:58-60

2. Рефакторинг: слияние frontmatterBlock.ts → frontmatterFields.ts

Зачем

frontmatterBlock.ts (148 строк) — единственный крупный модуль без единого теста. Его логика (поиск строк/позиций в frontmatter) тесно связана с frontmatterFields.ts. Ни один другой потребитель не требует отдельного файла.

План

  1. Перенести весь код frontmatterBlock.ts в frontmatterFields.ts
  2. Убрать export * from "./frontmatterBlock" и соответствующий import
  3. Обновить импорты в validateFrontmatter.ts и parseTaskTags.ts
  4. Удалить frontmatterBlock.ts
  5. Написать unit-тесты на перенесённые функции:
    • extractFrontmatterBlock — валидный/без закрытия/без frontmatter/пустой/CRLF
    • findFieldLineRange — поле найдено/не найдено/с отступами

3. Тесты на edge cases

🔴 Приоритет: высокий

Модуль Недостающие кейсы
dashboard/sortTasks пустой массив, одинаковые created, невалидные даты
kanban/buildKanbanBoard одинаковые updated (стабильность sort)
storage/FsTaskRepository ошибки fs при readdir/readFile/writeFile/deleteFile, кириллица в заголовке, title ровно 80 символов, теги с кавычками/спецсимволами
dashboard/applyRawTaskContent raw с другим порядком полей, raw без тела (description)
dashboard/buildDashboardView пустой массив задач (tasks: [])
dashboard/groupTasks неизвестный статус/приоритет в данных

🟡 Приоритет: средний

Модуль Недостающие кейсы
Интеграционный тест: create → serialize → write → read → parse (полный цикл через файл)
dashboard/filterTasks пустой массив, все фильтры пустые
FsTaskRepository конфликт ID при merge задач из project + global

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

Порядок работ (рекомендуемый)

  1. Рефакторинг — слияние frontmatterBlock.tsfrontmatterFields.ts + тесты
  2. Edge case тесты — FsTaskRepository, sortTasks, buildKanbanBoard, applyRawTaskContent
  3. Хрупкие тесты — snapshot → toEqual, _unsafeUnwrap → безопасный паттерн
  4. config.ts + taskFile.ts — unit-тесты
  5. todo.md — refresh боковой панели
  6. Интеграционный тест — полный round-trip через файл