Liaisons
Comment une instance d'objet typé est projetée depuis une source réelle — table gérée, page de base de connaissances, tâche de flux de processus ou saisie manuelle.
Une liaison est la règle qui indique à l'ontologie comment matérialiser une instance d'objet typé à partir d'une source réelle. Les liaisons constituent le pont entre L2 (schéma) et la couche de données sous-jacente.
Projection à la lecture
Une liaison ne copie pas de lignes dans une nouvelle table :
regulated_entities (managed table)
┌─────────────────────────────────────────┐
│ EntityID │ LegalName │ RiskClass │
├─────────────────────────────────────────┤
│ e1...01 │ Acme Holdings│ medium │
│ e1...02 │ Neptune Cap. │ high │
└─────────────────────────────────────────┘
│
│ binding (silver_table)
│ columnMap:
│ id ← EntityID
│ legalName ← LegalName
│ riskClass… ← RiskClass
▼
RegulatedEntity (typed Object — projected on demand)
{ id: "e1...01", legalName: "Acme…", riskClassification: "medium" }Lorsqu'un appelant lit une RegulatedEntity, la projection de la liaison s'exécute sur la table source et retourne des instances typées. La réimportation du CSV source est répercutée à la prochaine lecture.
Types de liaisons
| Type | Source | Statut |
|---|---|---|
silver_table | Une table gérée — vos imports CSV / JSON | disponible |
memex_page | Une page de base de connaissances | aperçu |
process_flow_task | Une instance de tâche de flux de processus | disponible |
manual | Écritures via SDK / workbench — pas de source en amont | disponible |
process_flow_action, extraction, stream | Actions de lien d'entité, pipelines d'extraction, topics pub/sub | préversion |
memex_page est en aperçu parce que le noyau n'a pas encore de lecteur gouverné pour ce type :
la liaison peut être déclarée et distribuée dans une extension, mais chaque lecture d'instances
répond VALIDATION_FAILED avec details.reasonCode: "BINDING_KIND_NOT_GOVERNED", et la
disponibilité indique binding kind has no governed reader. C'est une capacité absente, pas une
panne — voir Prêt vs. non prêt.
Un pack peut distribuer des liaisons de tout type. Les liaisons peuvent également être créées directement depuis l'onglet Liaisons du workbench sans toucher au SDK.
Carte de colonnes
Pour une liaison silver_table, la carte de colonnes déclare quelle colonne source alimente chaque propriété d'objet :
Object property Source column
───────────────── ─────────────────
id ← EntityID
legalName ← LegalName
riskClass… ← RiskClassLa carte de colonnes est modifiable depuis l'onglet Liaisons. Le sélecteur accepte à la fois le nom de colonne physique (fius_fiu_id) et le nom d'affichage (fius.fiu_id) — voir Noms de colonnes pour leur synchronisation.
Prêt vs. non prêt
Une liaison affiche l'un des quatre badges de statut dans le workbench :
| Badge | Signification | Que faire |
|---|---|---|
| Prêt | Source résolue, chaque valeur de la carte de colonnes correspond à une colonne de la table liée. | Utilisez-la. |
| Non prêt — table non enregistrée | Le pack distribue un nom de source logique ; aucune table correspondante n'existe encore dans cet espace de travail. | Cliquez sur Choisir une table, sélectionnez la bonne table gérée — le sélecteur met en évidence les correspondances exactes de nom. |
| Non prêt — colonnes manquantes | La table liée ne possède pas toutes les colonnes référencées dans la carte de colonnes. | Modifiez la carte de colonnes — choisissez la bonne colonne pour chaque propriété. |
| Non prêt — aucun lecteur gouverné | Le type de liaison n'a pas de lecteur gouverné dans cette version (memex_page aujourd'hui). La raison indique binding kind has no governed reader. | Rien à configurer. Le graphe affiche la liaison comme ignorée avec cette raison, jamais comme une erreur ; reliez vers une silver_table si vous avez besoin de lignes maintenant. |
La vérification Prêt est une sonde en direct, pas un cache. Elle s'exécute à chaque listage, donc une liaison qui passe de Prêt à Non prêt signifie qu'un changement a eu lieu en amont (table archivée, colonnes renommées).
Visibilité selon les marquages de ligne
Pour les liaisons vers des tables gérées, Scrydon filtre les lignes source marquées avant de
projeter les objets. Une ligne n'est visible que si chaque marquage qui lui est associé appartient
à l'ensemble de marquages autorisé par l'organisation pour l'appelant. L'habilitation de
classification et les marquages de ligne sont deux contrôles distincts : une habilitation plus
élevée n'accorde pas automatiquement un marquage tel que finance ou operations.
Une organisation sans politique de marquage de ligne commence dans l'état sécurisé par défaut : les lignes non marquées sont lisibles, tandis que toutes les lignes marquées restent masquées. Les lignes marquées ne deviennent lisibles qu'après qu'un détenteur autorisé a configuré la politique d'organisation correspondante. Cette version ne fournit pas d'interface dédiée aux marquages de ligne ; utilisez le processus d'administration des politiques gouvernées de votre organisation.
Si Scrydon ne peut pas résoudre l'autorité de marquage de l'appelant, la lecture de la liaison échoue. Elle n'est jamais relancée sans marquages et une défaillance d'autorité n'est jamais interprétée comme un résultat vide.
Étiquettes DLP et masquage
Chaque instance projetée porte les étiquettes DLP de sa source :
- Une propriété liée à une colonne classée
confidentialhérite de cette classification. - Une stratégie de masquage appliquée à la colonne source s'applique également à la propriété projetée.
- Un appelant sans habilitation sur la colonne voit la valeur masquée dans l'objet projeté, pas la valeur brute.
C'est ce qui rend l'ontologie exposable en toute sécurité aux agents — il n'existe aucun moyen pour un agent de lire un objet typé en contournant la gouvernance au niveau de la colonne de sa source.
Provenance
Chaque instance projetée porte une provenance :
| Champ | Valeur |
|---|---|
bindingId | Quelle liaison a produit cette instance |
bindingVersion | Quelle version de cette liaison |
sourceRef | Une référence à la ligne source (ex. EntityID="e1...01") |
materializedAt | L'horodatage de la projection |
dlpLabels | Les étiquettes DLP propagées |
Les outils de workflow et la surface analytique exposent cette provenance à côté des données, afin que l'utilisateur puisse toujours répondre à la question « d'où vient ceci ? ».
La provenance est en lecture seule au niveau de la couche de liaison — elle est émise par la projection, jamais créée par l'utilisateur. Les liaisons créées manuellement dans le workbench portent toujours une provenance indiquant le workbench lui-même comme source.
Matérialisation durable
La projection à la lecture est ce que chaque requête utilise. Séparément, une liaison dont la source est un environnement de process-flow peut être enrôlée pour que le noyau continue d'affirmer ses lignes en arrière-plan : une passe durable s'exécute selon un calendrier, lit chaque instance par le même chemin gouverné que /instances, et retient où elle en est (un repère). L'enrôlement est une écriture (write) sur le type d'objet de la liaison, soit explicitement (bindings.enroll dans le SDK), soit comme effet d'une exécution réussie de bindings.materialize.
Lorsqu'une passe échoue dans son ensemble cinq fois de suite, le noyau met la liaison en quarantaine avec un code d'arrêt au lieu de réessayer en silence. Une liaison en quarantaine est visible plutôt que simplement périmée : bindings.enroll sur celle-ci répond status: "quarantined" au lieu d'effacer l'arrêt, et rien d'automatique ne la lèvera — une nouvelle tentative ne peut pas effacer un arrêt que personne n'a examiné.
Un opérateur lève une quarantaine avec bindings.resume (POST /api/ontology/kernel/bindings/:name/resume). L'appel exige la même permission write que enroll et une personne connectée : un compte de service, une tâche d'arrière-plan ou un appelant agissant au nom de quelqu'un reçoit 403 FORBIDDEN avec un message indiquant qu'un opérateur humain est requis. La passe reprend ensuite au repère où elle s'était arrêtée ; rien n'est relu depuis le début. La réponse nomme le code d'arrêt effacé, et la levée est consignée dans le journal d'audit sous ontology.materialization-cursor.resumed, attribuée à l'opérateur.
| Résultat | Signification |
|---|---|
200 { resumed: true, previousStopCode } | La liaison est de nouveau active ; previousStopCode est ce que vous avez acquitté. |
403 FORBIDDEN | L'appelant n'est pas une personne, ou n'a pas write sur le type d'objet. |
404 NOT_FOUND | La liaison n'existe pas, ou n'a jamais été enrôlée. |
409 CONFLICT_DETECTED | La liaison n'est pas en quarantaine ; details.status indique son état réel. |
Ressources associées
- Types d'objets — ce que les liaisons produisent comme instances.
- Analytics → Noms de colonnes — fonctionnement de la recherche de colonnes source.
- Branches et propositions — les liaisons sont versionnées avec le schéma.