# Аудит и план доработок ## 1. Невыполненный пункт todo.md > ✅ **Выполнено** Добавлен `vscode.workspace.onDidChangeConfiguration` в `extension.ts` — при изменении `xboctukFlow.*` настроек пересоздаются file watchers и вызывается `tree.refresh()`. --- ## 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` | пустой массив | | `FsTaskRepository` | интеграционный: create → file → parse → сверка | --- ## 4. rename: TODO → OPEN + UNKNOWN > ✅ **Выполнено** - `TaskStatus.TODO` → `TaskStatus.OPEN` (wire: `"open"`) - Добавлены `TaskStatus.UNKNOWN` и `TaskPriority.UNKNOWN` - Невалидные статусы/приоритеты при парсинге → `UNKNOWN` (решает проблему невидимых задач в groupTasks) - `normalizeTaskStatus` / `normalizeTaskPriority` в `utils/markdown.ts` - `defaultHidden: true` для UNKNOWN (как backlog/cancelled) --- ## 5. Хрупкие тесты > ✅ **Выполнено** ### Snapshot-тесты - Оставлены `toMatchSnapshot()` как есть (сознательное решение — обновляются через `--update`). ### `_unsafeUnwrap()` → безопасный паттерн - `addProjectTag.test.ts` — 3 места - `parseProjectConfig.test.ts` — 2 места - `serializeProjectConfig.test.ts` — 2 места Все заменены на `isOk()/isErr()` + ранний return. --- ## 6. Untested-модули > ✅ **Выполнено** **`config.test.ts`** — 4 теста: - `getConfigSection` возвращает непустую строку - `getSettingDefault` для обоих ключей - ошибка при missing key **`taskFile.test.ts`** — 6 тестов: - extension и language id — непустые строки - `MAX_TASK_TITLE_LENGTH` — положительное число - `isTaskFileName` — корректно проверяет расширение --- ## 7. Сырые строки → константы в тестах > ✅ **Выполнено** Во всех тестовых файлах `"open"`/`"done"`/`"in-progress"`/`"unknown"` и приоритеты заменены на `TaskStatus.*` / `TaskPriority.*`. Serialization-ассерты (`toContain("status: open")`) и YAML-фикстуры оставлены как есть. --- ## Текущий статус - [x] **Рефакторинг** — `frontmatterBlock.ts` → `frontmatterFields.ts` + тесты - [x] **Edge case тесты** — 14 тестов + интеграционный - [x] **rename TODO → OPEN + UNKNOWN** - [x] **Хрупкие тесты** — snapshot оставлены, `_unsafeUnwrap` заменён - [x] **config.ts + taskFile.ts** — unit-тесты - [x] **todo.md** — refresh боковой панели - [x] **Сырые строки → константы** в тестах