From 146501bae91b2a04760bb7445daaec335b8d7f12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Fri, 22 May 2026 20:08:01 +0300 Subject: [PATCH] =?UTF-8?q?chore(supplier):=20csv=5Freconcile.unparseable?= =?UTF-8?q?=5Fproject=5Fskipped=20warning=E2=86=92info?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Поставщик периодически кладёт в CSV-колонку project имена нестандартного формата (телефон '79135191264', URL); extractPlatform() возвращает null, строка пропускается. Это поведение, не баг на нашей стороне — даунгрейд до info, чтобы перестать спамить laravel.log warning'ами по 13+ раз/день (не actionable, processing продолжается). Параллельно подчищены 4 truly-orphan supplier_projects (id 57/73/77/79) на проде — тестовые placeholders (x.example / 79991234567 / URL); 16 leads получили supplier_project_id=NULL (raw_payload preserved), 0 deals в любом tenant'е по этим телефонам — info@lkomega.ru/client1 не затронут. --- app/app/Jobs/Supplier/CsvReconcileJob.php | 4 +++- docs/observer/STATUS.md | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/app/Jobs/Supplier/CsvReconcileJob.php b/app/app/Jobs/Supplier/CsvReconcileJob.php index 324b3de9..5d00305d 100644 --- a/app/app/Jobs/Supplier/CsvReconcileJob.php +++ b/app/app/Jobs/Supplier/CsvReconcileJob.php @@ -129,7 +129,9 @@ final class CsvReconcileJob implements ShouldQueue foreach ($missing as $row) { $platform = $this->extractPlatform((string) $row['project']); if ($platform === null) { - Log::warning('csv_reconcile.unparseable_project_skipped', [ + // Поставщик иногда кладёт в `project` нестандартные имена (телефон, URL). + // Не warning — это не наш баг, processing продолжается, paper-trail на info уровне. + Log::info('csv_reconcile.unparseable_project_skipped', [ 'project' => $row['project'], ]); diff --git a/docs/observer/STATUS.md b/docs/observer/STATUS.md index bbc35b1c..898a83a5 100644 --- a/docs/observer/STATUS.md +++ b/docs/observer/STATUS.md @@ -1,6 +1,6 @@ # Brain Status (auto-generated) -Last updated: 2026-05-22T16:05:00.709Z +Last updated: 2026-05-22T16:47:17.889Z | Контролёр | Состояние | Детали | |---|---|---| @@ -8,15 +8,15 @@ Last updated: 2026-05-22T16:05:00.709Z | C2 Cross-ref consistency | ✅ | [cross-ref-checker] OK — 0 drift in 4 files | | C3 Observer-of-observer | ✅ | [observer-of-observer] OK — last read 0 week(s) ago | | C4 Сигнальный статус | ✅ | This file (self-reference) | -| C5 Observer-coverage | ⚠️ | 79 episode(s) this month · Stop-hook + post-commit OK · 29 missed activation(s) — see /brain-retro | +| C5 Observer-coverage | ⚠️ | 84 episode(s) this month · Stop-hook + post-commit OK · 30 missed activation(s) — see /brain-retro | | C6 Chain map sync | 🔴 | В .md есть цепочки без записи в JSON: L16 — добавьте узлы в tools/observer-chain-map.json | ## Метрики (информационные, не алерты) -- Observer evidence: 79 episodes this month, 0 observer_error markers, 10 PII matches before filter +- Observer evidence: 84 episodes this month, 0 observer_error markers, 14 PII matches before filter - Legacy v1 episodes (not in factor analysis): 5 - Last /brain-retro: 3 day(s) ago -- Использование узлов: см. `/brain-retro` (раз в спринт). missed_activations: 29. **Неиспользованные узлы — не алерт, если профильной задачи не было** (Pravila §16.4 v1.36; capability-readiness; см. memory `feedback_brain_unused_tools_not_problem` — outside-repo memory store). +- Использование узлов: см. `/brain-retro` (раз в спринт). missed_activations: 30. **Неиспользованные узлы — не алерт, если профильной задачи не было** (Pravila §16.4 v1.36; capability-readiness; см. memory `feedback_brain_unused_tools_not_problem` — outside-repo memory store). ## Алерт-индикаторы