L2.3 : garde-fous get_workflow_details et search_logs

Deux anomalies préexistantes au lot 1, mesurées le 24/08/2026 :

- get_workflow_details({}) renvoyait success: true avec le premier
  workflow du cache : getWorkflowDetails() comparait w.Id/w.Code/w.Name,
  clés qui n'existent pas sur les objets AD réels (minuscules, D5) —
  undefined === undefined matchait. Clés mortes supprimées (id et name
  seuls existent, les parseInt sur des GUID étaient morts aussi), garde
  d'entrée rejetant workflow_id absent avec renvoi vers search_workflows.
- search_logs({}) plantait en "Cannot read properties of undefined
  (reading 'toLowerCase')" : garde d'entrée nommant "keyword" avec un
  exemple d'appel.

Le wrapper D23 rejette déjà ces appels via required — les gardes côté
code restent, la validation SDK n'étant pas garantie pour les appelants
directs des services.

Mesures :
- via le protocole, les deux appels {} -> "Paramètre(s) requis
  manquant(s) pour ... " (wrapper D23)
- gardes appelées en direct (sans wrapper) :
  getWorkflowDetails(undefined) jette "workflow_id est requis (id ou nom
  exact du workflow)..." ; search_logs({}) répond success: false avec le
  message nommant keyword
- get_workflow_details avec un id réel (2e workflow du cache, pas le
  premier) -> objet brut complet ($id, validFrom, ..., data), id/name
  conformes à la recherche

ROADMAP : L2.3 retirée, lot 2 soldé.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Arthur Ria
2026-08-24 17:34:38 +02:00
parent 5386f54922
commit 97ab56f928
3 changed files with 19 additions and 31 deletions
+3 -23
View File
@@ -12,31 +12,11 @@ contient que ce qui reste à faire.
---
## Lot 2 — Correctif de fond
La cause racine commune du lot (résolution `Name` -> `TableName` via l'API
Metadata) est livrée — la règle et ses mesures vivent en **D21**.
### L2.3 — Arguments manquants : deux garde-fous
Découverts lors de la révision du lot 1 (24/08/2026), en bouclant sur les 23
outils avec des arguments vides. Préexistants au lot 1 (vérifié sur le diff) :
- `get_workflow_details` sans `workflow_id` renvoie `success: true` avec **le
premier workflow du cache**. Cause : `getWorkflowDetails()`
(`workflow-service.js`) compare `w.Code === workflowId` — or `Code`, `Id`,
`Name` n'existent pas sur les objets réels (clés minuscules, D5), donc
`undefined === undefined` matche. Supprimer les clés mortes de la
comparaison et rejeter un `workflow_id` absent avec un message actionnable.
- `search_logs` sans terme de recherche renvoie
`Search failed: Cannot read properties of undefined (reading 'toLowerCase')`
— le contrat d'erreur tient, mais le message viole la convention 4
(actionnable). Garde d'entrée avec le nom du paramètre attendu.
---
## Lot 3 — Ergonomie et documentation
Le lot 2 (résolution `Name` -> `TableName`, rejet des paramètres inconnus,
garde-fous d'arguments manquants) est livré — voir **D21** et **D23**.
### L3.1 — Bornage des sorties volumineuses
- `get_system_parameters` : ajouter `limit` / `offset`, aujourd'hui absents