L4.1 : expose query_type sur les outils de requête (D25)
QueryType était figé à 0 en dur dans executeQuery/executeScalarQuery : le modèle Writing, opérationnel et mesuré, était inatteignable. Paramètre query_type (défaut 0) sur call_query_api, query_wms_entities, count_wms_entities — get_entity_schema et search_wms_data restent des raccourcis Reading. D3 reste la règle par défaut : la bascule est un opt-in, avertie dans les descriptions d'outils (statuts en énumérations en Writing). Garde de valeur assertValidQueryType dans le code (le wrapper D23 ne valide pas les valeurs), avant tout réseau. En query_type != 0, un nom inconnu du Metadata Reading passe tel quel avec warning (allowUnknown du resolver) — conservé aussi dans la réponse d'erreur si le WMS échoue ensuite. Acté en D25 ; CLAUDE.md nuancé, L4.1 retiré de la ROADMAP (reliquat : exploration Metrics, rapport à part). Vérifications rejouées via le protocole (LIMAGRAIN / LIMAGRAI2512) : - call_query_api(Products, query_type:1, limit:1) -> success, 1 ligne, queryType:1 dans la réponse. - call_query_api(Products, query_type:3) -> erreur structurée contenant 'ApplicationMetricDataContext' ne contient pas de définition pour 'Products'. - call_query_api(Products, query_type:7) -> erreur locale nommant les 4 contextes, aucun [API] POST/GET dans stderr. - query_wms_entities(Container, limit:1) sans query_type -> comportement inchangé (resolvedTableName Containers, Reading, pas de champ queryType). - call_query_api(FooBar123, query_type:1) -> transmis tel quel (payload QueryType:1 Expression Context.FooBar123...), erreur WMS ApplicationWritingRepository + warning de résolution dans la réponse. - count_wms_entities(Product, query_type:1) -> count 51145 (~51160). Baseline : tools/list 23, resources 6, rejet D23 d'un paramètre inconnu OK. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -480,3 +480,42 @@ Deux garde-fous de cadrage :
|
||||
Au passage, `totalParameters` a changé de sens : c'était le nombre brut
|
||||
d'entités `Parameter` chargées, c'est désormais le total correspondant aux
|
||||
filtres avant pagination (identique sans filtre).
|
||||
|
||||
---
|
||||
|
||||
## D25 — `query_type` : opt-in explicite, D3 reste la règle par défaut
|
||||
|
||||
**Contexte (mesures des 24-25/08/2026, `LIMAGRAI2512`).** `QueryType` était
|
||||
figé à `0` en dur dans `executeQuery()` et `executeScalarQuery()`, rendant le
|
||||
modèle Writing — opérationnel et mesuré (`Context.Products` en `QueryType: 1`
|
||||
répond) — inatteignable.
|
||||
|
||||
**Décision.** Un paramètre `query_type` (entier, défaut `0`) est exposé sur
|
||||
**trois outils** : `call_query_api`, `query_wms_entities`,
|
||||
`count_wms_entities`. `get_entity_schema` et `search_wms_data` restent des
|
||||
raccourcis Reading, sans paramètre.
|
||||
|
||||
**Rapport à D3.** D3 n'est pas révisée : le Reading reste la règle par défaut,
|
||||
car en Writing les statuts sont des **énumérations** — les comparaisons de
|
||||
chaînes (`== "Release"`), cas le plus courant en debug, y échouent. La bascule
|
||||
est un opt-in explicite et les descriptions d'outils portent l'avertissement.
|
||||
|
||||
Modalités :
|
||||
|
||||
- **Garde de valeur dans le code de l'outil**, pas dans le wrapper : D23 valide
|
||||
les noms de paramètres, pas les valeurs. Hors `0..3` (ou non entier) →
|
||||
erreur locale via `assertValidQueryType()` (`wms-query-service.js`), **avant
|
||||
tout appel réseau**, nommant les quatre contextes.
|
||||
- **`2` et `3` sont transmis tels quels** : le WMS répond et son diagnostic
|
||||
remonte entier (L1.1). Sur `LIMAGRAI2512` : `2` = DataWarehouse non configuré
|
||||
(`Could not resolve serviceType 'IDataWarehouse…'`), `3` = Metrics, contexte
|
||||
présent mais modèle distinct (`'ApplicationMetricDataContext' ne contient pas
|
||||
de définition pour 'Products'`).
|
||||
- **Interaction avec le resolver (D21)** : la table de résolution est
|
||||
construite sur le Metadata **Reading**. Quand `query_type != 0`, un nom qui
|
||||
se résout se résout normalement (`Products` marche en Writing, mesuré) ; un
|
||||
nom **inconnu** du Reading n'est **pas** bloqué — il passe tel quel avec un
|
||||
`warning` dans la réponse (`allowUnknown` du resolver, même mécanique que le
|
||||
repli « Metadata injoignable »), car le modèle Writing/Metrics peut contenir
|
||||
des entités hors Reading. Le `warning` est conservé aussi dans la réponse
|
||||
d'erreur si le WMS échoue ensuite.
|
||||
|
||||
Reference in New Issue
Block a user