# ADR-081: Per-process output TMP dirs in draw-image test beforeAll

## Статус
Accepted (2026-07-31)

## Контекст
Тестовые файлы draw-image использовали общий output-каталог на тест-файл (`/tmp/draw-image-<name>`), создаваемый/очищаемый в `beforeAll`. При параллельном запуске нескольких процессов vitest concurrently (внешняя параллель, не intra-pool) процессы с одинаковым набором тест-файлов конкурировали за один каталог: `rmSync(TMP, recursive)` процесса A удалял PNG + `meta.json`, только что написанные процессом B → падение assertions (`existsSync`, `skipped vs rendered`, `unable to open for write`). Аналогично race на `input.svg` (#177, test helper), но для output-каталогов `beforeAll`. Issue #183.

## Решение
Уникализировать output-каталог на процесс через `process.pid` suffix: `TMP = path.join(os.tmpdir(), \`draw-image-<name>-\${process.pid}\`)`. Добавить `afterAll` cleanup где отсутствовал. `process.pid` уникален на каждый параллельный vitest-процесс → каталоги не коллизируют. Не использован `mkdtempSync` — детерминированный suffixed path проще для assertions и достаточно уникален для внешней параллельности (intra-pool workers у vitest по умолчанию forks → разные PID).

## Альтернативы
- `fs.mkdtempSync(path.join(os.tmpdir(), "draw-image-<name>-"))` — гарантированная уникальность даже при одинаковом PID (threads pool), но nondeterministic path усложняет дебаг. PID-suffix достаточен для текущего pool-режима vitest.
- Vitest `--no-parallel` / `--pool=threads --poolOptions.threads.singleThread: true` — подавляет параллель, но не устраняет root cause и замедляет CI.