L2.1 : résout entity_type via l'API Metadata (D21)
Context.{entity_type} attend le TableName du Metadata, pas le nom
d'entité de l'AD (Container -> Containers, mais Alias -> Alias) : un nom
faux partait en HTTP 500 de compilation LINQ. Nouveau service
entity-resolver.js : table Name|TableName (insensible à la casse) ->
TableName, agrégée sur les applications déployées (via
GET /configuration/applications — les applications sans contexte
requêtable n'y figurent pas et n'apportent 0 entité Metadata), cache TTL
partagé, invalidation par onSwitch (D8). Branché dans wms-query-service
(query/count/schema/search) et call_query_api.
Nom inconnu -> échec avant tout appel réseau de requête, suggestions
proches + renvoi vers get_entity_metadata. Metadata injoignable -> le
nom passe tel quel avec un warning dans la réponse.
Mesures (LIMAGRAIN, via le protocole) :
- query_wms_entities("Container", limit 1) -> succès, 1 ligne, résolu
Containers
- query_wms_entities("Alias") -> succès, invariant (pas de pluriel)
- query_wms_entities("Item") -> "Item" n'existe pas dans le modèle
Reading. Proches : RFMenuItems, Sites. 288 entités disponibles —
aucune ligne [API] POST dans stderr
- count_wms_entities("Product") -> 51160
- get_entity_schema("Container") et call_query_api("Container") : mêmes
résolutions
- 288 TableName distincts sur 5 applications, aucun conflit
Name -> TableName (mesuré le 24/08/2026)
Docs : D21 dans DECISIONS.md ; CLAUDE.md (piège retiré des points
ouverts, liste d'entités corrigée Aliases -> Alias, entity-resolver dans
la structure) ; exemple singulier/pluriel dans wms://query-examples ;
ROADMAP allégée (cause racine + L2.1 + L3.3 livrés).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -60,6 +60,7 @@ src/
|
||||
│ └── logs.js logs://guide — patterns d'erreur et scénarios de debug
|
||||
├── services/ Logique métier
|
||||
│ ├── api-service.js OAuth + client HTTP + helpers de requête (singleton)
|
||||
│ ├── entity-resolver.js Résolution Name|TableName -> TableName (D21)
|
||||
│ ├── workflow-service.js Workflows, lazy loading + cache
|
||||
│ ├── ad-service.js Application Dictionary, 20 types, cache par type
|
||||
│ ├── wms-query-service.js Construction d'expressions LINQ
|
||||
@@ -219,11 +220,14 @@ Autres règles :
|
||||
|
||||
## Entités et éléments AD
|
||||
|
||||
**Entités interrogeables** (Query API) : `Products`, `Containers`, `Accounts`,
|
||||
`Suppliers`, `Kits`, `Aliases`, `Tasks`, `Stocks`, `ProductLocations`,
|
||||
`InboundOrders`, `Receptions`, `OutboundOrders`. La liste faisant foi s'obtient
|
||||
par `get_entity_metadata` (API Metadata) — le catalogue de la resource
|
||||
`wms://entities` est un raccourci de confort, pas la référence.
|
||||
**Entités interrogeables** (Query API) : `entity_type` accepte le nom d'entité
|
||||
AD (`Container`) ou le `TableName` (`Containers`), insensible à la casse — la
|
||||
résolution passe par `entity-resolver.js` (D21). Courantes : `Products`,
|
||||
`Containers`, `Accounts`, `Suppliers`, `Kits`, `Alias` (invariant, pas de
|
||||
pluriel), `Tasks`, `Stocks`, `ProductLocations`, `InboundOrders`, `Receptions`,
|
||||
`OutboundOrders`. La liste faisant foi (288 entités, toutes applications
|
||||
confondues) s'obtient par `get_entity_metadata` (API Metadata) — le catalogue
|
||||
de la resource `wms://entities` est un raccourci de confort, pas la référence.
|
||||
|
||||
**Application Dictionary** : 20 types, ~38 800 éléments. `Resource` (29 374) est
|
||||
de loin le plus lourd ; 3 types sont valides mais vides (`Dashboard`,
|
||||
@@ -278,14 +282,5 @@ printf '%s\n%s\n%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"
|
||||
|
||||
## Points ouverts
|
||||
|
||||
Voir [ROADMAP.md](ROADMAP.md) : lots de correction planifiés, cause racine
|
||||
commune (résolution `Name` -> `TableName` des entités), et propositions
|
||||
Voir [ROADMAP.md](ROADMAP.md) : lots de correction planifiés et propositions
|
||||
explicitement écartées.
|
||||
|
||||
⚠️ Piège connu et non encore corrigé, à garder en tête en attendant le lot 2 :
|
||||
|
||||
- `entity_type` est interpolé sans validation dans `Context.{entity_type}`. Le
|
||||
nom attendu est le `TableName` de l'API Metadata, pas le nom d'entité de l'AD
|
||||
(`Container` -> `Containers`, mais `Alias` -> `Alias`). Un mauvais nom donne un
|
||||
HTTP 500 — dont le détail (erreur de compilation LINQ) remonte désormais dans
|
||||
la réponse de l'outil (L1.1).
|
||||
|
||||
Reference in New Issue
Block a user