Scrydon

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

TypeSourceStatut
silver_tableUne table gérée — vos imports CSV / JSONdisponible
memex_pageUne page de base de connaissancesaperçu
process_flow_taskUne instance de tâche de flux de processusdisponible
manualÉcritures via SDK / workbench — pas de source en amontdisponible
process_flow_action, extraction, streamActions de lien d'entité, pipelines d'extraction, topics pub/subpré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…      ←    RiskClass

La 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 :

BadgeSignificationQue faire
PrêtSource 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éeLe 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 manquantesLa 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 confidential hé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 :

ChampValeur
bindingIdQuelle liaison a produit cette instance
bindingVersionQuelle version de cette liaison
sourceRefUne référence à la ligne source (ex. EntityID="e1...01")
materializedAtL'horodatage de la projection
dlpLabelsLes é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ésultatSignification
200 { resumed: true, previousStopCode }La liaison est de nouveau active ; previousStopCode est ce que vous avez acquitté.
403 FORBIDDENL'appelant n'est pas une personne, ou n'a pas write sur le type d'objet.
404 NOT_FOUNDLa liaison n'existe pas, ou n'a jamais été enrôlée.
409 CONFLICT_DETECTEDLa liaison n'est pas en quarantaine ; details.status indique son état réel.

Ressources associées

Sur cette page

Sur cette page