No process ID was actually being parsed here — just whatever digits happened to come first in a filename. GitHub issue #34210 documents a background routine in Claude Code, concurrentSessionCleanup(), that runs on every session start, every...
На самом деле здесь не анализировался никакой идентификатор процесса — просто те цифры, которые стояли первыми в имени файла.
Что говорит источник
Проблема GitHub № 34210 документирует фоновую процедуру в Claude Code concurrentSessionCleanup(), которая запускается при каждом запуске сеанса, каждом автосжатии и периодически после этого. Его задача — удалить устаревшие файлы блокировки .json, оставленные мертвыми процессами Claude Code в ~/.claude/sessions/. Для этого он перечисляет все файлы в каталоге, удаляет завершающий .json, если он присутствует, и передает все, что осталось, в parseInt(name, 10) JavaScript — даже не проверяя, было ли полное имя файла действительно числовым.
parseInt считывает только первые цифры строки и молча отбрасывает остальные. Таким образом, файл с именем 2026-01-01_notes.md анализируется как PID 2026. Если ни один процесс с PID 2026 не запущен (и платформа не WSL, что явно исключается из кода), процедура вызывает fs.unlink() непосредственно для файла. Нет запроса на подтверждение, нет предупреждений, ничего не записывается в журнал и нет папки для мусора, из которой можно было бы восстановить данные.
Репортер (michaelk-q) воспроизвел ошибку в три этапа: создайте файл с цифровым префиксом внутри ~/.claude/sessions/, запустите второй Claude Cod.