0e27844a28
Tier 1 → классификация исключения → ярус 2 (плейсхолдер) / ярус 3 (queue). Без портального dedup (см. Task 5). Без реального Tier 2 (см. Task 7). Матрица эскалации: - Tier 1 success → return id - WindowDeferredException → re-throw (операция переносится, без queue/alert) - SupplierTransientException → сразу Tier 3 (skip Tier 2 — хост недоступен) - SupplierClient/AuthException → Tier 2; success → failover_to_form alert; fail → Tier 3 queue + manual_required alert + TierEscalatedException - escalateToTier3 пишет supplier_manual_sync_queue + queue'ит критический alert. 6 тестов матрицы эскалации зелёные (17 assertions). Spec §4.4, §6, §8. Task 4 of 12. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
17 lines
622 B
PHP
17 lines
622 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Services\Supplier\Channel\Exceptions;
|
|
|
|
/**
|
|
* Маркер «портал отказал по причине окна редактирования» (22:00-00:00 МСК).
|
|
*
|
|
* НЕ сбой канала — операция переносится. FailoverProjectChannel пропускает
|
|
* эскалацию ярусов и не пишет в supplier_manual_sync_queue. Job-уровень
|
|
* получает исключение и помечает попытку как deferred.
|
|
*
|
|
* Spec §8.
|
|
*/
|
|
final class WindowDeferredException extends \RuntimeException {}
|