metallkart-erp/docs/diagnostics/SPEC-TEST-SUPERVISOR-10-CASES-RAPPORT.md
louis 11cc64698e test(supervisor): 10/10 detectors validated + cleanup complete
Seed 10 tagged cases (D1-D10), triggered via admin route in digest
mode: 10 AgentAction EXECUTED, 25 NotificationDelivery across 4
channels (ERP_IN_APP/PWA_PUSH/TELEGRAM/EMAIL). Escalation chain
validated. All test data cleaned up (81 rows deleted, 0 remaining).
Override function kept for future test runs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-29 02:26:35 +04:00

5.6 KiB

SPEC-TEST-SUPERVISOR-10-CASES — Rapport Final

Date : 28-29/05/2026 (Session 147) Tag : TEST-SUPERVISOR-280526 Statut : COMPLETE — 10/10 detectors valides, cleanup termine


1. Resume executif

Les 10 detectors supervisor (D1-D10) fonctionnent end-to-end. 10 cas test ont ete seedes, le trigger a produit 10 AgentAction EXECUTED, et le router a dispatche 25 NotificationDelivery sur 4 canaux (ERP_IN_APP, PWA_PUSH, TELEGRAM, EMAIL). Louis a recu 5 messages Telegram via le bot Август. L'escalation multi-canal fonctionne comme concu. Cleanup integralement verifie (0 rows restantes).


2. Phase 1 — Preparation

Override : Fonction getTestOverrideUserId() dans supervisor.cron.ts — route tous les reminders vers Louis quand SUPERVISOR_TEST_TARGET_USER_ID + SUPERVISOR_TEST_TAG sont set.

Route admin : POST /api/v1/admin/agent/supervisor/trigger-now avec body {"mode":"digest"} pour forcer le mode digest (toutes anomalies, pas juste top 1).

Soak initial : T+17h, verdict SOAK OK (7 deliveries, 0% failure, 123ms latence).


3. Phase 2 — Seed 10 cas

# Detector Objet cree ID Stagnation
D1 Order AWAITING_ESTIMATE sans smeta Order #26 createdAt -3j
D2 Smeta FINANCIAL_REVIEW Order+Smeta #27+#16 submittedAt -3j
D3 Order LAUNCHED sans smeta approuvee Order+Smeta DRAFT #28 statusHistory -4j
D4 Tender DRAFT stale Tender #4 createdAt -3j
D5 Tender SENT sans offres Tender #5 updatedAt -4j
D6 PO DRAFT non confirme PO #4 createdAt -3j
D7 PO CONFIRMED sans email PO #5 updatedAt -3j
D8 PO SENT depasse livraison PO #6 expectedDeliveryDate -5j
D9 SDN DRAFT non signe SDN #2 createdAt -3j
D10 ClientInstallment echeance depassee Installment #1 dueDate -10j

Inventaire : 24 rows taguees (10 orders, 2 smetas, 2 PRs, 2 tenders, 3 POs, 1 SDN, 1 invoice, 1 installment, 1 client, 1 supplier).


4. Phase 3 — Trigger + observation

Premier run (pinch mode, 20:48 UTC)

  • 1 REMINDER_SENT dispatche (mode pinch = top 1 seulement)
  • Status: FAILED — Handler "REMINDER_SENT" not found in registry
  • Cause: le script externe creait un AgentRuntime SANS registerAllHandlers()

Fix et second run via route admin (digest mode, 20:52 UTC)

  • 10 REMINDER_SENT EXECUTED
  • Route POST /admin/agent/supervisor/trigger-now avec {"mode":"digest"}
  • Override actif: tous routes vers Louis

Deliveries resultantes (25 total)

Canal Count Status Detail
ERP_IN_APP 10 5 SENT + 5 PENDING Premier canal, toujours disponible
PWA_PUSH 5 5 SENT Escalation depuis ERP_IN_APP non-acquitte
TELEGRAM 5 5 SENT Escalation depuis PWA_PUSH non-acquitte
EMAIL 5 5 EXPIRED Escalation depuis TELEGRAM, SMTP timeout

Observation cle : l'escalation fonctionne — ERP_IN_APP → PWA_PUSH → TELEGRAM → EMAIL. 5 des 10 ont ete acquittes en ERP_IN_APP avant d'escalader, d'ou 5 (pas 10) sur les canaux suivants.


5. Phase 4 — Validation Louis

Louis a confirme la reception de 5 messages Telegram via le bot Август. Les messages sont en russe formel, avec tonalite appropriee ("Хотим мягко обратить ваше внимание", "Обращаем ваше внимание").


6. Phase 5 — Cleanup

Etape Rows supprimees
NotificationDelivery 25
AgentEngagement 10
AgentAuditLog 10
AgentAction 10
ClientInstallment 1
ClientInvoice 1
SupplierDeliveryNote 1
PurchaseOrder 3
PurchaseRequirement 2
Tender 2
Smeta 2
OrderStatusHistory 2
Order 10
Client 1
Supplier 1
TOTAL 81

Verification : COUNT(*) WHERE tag = 0 sur toutes les tables. Confirme.

Env vars : SUPERVISOR_TEST_TARGET_USER_ID et SUPERVISOR_TEST_TAG supprimes. ROUTER_USE_FOR_SUPERVISOR=true conserve (soak).

Restart final : T0 nouveau soak = 22:25 UTC 28/05 (01:25 MSK 29/05). Backend clean, handlers enregistres, pas de test override.


7. Observations qualitatives

  • Escalation multi-canal fonctionne : la chaine ERP_IN_APP → PWA_PUSH → TELEGRAM → EMAIL est validee en prod staging
  • Mode pinch vs digest : en dehors des heures 8-9 MSK, seul le top 1 est dispatche — c'est voulu mais merite une note dans la doc utilisateur
  • EMAIL EXPIRED : les 5 emails ont timeout (SMTP Beget). Dette connue, pas de regression
  • PWA_PUSH SENT mais invisible : Edge/WNS bloque (confirme dans la spec precedente), Chrome OK
  • Anti-doublon 2h : fonctionne correctement — le premier run pinch n'a pas bloque le second run digest car le premier avait status FAILED
  • Tonalite : appropriee pour un premier rappel (tone "soft"), en russe formel avec "вы"

8. Recommandations

Priorite Item Description
P1 SEED-STAGING-FUNNEL Enrichir le seed staging avec des donnees a chaque etape du funnel pour que le supervisor ait matiere a detecter en conditions reelles
P2 EMAIL-SMTP-FIX Investiguer pourquoi les emails EXPIRED (timeout SMTP Beget). Probablement meme cause que le bug IMAP connu
P2 D11-D12-PR-STALE Ajouter detectors pour PRs DRAFT > N jours et PRs CONFIRMED > N jours sans tender
P3 TRIGGER-NOW-KEEP Garder la route admin supervisor/trigger-now en production (utile pour debug et validation)
P3 WNS-EDGE-FIX Investiguer pourquoi WNS rejette pushManager.subscribe() sur la machine Louis (service WpnService)