diff --git a/docs/superpowers/plans/2026-05-19-supplier-project-channel-failover.md b/docs/superpowers/plans/2026-05-19-supplier-project-channel-failover.md index c82744e0..ec63c128 100644 --- a/docs/superpowers/plans/2026-05-19-supplier-project-channel-failover.md +++ b/docs/superpowers/plans/2026-05-19-supplier-project-channel-failover.md @@ -99,7 +99,7 @@ cd app && composer test -- --parallel - [ ] **Step 1.3: Зафиксировать наблюдения в комментариях `SupplierPortalClient.php`.** -Заменить placeholder-докблок [SupplierPortalClient.php:24-28](app/app/Services/Supplier/SupplierPortalClient.php#L24-L28): +Заменить placeholder-докблок [SupplierPortalClient.php:24-28](../../../app/app/Services/Supplier/SupplierPortalClient.php#L24-L28): ```php /** @@ -124,10 +124,10 @@ cd app && composer test -- --parallel Если recon показал, что endpoints/payload-shape ОТЛИЧАЕТСЯ от placeholder: -- В `request()` вызовах ([SupplierPortalClient.php:105](app/app/Services/Supplier/SupplierPortalClient.php#L105), [.php:112](app/app/Services/Supplier/SupplierPortalClient.php#L112), [.php:120](app/app/Services/Supplier/SupplierPortalClient.php#L120), [.php:98](app/app/Services/Supplier/SupplierPortalClient.php#L98)) заменить пути на реальные. -- В `toPayload()` ([.php:346-358](app/app/Services/Supplier/SupplierPortalClient.php#L346-L358)) заменить ключи/формат полей на реальные. -- Если ответ JSON структурно отличается (`id` не в корне) — поправить путь извлечения в `saveProject()` ([.php:107](app/app/Services/Supplier/SupplierPortalClient.php#L107)). -- Если запрос JSON, а не form-urlencoded — добавить `asJson` параметр (паттерн уже есть для `save-report`, [.php:237-262](app/app/Services/Supplier/SupplierPortalClient.php#L237-L262)). +- В `request()` вызовах ([SupplierPortalClient.php:105](../../../app/app/Services/Supplier/SupplierPortalClient.php#L105), [.php:112](../../../app/app/Services/Supplier/SupplierPortalClient.php#L112), [.php:120](../../../app/app/Services/Supplier/SupplierPortalClient.php#L120), [.php:98](../../../app/app/Services/Supplier/SupplierPortalClient.php#L98)) заменить пути на реальные. +- В `toPayload()` ([.php:346-358](../../../app/app/Services/Supplier/SupplierPortalClient.php#L346-L358)) заменить ключи/формат полей на реальные. +- Если ответ JSON структурно отличается (`id` не в корне) — поправить путь извлечения в `saveProject()` ([.php:107](../../../app/app/Services/Supplier/SupplierPortalClient.php#L107)). +- Если запрос JSON, а не form-urlencoded — добавить `asJson` параметр (паттерн уже есть для `save-report`, [.php:237-262](../../../app/app/Services/Supplier/SupplierPortalClient.php#L237-L262)). Если контракт ИДЕНТИЧЕН placeholder — никаких правок кода, только убрать «placeholder» из докблока. @@ -1164,7 +1164,7 @@ cd "C:/моя/проекты/портал crm/Документация" grep -n "alertType\|details" app/app/Mail/SupplierCriticalAlertMail.php ``` -Expected: constructor берёт `alertType` и `details` (паттерн из [SyncSupplierProjectsJob.php:88-103](app/app/Jobs/Supplier/SyncSupplierProjectsJob.php#L88-L103)). Если конструктор другой — адаптировать вызовы в Step 4.5. +Expected: constructor берёт `alertType` и `details` (паттерн из [SyncSupplierProjectsJob.php:88-103](../../../app/app/Jobs/Supplier/SyncSupplierProjectsJob.php#L88-L103)). Если конструктор другой — адаптировать вызовы в Step 4.5. - [ ] **Step 4.7: Run test — PASS.** @@ -1909,7 +1909,7 @@ Co-Authored-By: Claude Opus 4.7 (1M context) " В `app/app/Jobs/SyncSupplierProjectJob.php` заменить `handle()`: -Было ([SyncSupplierProjectJob.php:42-62](app/app/Jobs/SyncSupplierProjectJob.php#L42-L62)): +Было ([SyncSupplierProjectJob.php:42-62](../../../app/app/Jobs/SyncSupplierProjectJob.php#L42-L62)): ```php public function handle(SupplierPortalClient $client): void @@ -1970,7 +1970,7 @@ private function buildDto(Project $project, string $platform, string $uniqueKey) - [ ] **Step 8.2: Update `SyncSupplierProjectsJob` (plural).** -В `app/app/Jobs/Supplier/SyncSupplierProjectsJob.php` ([SyncSupplierProjectsJob.php:66](app/app/Jobs/Supplier/SyncSupplierProjectsJob.php#L66)): +В `app/app/Jobs/Supplier/SyncSupplierProjectsJob.php` ([SyncSupplierProjectsJob.php:66](../../../app/app/Jobs/Supplier/SyncSupplierProjectsJob.php#L66)): Было: @@ -1990,9 +1990,9 @@ public function handle(?\App\Services\Supplier\Channel\SupplierProjectChannel $c Добавить свойство `private \App\Services\Supplier\Channel\SupplierProjectChannel $channel;`. -В `syncOne()` ([SyncSupplierProjectsJob.php:118-185](app/app/Jobs/Supplier/SyncSupplierProjectsJob.php#L118-L185)) заменить прямые вызовы на channel: +В `syncOne()` ([SyncSupplierProjectsJob.php:118-185](../../../app/app/Jobs/Supplier/SyncSupplierProjectsJob.php#L118-L185)) заменить прямые вызовы на channel: -Было ([:159](app/app/Jobs/Supplier/SyncSupplierProjectsJob.php#L159), [:169](app/app/Jobs/Supplier/SyncSupplierProjectsJob.php#L169)): +Было ([:159](../../../app/app/Jobs/Supplier/SyncSupplierProjectsJob.php#L159), [:169](../../../app/app/Jobs/Supplier/SyncSupplierProjectsJob.php#L169)): ```php $externalId = $client->saveProject($allocation); @@ -2020,7 +2020,7 @@ if ($isCreate) { } ``` -Добавить catch'и в основной цикл ([:87-114](app/app/Jobs/Supplier/SyncSupplierProjectsJob.php#L87-L114)): +Добавить catch'и в основной цикл ([:87-114](../../../app/app/Jobs/Supplier/SyncSupplierProjectsJob.php#L87-L114)): ```php catch (\App\Services\Supplier\Channel\Exceptions\TierEscalatedException $e) { @@ -2077,7 +2077,7 @@ Co-Authored-By: Claude Opus 4.7 (1M context) " **Files:** -- Modify: `app/routes/console.php` ([:45-50](app/routes/console.php#L45-L50)). +- Modify: `app/routes/console.php` ([:45-50](../../../app/routes/console.php#L45-L50)). - Create: `app/tests/Feature/Schedule/SupplierScheduleTest.php`. - [ ] **Step 9.1: Write failing test.** @@ -2130,7 +2130,7 @@ Expected: FAIL — текущее расписание 20:30 / 20:15. - [ ] **Step 9.3: Edit `app/routes/console.php`.** -Заменить ([routes/console.php:45-50](app/routes/console.php#L45-L50)): +Заменить ([routes/console.php:45-50](../../../app/routes/console.php#L45-L50)): ```php Schedule::job(new RefreshSupplierSessionJob)