Scrydon

Manifeste du pack — bases de connaissances (domaines)

Déclarez des domaines de la base de connaissances organisationnelle dans votre manifeste de pack avec rétention, immuabilité, politique de lecture, politique de promotion et conditions de déclenchement

Un pack Scrydon déclare un ou plusieurs domaines de la base de connaissances organisationnelle via le tableau knowledgebases[] de son manifeste. (Un domaine est une partition gouvernée de la base de connaissances organisationnelle — « domaine » est le terme utilisé dans l'interface de la plateforme ; « partition » désigne la même chose en interne.) Lorsque le pack est installé, la plateforme crée ces domaines, compile les politiques de contrôle d'accès correspondantes et connecte chaque domaine aux ontologies livrées par le pack.

Les domaines ne peuvent être provisionnés qu'en installant un pack — il n'existe pas de bouton « créer un domaine » dans la plateforme. Cela garantit que la gouvernance de chaque domaine (politique de lecture, politique de promotion, rétention, immuabilité) est créée et versionnée en un seul endroit.

Exemple complet annoté

L'exemple ci-dessous déclare un domaine learnings pour un pack de gestion des connaissances. Il définit une fenêtre de rétention de 5 ans, restreint l'accès en lecture par classification et rôle, configure une politique de promotion avec un réviseur obligatoire et dépose automatiquement une demande de promotion lorsqu'une ligne source Project est marquée validated.

import { defineScrydonPack } from '@scrydon/sdk-authoring/packs'

export default defineScrydonPack({
  package: {
    id: 'com.example.knowledge-pack',
    version: '1.0.0',
    displayName: 'Knowledge Pack',
  },

  knowledgebases: [
    {
      // Required — unique within this org, lowercase kebab-case.
      slug: 'learnings',
      displayName: 'Project Learnings',
      description: 'Durable project learnings.',

      // Which ontologies type the rows in this domain. Each slug must match an
      // ontology shipped by THIS Pack (the installer resolves slugs against the
      // pack's own ontology id).
      ontologies: ['com.example.knowledge-pack'],

      // Where rows are persisted. Org-KB content is tabular in StarRocks —
      // 'starrocks' is the only backend, and this field is optional (it
      // defaults to 'starrocks', so you can omit it entirely).
      storageBackend: 'starrocks',

      defaults: {
        // How long rows are retained before the retention sweep removes them.
        // Number of days. Omit for indefinite retention.
        retentionDays: 1825, // 5 years

        // Once true, rows can only be revoked — never overwritten by a later
        // promote. This flag cannot be relaxed after install (one-way ratchet).
        immutable: false,

        readPolicy: {
          // Properties classified above this level are redacted at read time
          // for callers without elevated privilege.
          // One of: 'public' | 'internal' | 'confidential' | 'restricted'.
          maxClassification: 'internal',

          // Org-scoped roles required to read this domain at all. Optional.
          requiredRoles: ['org:analyst', 'org:knowledge-lead'],
        },

        promotionPolicy: {
          // Minimum explicit approvals before materialization. 0 = auto-approve.
          requiredApprovals: 1,

          // Named reviewer slots filled from specific roles. The platform
          // resolves actual users at request-creation time (snapshot).
          // NOTE the field is `required` (a count), not `count`.
          roleSlots: [
            { role: 'org:knowledge-lead', required: 1 },
          ],

          // How long (seconds) a promotion request may sit pending before it
          // expires.
          expirationSeconds: 604800, // 7 days

          // Auto-file a promotion request when a workspace row matches.
          // An array of per-object-type trigger entries (see "Conditions").
          autoPromoteWhen: [
            {
              objectTypeSlug: 'Project',
              conditions: [
                { kind: 'property', property: 'status', equals: 'validated' },
              ],
            },
          ],

          // Approve a pending request without a human reviewer when the source
          // rows match. Same shape as autoPromoteWhen.
          autoApproveWhen: [
            {
              objectTypeSlug: 'Project',
              conditions: [
                { kind: 'property', property: 'value', equals: 'low' },
                { kind: 'lifecycle', equals: 'short' },
              ],
            },
          ],
        },
      },
    },
  ],

  // ... ontology and process-flow entries as usual
})

Un pack de démarrage complet et installable déclarant trois domaines (learnings, contracts, incidents) est prêt à télécharger : org-kb-starter.scrydon-pack.tar.gz. Installez-le depuis Paramètres → Packs pour alimenter l'onglet Domaines. La vue d'ensemble couvre le cycle de vie complet.

Conditions

autoPromoteWhen et autoApproveWhen sont tous deux des tableaux d'entrées de déclenchement. Chaque entrée cible un type d'objet et contient une liste de conditions :

{
  objectTypeSlug: 'Project',     // the source object type this entry applies to
  conditions: [ /* … */ ],   // evaluated AND-wise within the entry
}
  • Au sein d'un même tableau conditions[], toutes les conditions doivent être satisfaites (ET logique).
  • Entre les entrées du tableau autoPromoteWhen[] / autoApproveWhen[], toute entrée correspondante se déclenche (OU logique).

Il existe deux types de conditions, discriminés par kind.

kind: 'property' — correspondre à une propriété de la ligne source

{
  kind: 'property',
  // The property slug on the object type (not a dotted path).
  property: 'status',

  // Provide exactly one matcher:
  equals: 'validated',           // exact string / number / boolean match
  // matches: 'Enterprise',      // ECMAScript regex against the property value
  // olderThan: '90d',           // duration <N>(s|m|h|d); true if the value is a
  //                             // timestamp older than now - duration
}
// Match projects whose name contains "Enterprise"
{ kind: 'property', property: 'name', matches: 'Enterprise' }

// Match rows created more than 90 days ago
{ kind: 'property', property: 'createdAt', olderThan: '90d' }

kind: 'lifecycle' — correspondre à la classification du cycle de vie assignée par l'IA

Le classificateur de cycle de vie de la plateforme attribue à chaque ligne un avis de classification — l'une des valeurs long, short ou unknown. Cette classification est indicative uniquement : elle ne déclenche jamais de suppression automatique, et un humain peut toujours la remplacer.

{
  kind: 'lifecycle',
  equals: 'long',          // 'long' | 'short' | 'unknown'
  minConfidence: 0.9,      // optional — require the classifier confidence ≥ threshold
}

Combiner les conditions

Il n'existe pas d'objets combinateurs all / any. Le ET s'exprime en listant plusieurs conditions dans une même entrée ; le OU s'exprime en listant plusieurs entrées :

autoPromoteWhen: [
  // Entry A: validated AND high-confidence long-lived  → fires
  {
    objectTypeSlug: 'Project',
    conditions: [
      { kind: 'property', property: 'status', equals: 'validated' },
      { kind: 'lifecycle', equals: 'long', minConfidence: 0.8 },
    ],
  },
  // Entry B: strategic priority (OR with entry A)         → also fires
  {
    objectTypeSlug: 'Project',
    conditions: [
      { kind: 'property', property: 'priority', equals: 'strategic' },
    ],
  },
]

Référence des champs

Champs de premier niveau de knowledgebases[]

ChampTypeObligatoireDescription
slugstringOuiIdentifiant unique de ce domaine au sein de l'organisation. En minuscules kebab-case. Utilisé dans les appels API.
displayNamestringOuiNom lisible affiché dans l'onglet Domaines et la file de révision.
descriptionstringNonCourte description affichée dans l'interface.
ontologiesstring[]OuiSlugs des ontologies (livrées par ce pack) qui typent les lignes stockées ici. Doit référencer l'id d'ontologie propre à ce pack.
storageBackend'starrocks'NonOù les lignes sont persistées. Le contenu de la base de connaissances org est tabulaire dans StarRocks ; c'est la seule valeur et elle est par défaut 'starrocks', vous pouvez donc l'omettre.
retrievalIndex{ kind: 'pgvector' | 'starrocks' | 'none' }NonIndex de récupération pour la recherche gouvernée.
defaultsobjectOuiValeurs par défaut de gouvernance appliquées à l'installation. Les organisations peuvent les remplacer par domaine dans les paramètres.

Champs de defaults

ChampTypeDescription
retentionDaysnumberJours avant que les lignes soient éligibles au balayage de rétention. Omettez pour une rétention indéfinie.
immutablebooleanSi true, les lignes ne peuvent pas être mises à jour après matérialisation — seulement révoquées. Irréversible : ne peut pas être remis à false après installation.
readPolicy.maxClassification'public' | 'internal' | 'confidential' | 'restricted'Classification maximale des propriétés visible sans privilège élevé. Les propriétés au-dessus de ce niveau sont occultées.
readPolicy.requiredRolesstring[]Rôles organisationnels requis pour lire ce domaine. Optionnel.
promotionPolicy.requiredApprovalsnumberNombre minimal d'approbations explicites avant matérialisation. 0 = approbation automatique.
promotionPolicy.roleSlots{ role: string; required: number }[]Créneaux de réviseurs nommés. Notez que le champ est required, pas count.
promotionPolicy.expirationSecondsnumberSecondes avant qu'une demande en attente expire sans décision.
promotionPolicy.autoPromoteWhen{ objectTypeSlug: string; conditions: Condition[] }[]Dépose automatiquement une demande de promotion lorsqu'une ligne d'espace de travail correspond.
promotionPolicy.autoApproveWhen{ objectTypeSlug: string; conditions: Condition[] }[]Approuve automatiquement une demande en attente lorsque les lignes sources correspondent.

Ce qui se passe à l'installation

Lorsqu'un pack contenant knowledgebases[] est installé :

La plateforme crée une ligne org_knowledgebase pour chaque domaine déclaré qui n'existe pas encore, en enregistrant la version du pack d'origine.

La plateforme compile les politiques Rego de lecture, de promotion et de révocation à partir des déclarations readPolicy et promotionPolicy, puis les charge dans le moteur de politiques. La compilation des politiques est protégée contre les injections — les valeurs de slug et de rôle sont validées avant la génération Rego.

Si un domaine avec ce slug existe déjà (réinstallation ou mise à niveau), la plateforme applique le cliquet de rigueur : les paramètres plus stricts (plus de requiredApprovals, requiredRoles plus restreints, activation de immutable) sont appliqués silencieusement. Les paramètres moins stricts sont différés et signalés pour révision par un administrateur — ils ne s'appliquent pas automatiquement lors d'une mise à niveau.

Si immutable: true, le marqueur est définitivement positionné sur le domaine. Il ne peut pas être effacé par une mise à niveau ultérieure du pack ou une action d'administrateur.

Le marqueur immutable est un cliquet à sens unique. Une fois qu'un domaine est marqué immuable — que ce soit par le manifeste du pack ou par un administrateur — il reste immuable pour toute la durée de vie de ce domaine. Concevez vos domaines en conséquence.

Pour continuer

Sur cette page

Sur cette page