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
1. Quand créer un pack
Section intitulée « 1. Quand créer un pack »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.
2. La structure
Section intitulée « 2. La structure »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 glossary3. Créer le manifeste du pack
Section intitulée « 3. Créer le manifeste du pack »Créez jinflow.yml à la racine du pack :
pack_id: mypackdisplay_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"4. Extraire depuis votre tenant
Section intitulée « 4. Extraire depuis votre tenant »Le moyen le plus rapide de créer un pack est de l’extraire d’un AFS tenant fonctionnel :
# Your tenant AFS is at:# Copy the framework files (not tenant-specific data)mkdir -p ~/jinflow-packs/jinflow-pack-mypackcd ~/.jinflow/live/mypack/first_client/afs
# Copy instrument definitionscp -r entities/ contracts/ probes/ hypotheses/ diagnoses/ \ smebits/ bitbundles/ reports/ lineage/ glossary/ \ ~/jinflow-packs/jinflow-pack-mypack/
# Copy dbt projectcp -r dbt/ ~/jinflow-packs/jinflow-pack-mypack/
# Copy scriptscp -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/5. Nettoyer le contenu spécifique au tenant
Section intitulée « 5. Nettoyer le contenu spécifique au tenant »Éditez le pack pour supprimer les références spécifiques au tenant :
- SMEbits : supprimer ceux avec
scope.tenant_iddéfini à un tenant spécifique (garder les cross-tenant avectenant_id: "*"ounull) - 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
6. Initialiser git
Section intitulée « 6. Initialiser git »cd ~/jinflow-packs/jinflow-pack-mypackgit initgit add -Agit commit -m "feat: initial domain pack from first_client"Optionnellement pousser vers GitHub :
git remote add origin https://github.com/org/jinflow-pack-mypack.gitgit push -u origin main7. Configurer jinflow pour trouver le pack
Section intitulée « 7. Configurer jinflow pour trouver le pack »jinflow us --pack-root ~/jinflow-packsMaintenant jinflow init --pack mypack trouvera votre pack.
8. Créer un second tenant
Section intitulée « 8. Créer un second tenant »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 :
jinflow make --tenant mypack.second_client --syncjinflow explore --tenant mypack.second_clientLes 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.
9. Garder pack et tenants synchronisés
Section intitulée « 9. Garder pack et tenants synchronisés »Quand vous améliorez le pack (nouveaux Signals, Theses mises à jour) :
# Update all tenants from the packjinflow afs update --all --do-it
# Or one tenant at a timejinflow afs update --tenant mypack.second_client --do-itLa 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.
10. Le cycle de vie du pack
Section intitulée « 10. Le cycle de vie du pack »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 learningC’est le volant d’inertie : chaque nouveau client améliore le framework, et chaque amélioration revient aux clients existants.
Ce que vous avez appris
Section intitulée « Ce que vous avez appris »- 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 --packcopie le framework dans un nouveau tenantjinflow afs updatesynchronise 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
Prochaines étapes
Section intitulée « Prochaines étapes »- Domain Packs — documentation détaillée des 4 packs livrés
- Guide Collaboration — workflows git pour la gestion pack et tenant
- Guide Tenants — architecture multi-tenant
- Glossaire — chaque terme expliqué