Aller au contenu

Tutoriel : Publier un Domain Pack

Dans ce tutoriel, vous allez prendre un AFS tenant fonctionnel, en extraire un domain pack réutilisable et l’utiliser pour créer un second tenant. C’est ainsi que les cabinets de conseil mettent à l’échelle leur expertise — construire une fois, déployer plusieurs fois.

Durée : 20 minutes Prérequis : Un tenant fonctionnel avec des Signals, Theses et au moins un build réussi

Vous avez travaillé avec un client. Votre AFS contient :

  • Définitions Entity et Contracts
  • Macros de dispatch système source
  • 10+ Signals, Theses, Verdicts
  • SMEbits issus d’entretiens avec des experts
  • Reports

Un second client dans la même industrie demande la même analyse. Au lieu de copier les fichiers manuellement, vous emballez votre framework comme domain pack.

Un domain pack est simplement un dépôt git avec la bonne structure :

jinflow-pack-mypack/
jinflow.yml ← pack manifest
entities/ ← entity definitions
contracts/ ← gold, silver, findings, diagnosis, smebit, bitbundle
probes/ ← signal declarations
hypotheses/ ← thesis declarations
diagnoses/ ← verdict declarations
smebits/ ← expert knowledge (pack-level, not tenant-specific)
bitbundles/ ← curated narratives
reports/ ← report declarations
lineage/ ← lineage definitions
dbt/{pack}/ ← dbt project (models, macros, seeds)
models/
bronze/ ← source-system dispatch
silver/ ← validation
gold/ ← consumption contract
macros/
source_system_columns.sql ← column mappings per source system
scripts/ ← extraction, generation scripts
glossary/ ← registry glossary

Créez jinflow.yml à la racine du pack :

pack_id: mypack
display_name: "My Analytics Pack"
brand: "My Pack"
description: "Analytical framework for [your industry]"
source_systems: [system_a, system_b]
branding:
primary_color: "#3b82f6"
tagline: "Every [thing] tells a story"

Le moyen le plus rapide de créer un pack est de l’extraire d’un AFS tenant fonctionnel :

~/.jinflow/live/mypack/first_client/afs/
# Your tenant AFS is at:
# Copy the framework files (not tenant-specific data)
mkdir -p ~/jinflow-packs/jinflow-pack-mypack
cd ~/.jinflow/live/mypack/first_client/afs
# Copy instrument definitions
cp -r entities/ contracts/ probes/ hypotheses/ diagnoses/ \
smebits/ bitbundles/ reports/ lineage/ glossary/ \
~/jinflow-packs/jinflow-pack-mypack/
# Copy dbt project
cp -r dbt/ ~/jinflow-packs/jinflow-pack-mypack/
# Copy scripts
cp -r scripts/ ~/jinflow-packs/jinflow-pack-mypack/
# Copy the manifest (edit pack_id and remove tenant-specific fields)
cp jinflow.yml ~/jinflow-packs/jinflow-pack-mypack/

Éditez le pack pour supprimer les références spécifiques au tenant :

  • SMEbits : supprimer ceux avec scope.tenant_id défini à un tenant spécifique (garder les cross-tenant avec tenant_id: "*" ou null)
  • jinflow.yml : supprimer tenant, display_name, dlz_root — garder uniquement les champs niveau pack
  • Scripts : s’assurer que les scripts d’extraction fonctionnent avec les données de n’importe quel tenant, pas seulement celles du premier client
Fenêtre de terminal
cd ~/jinflow-packs/jinflow-pack-mypack
git init
git add -A
git commit -m "feat: initial domain pack from first_client"

Optionnellement pousser vers GitHub :

Fenêtre de terminal
git remote add origin https://github.com/org/jinflow-pack-mypack.git
git push -u origin main
Fenêtre de terminal
jinflow us --pack-root ~/jinflow-packs

Maintenant jinflow init --pack mypack trouvera votre pack.

Fenêtre de terminal
jinflow init --pack mypack --tenant second_client --source-system system_a \
--dlzroot ~/jinflow-datalandingzone \
--display-name "Second Client"

Cela copie le framework complet du pack dans une nouvelle instance tenant. Placez les données du second client dans la DLZ et construisez :

Fenêtre de terminal
jinflow make --tenant mypack.second_client --sync
jinflow explore --tenant mypack.second_client

Les mêmes Signals, Theses et Verdicts s’exécutent maintenant sur des données complètement différentes. Les findings seront différents — le framework est le même, les insights sont spécifiques au client.

Quand vous améliorez le pack (nouveaux Signals, Theses mises à jour) :

Fenêtre de terminal
# Update all tenants from the pack
jinflow afs update --all --do-it
# Or one tenant at a time
jinflow afs update --tenant mypack.second_client --do-it

La synchronisation three-way garantit que les personnalisations spécifiques au tenant sont préservées. Seuls les changements du pack sont appliqués ; les conflits sont signalés, jamais silencieusement écrasés.

Build framework for Client A
Extract into domain pack
Create tenant for Client B from pack
Client B findings reveal new patterns
Add new signals/theses to pack
Sync improvements back to Client A
Both clients benefit from shared learning

C’est le volant d’inertie : chaque nouveau client améliore le framework, et chaque amélioration revient aux clients existants.

  • Un domain pack est un dépôt git avec des instruments, Contracts, modèles dbt et macros
  • Extraire depuis un tenant fonctionnel est le moyen le plus rapide de créer un pack
  • jinflow init --pack copie le framework dans un nouveau tenant
  • jinflow afs update synchronise les améliorations du pack vers les tenants (fusion three-way)
  • Les packs sont optionnels — vous pouvez toujours travailler sans
  • La valeur est la réutilisation : construire une fois, déployer plusieurs fois, améliorer continuellement
jazzisnow jinflow is a jazzisnow product
v0.45.1 · built 2026-04-17 08:14 UTC