1Objet
Le Kit se présente comme indépendant du moteur d’intelligence artificielle qui l’exécute. Il ne l’est pas: sa chaîne suppose des outils, une arborescence et des comportements qu’elle ne fournit pas. Ce document déclare ce qu’elle exige.
Il ne nomme aucun moteur. Chaque moteur écrit en regard son propre relevé, qui répond ligne à ligne au contrat du §2 et déclare ce qui lui manque. Le contrat appartient au Kit et vaut partout; le relevé appartient au moteur, et lui seul peut le mesurer.
2Contrat d’exécution
Chaque ligne nomme une capacité, l’usage qu’en fait la chaîne, et ce qui tombe en son absence. L’ordre des lignes est fixe: c’est lui qui rend deux relevés comparables.
| Capacité | Usage | Sans elle | Degré |
|---|---|---|---|
| Node.js | Exécute les feuilles de style et les générateurs. | Rien n’est produit. | Requis |
| Module docx | Construit le document et le sérialise. | Aucun document. | Requis |
| Python 3 | Outils d’extraction, de contrôle et de rendu. | Aucun contrôle, aucune couverture. | Requis |
| pandoc | Convertit un document en page web, et lit le Cover Sheet. | Aucune page web. | Conditionnel |
| LibreOffice | Convertit un document en PDF. | Le site se publie sans PDF. | Conditionnel |
| zip | Produit l’archive du projet quand projectShareable vaut true au Registry. | La passe s’arrête: le lien annoncé par projectZip.downloadUrl pointerait une archive absente. | Requis si projectShareable vaut true |
| Pillow | Compose le PNG de la page de couverture. | Pas de couverture rendue. | Conditionnel |
| Module adm-zip | Construit l’archive du site. | Le site se génère sans archive. | Conditionnel |
3Degrés d’exigence
Trois degrés, et ils commandent la conduite à tenir quand une capacité manque.
–Requis: la chaîne s’arrête. Il n’existe pas de version dégradée honnête d’un document: sans le moteur de construction, il n’y a pas un document plus pauvre, il n’y a pas de document.
–Conditionnel: une production disparaît, le reste sort. Un site sans PDF vaut mieux que pas de site. La production omise se déclare.
–Toléré: un contournement existe et se déclare avec son coût. Une installation en début de session en est un: elle ne survit pas.
4Règles indépendantes du moteur
Elles découlent du contrat et valent dans tout environnement. Leur domicile est ailleurs; elles sont rappelées ici parce qu’un relevé y répond.
–Résolution unique: tous les fichiers d’une même chaîne résolvent le module de construction de la même façon. Deux instances produisent un document valide et vide. General Reference §1.3.
–Ordre de résolution: résolution ordinaire, puis la racine déclarée dans KIT_NODE_MODULES, puis celle que rapporte l’outil de paquets. Aucun chemin n’est écrit d’avance.
–Horodatage local: les noms de fichiers portent l’heure du Luxembourg, jamais celle du conteneur. Seul l’horodatage de déploiement du Registry est en temps universel.
–Générateur réécrit: aucun script de génération ne survit d’une session à l’autre. Chaque session repart de la feuille de style active et de sa Reference.
5Contrôle d’ouverture de session
Avant toute génération, le moteur rejoue le contrôle ci-dessous et déclare son résultat. Ce n’est pas une invitation: c’est le maillon zéro de la chaîne de validation, et il précède le premier contrôle de Quality Control §3.13.
node --version
node -p "require.resolve('docx')"
node -p "Object.keys(require('docx')).length"
python3 --version
python3 -c "import PIL; print('Pillow', PIL.__version__)"
which pandoc soffice
node -e "require('adm-zip'); console.log('adm-zip')"La déclaration précède la génération, jamais l’inverse. Le moteur annonce ce qu’il produira et ce qu’il ne produira pas. Découvrir une absence à la fin d’une passe, c’est la découvrir trop tard.
–Une capacité requise manque: arrêt, avec le nom de la capacité et la commande qui l’installe.
–Une capacité conditionnelle manque: la production correspondante est annoncée absente, et la passe continue.
–Un contournement est appliqué: il est déclaré dans la sortie de la passe et porté au relevé du moteur.
6Format d’un relevé
Un relevé de moteur porte le préfixe du moteur et la catégorie Documentation — Convention de nommage §2. Il comporte six sections, dans cet ordre.
| # | Section | Contenu |
|---|---|---|
| 1 | Objet et dates | Quel environnement, date de rédaction et date du dernier contrôle. L’écart entre les deux informe. |
| 2 | Réponse au contrat | Le tableau du §2, même ordre de lignes, avec ce qui est constaté et où. |
| 3 | Lacunes | Ce qui manque, et à quel degré du §3 cela correspond. |
| 4 | Contournements | Ce qui est fait pour y pallier, et ce que cela coûte. |
| 5 | Particularités | Ce qui n’est pas au contrat mais change la façon de travailler. |
| 6 | Relevé brut | Commandes et sorties, verbatim. La preuve de la section 2. |
7Ce que le Kit ne garantit pas
Deux hypothèses sortent du contrat parce que le Kit les subit sans pouvoir les imposer. Elles appartiennent au relevé de chaque moteur, section 5.
–La persistance entre sessions. Rien ne garantit qu’un environnement retrouve son état. C’est ce qui fonde le contrôle du §5 et la réécriture du générateur.
–La forme d’un fichier joint. Un moteur peut livrer un document sous forme de binaire ou de texte extrait. Dans le second cas, modifier un document existant à partir de ce qu’on en lit produit un fichier appauvri sans que rien ne le signale — d’où la règle du binaire obligatoire.