Aller au contenu principal

ADR-0192 : Navin Enterprise Agent HSE et conformité, couche produit HSE au-dessus du Control Plane

  • Statut : proposé
  • Date : 2026-11-04
  • Références : agent_uses_cases/10_Industrie_HSE_Conformite.md, .navin/continuity/DECISIONS.md (identités UC-06 à UC-10, gabarits de 40 caractères au plus, frontend unique), ADR-0176 (modules génériques copiés), ADR-0181 (agent courtier, motif de référence), paquet OPA eai.industrie_hse, contrats industrie-hse-copilot-event et industrie-hse-action-request, gabarit Manager navin-industrie-hse-agent (published: false).

Contexte​

Un site industriel veut analyser incidents, inspections et exigences applicables, repérer risques et écarts puis suivre les mesures correctives avec responsables, preuves et validation par les professionnels HSE. Le cahier des charges impose huit modules (risques, incidents, inspections, obligations, analyse des causes, actions, mesures et habilitations, vérification et reporting), trois machines à états explicites côté serveur (incident, inspection, obligation) avec 409 sur toute transition interdite, et des interdits absolus : le modèle ne déclare jamais une conformité, ne clôt jamais un incident ni une action, ne dépose jamais une déclaration réglementaire et n'accorde jamais un permis. Une mesure environnementale est un indicateur, jamais une conclusion.

Décision​

  1. Produit industrie-hse, dossier navin-enterprise-industrie-hse/, paquet Python navin_hse, préfixe /api/v1/industrie-hse, ports de développement 3483 / 8482 / 6403, schéma PostgreSQL hse.
  2. Backend FastAPI dérivé par copie des modules génériques de l'agent courtier (gateway d'actions, travaux, worker, session RLS, audit, i18n, observabilité, connecteurs) en ne changeant que le nom du paquet ; seuls les modules métier sont écrits.
  3. Toute écriture passe par l'Action Gateway (Idempotency-Key, If-Match, maker-checker pour les opérations sensibles, confirmation de la source EHS/ERP/GMAO, état unknown_pending_confirmation puis relecture). Aucun statut closed local d'une action corrective n'est posé sans la confirmation du système source.
  4. Les machines à états sont des données versionnées ; les transitions de clôture et d'efficacité exigent un second humain distinct de l'auteur.
  5. Une comparaison de mesure à une limite n'est faite que si unité, durée de moyenne et méthode sont équivalentes ; sinon le résultat est not_comparable, jamais une conclusion.
  6. Politiques : OPA eai.industrie_hse (matrice de délégation, opérations à second humain) et types OpenFGA additifs ; pas d'interface propre, le manifeste produit est l'interface du frontend commun.
  7. Le gabarit Manager reste prepared et published: false, jamais écrit sous navin-manager/catalog.

Conséquences​

  • Les connecteurs sont exercés en bac à sable déterministe ; aucune confirmation simulée n'est présentée comme celle de la source réelle.
  • Les données médicales et l'identité des témoins sont cloisonnées et absentes des tableaux de bord généraux.
  • L'extraction ultérieure des modules génériques en bibliothèque commune reste mécanique.