7fd3cde4f6
Один невалидный UTF-8-байт в выгрузке лидов crm.bp-gr.ru ронял весь импорт на INSERT (PG: invalid byte sequence for encoding UTF8, SQLSTATE 22021). str_getcsv пропускает любые байты, и невалидная последовательность доходила до БД. CsvLeadsParser::parse теперь чистит невалидный UTF-8 через mb_convert_encoding до парсинга — битый байт заменяется, строка импортируется, очередь не падает. TDD CsvLeadsParserUtf8Test, проверено руками на PG. Также зафиксирован вывод по FN-RLS-CTX: no-action — путь projects уже под tenant-middleware, старый no-auth endpoint заменён, не воспроизводится. Прод не трогался. Накат — позже вместе с остальным. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>