From 37c68a4d9aea5ad77c0b71ea16394d6269f13f0b Mon Sep 17 00:00:00 2001 From: Arthur Ria Date: Tue, 25 Aug 2026 09:35:37 +0200 Subject: [PATCH] =?UTF-8?q?R=C3=A9vision=20lot=202=20:=20valid=C3=A9=20;?= =?UTF-8?q?=20log=20du=20resolver=20corrig=C3=A9,=20concurrence=20des=20ap?= =?UTF-8?q?pels=20consign=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les vérifications attendues des quatre correctifs ont été rejouées via le protocole et passent toutes : résolution Container/Alias/Item (échec avant tout POST, 6 GET seulement), rejet des paramètres inconnus et requis manquants, garde-fous get_workflow_details/search_logs, corps STS dans les erreurs d'auth sans fuite de credential. Contrôle latéral séquentiel : la bascule EUROTRAFIC reconstruit bien la table par tenant (280 entités, 7 applications, contre 288/5 sur LIMAGRAIN). Trivialité corrigée : tableNames.size (undefined sur un tableau) -> .length dans le log de chargement du resolver. Découverte de révision consignée en point ouvert : le serveur traite les tools/call en concurrence, une bascule de profil pendant des appels en vol les fait partir sur le nouveau profil. Co-Authored-By: Claude Fable 5 --- ROADMAP.md | 11 +++++++++++ src/services/entity-resolver.js | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ROADMAP.md b/ROADMAP.md index 31baf83..7fda16a 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -185,6 +185,17 @@ plus riche que `/AD/api/Application/GetAll`), `GET /healthcheck?tenantCode=` et retirer le profil) — pas un bug du code. Depuis L3.2, le corps de la réponse du STS (`Tenant not found`) remonte dans les erreurs d'outils et du smoke test. +- **Bascule de profil concurrente aux appels en vol** (mesuré le 25/08/2026, + révision du lot 2). Le serveur traite les `tools/call` **en concurrence** : + en envoyant une rafale de requêtes dans une même session, les réponses + reviennent dans le désordre, et un `switch_wms_profile` émis pendant que des + requêtes sont en vol les fait partir sur le nouveau profil (observé : une + requête destinée à EUROTRAFIC exécutée sur l'hôte `10.255.255.2` après la + bascule suivante). Conséquence du singleton d'état global (D8). Sans gravité + pour un usage conversationnel séquentiel, mais Claude peut émettre des appels + d'outils **en parallèle** : à traiter si un cas réel de mélange de profils + est observé (piste : sérialiser les `tools/call` ou figer le profil résolu au + début de chaque appel). - **`select_expression`** : les projections via le paramètre `Select` provoquent des erreurs de compilation côté serveur (D13). Irritant principal restant. - **Déploiement SSH sur la VM** : l'exécutable est validé, la configuration SSH diff --git a/src/services/entity-resolver.js b/src/services/entity-resolver.js index bc8bc2a..b8c167a 100644 --- a/src/services/entity-resolver.js +++ b/src/services/entity-resolver.js @@ -70,7 +70,7 @@ async function loadResolutionMap() { resolutionMap = map; tableNames = Array.from(names).sort(); cacheTimestamp = Date.now(); - console.error(`[EntityResolver] Cached ${tableNames.size} entities from ${appNames.length} application(s)`); + console.error(`[EntityResolver] Cached ${tableNames.length} entities from ${appNames.length} application(s)`); } /**