3eb6c7fecd
CsvReconcileJob каждый час стабильно ставил drift_alert ~40-50% (10 запусков подряд на проде → admin-блок «Здоровье резервного канала» показывал «down»), потому что поставщик crm.bp-gr.ru кладёт телефон/URL в поле «project» CSV. Парсер extractPlatform() корректно их скипал, но строки оставались и в count(missing), и в total_csv_rows формулы drift'а → стабильный false-positive. Фикс (вариант A из брейнсторма с заказчиком): - schema v8.36: +supplier_csv_reconcile_log.unparseable_count INTEGER NOT NULL DEFAULT 0 - CsvReconcileJob: считает $unparseableCount отдельно, новая формула drift = max(0, missing − unparseable) / max(1, total − unparseable) - Миграция (pgsql_supplier, Спек B pattern, IF NOT EXISTS — idempotent) - TDD: +2 теста (100matched+10junk → ok; mixed 95+5junk+3real → drift по реальным). Существующие 7 кейсов GREEN без изменений (unparseable=0 → формула идентична). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>