Files
portal/docs/observer/STATUS.md
T
Дмитрий 1be2d62f9e feat(supplier): group recompute + pause + source-change + root auto-link
Закрывает замечания заказчика (22.05.2026) по проектам/поставщику. Все 4 куска
имеют общий корень: online-синхронизация одного проекта работала с данными ЭТОГО
проекта, а не пересчитывала всю «группу» (проекты разных tenant'ов с одним
identifier) — отсюда переплата ×3 при изменении лимита, затирание регионов/дней
группы, неотправленная пауза, и осиротевшие проекты при смене источника.

1. Групповой пересчёт в SyncSupplierProjectJob::handleOnline (#1 при изменении,
   #2 дни, #3 регионы, C2/C3): union regions, computeOrder eligible,
   distributeForPlatform — те же расчёты, что в ночном syncGroup. Online и
   ночной теперь дают идентичный supplier-state, расхождение устранено.

2. Пауза #10:
   - ProjectController::toggleActive — диспатчит SyncSupplierProjectJob;
   - ProjectService::bulkPauseResume — диспатчит sync per project;
   - DTO status вычисляется из groupActive (paused когда группа без активных);
   - sp.inactive_since пишется при пересинке (для UI/DTO консистентности).

3. Смена источника #8/#9 в ProjectService::update:
   - до update снимается старый buildUniqueKeyAgnostic;
   - если изменился — отвязываем старые supplier_projects от этого project
     (pivot + legacy FK), DeleteSupplierProjectJob удаляет их у поставщика
     при отсутствии других потребителей, либо пересинкает агрегат.

4. Перенос auto-link корня из feat/root-domain-auto-link: новый
   App\Support\SupplierIdentifier::extractRootDomain + блоки auto-link в
   обоих джобах (online + nightly).

Тесты: TDD на каждый кусок. SyncSupplierProjectJobTest +2 (group recompute,
pause). ProjectUpdateDedupTest +1 (source detach + cleanup dispatch).
ProjectsActionsTest +2 (toggle + bulk pause dispatches).

Регрессия: 186/186 passed (Project/Plan5/Projects + Supplier), 502 assertions.

Деплой: дельтой на боевой (база = root-domain ветка; на боевом джобы СТАРЕЕ
main, deliver через копию изменённых файлов + config:cache + restart queue).

План: docs/superpowers/plans/2026-05-22-замечания-проекты-чеклист.md

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 16:52:30 +03:00

1.4 KiB

Brain Status (auto-generated)

Last updated: 2026-05-22T11:33:46.118Z

Контролёр Состояние Детали
C1 L1-watcher [l1-watcher] OK — 0 drift
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 ⚠️ 42 episode(s) this month · Stop-hook + post-commit OK · 16 missed activation(s) — see /brain-retro
C6 Chain map sync [chain-map-checker] OK — 15 chains in sync

Метрики (информационные, не алерты)

  • Observer evidence: 42 episodes this month, 0 observer_error markers, 5 PII matches before filter
  • Legacy v1 episodes (not in factor analysis): 5
  • Last /brain-retro: 3 day(s) ago
  • Использование узлов: см. /brain-retro (раз в спринт). missed_activations: 16. Неиспользованные узлы — не алерт, если профильной задачи не было (Pravila §16.4 v1.36; capability-readiness; см. memory feedback_brain_unused_tools_not_problem — outside-repo memory store).

Алерт-индикаторы

— норма ・ ⚠️ — внимание ・ 🔴 — действие требуется ・ — не запускалось