Blueprints Applicatifs¶
Un blueprint applicatif accélère un cas d'usage récurrent sans le confondre avec une technologie. Il génère une structure initiale cohérente dans le domaine, l'application, la composition et les tests. Le projet reste propriétaire de ces fichiers et doit y ajouter ses règles métier.
CRUD, append-only, state-machine, job, synchronization et workflow sont les six blueprints fournis par
Arclith. Le CRUD n'est ni le modèle universel d'une entité, ni une capability,
ni un adapter. state-machine décrit l'état métier d'un agrégat ; il ne doit pas
être confondu avec un workflow d'exécution. D'autres familles pourront être
ajoutées indépendamment, par exemple une recherche,
une conversation ou un pipeline RAG.
Trois Niveaux Distincts¶
| Niveau | Question | Exemples | Commande |
|---|---|---|---|
| Blueprint applicatif | Quel comportement récurrent initialiser ? | CRUD, append-only, state-machine, job, synchronization, workflow | add-blueprint |
| Capability | De quelle capacité technique le service a-t-il besoin ? | API, MCP, repository, agent | capabilities |
| Adapter | Avec quelle technologie implémenter la capability ? | FastAPI, FastMCP, MongoDB, PostgreSQL | add-adapter |
| Projection | Quel contrat public exposer sur un adapter installé ? | CRUD vers REST | expose-feature |
Une feature peut donc appliquer un blueprint CRUD tout en restant sans transport et en utilisant le repository mémoire par défaut. FastAPI, FastMCP et un store persistant sont des décisions explicites ultérieures.
Découvrir Le Catalogue¶
La sortie JSON est stable et exploitable par un agent ou une CI. Chaque entrée publie son nom, sa version et les opérations qu'elle initialise.
Appliquer Un Blueprint¶
Lors de la création interactive d'une entité, la CLI propose un profil initial :
Le profil minimal, sélectionné par défaut, conserve le comportement historique :
seul le modèle est créé. Pour un script, un agent ou une CI, rendre la décision
explicite :
| Bash | |
|---|---|
Un blueprint peut aussi être appliqué après la création de l'entité :
| Bash | |
|---|---|
--feature accepte un nom Python public en snake_case. Par défaut, il reprend
le nom normalisé de l'entité. Pour CRUD, cette seconde forme est recommandée
après avoir défini les champs du modèle : le blueprint les projette alors dans
les commandes de création et de mise à jour avec leurs contraintes Pydantic.
Les fichiers générés restent des instantanés détenus par le projet et ne sont
pas resynchronisés implicitement après personnalisation.
Manifeste Et Propriété Des Fichiers¶
La première application écrit un manifeste canonique versionné :
| YAML | |
|---|---|
Il est enregistré dans .arclith/features/<feature>.yaml. Ce manifeste permet
à une projection de transport de savoir quelles opérations existent, sans
déduire un comportement depuis le nom d'un fichier ou d'un adapter.
Le blueprint state-machine utilise le manifeste version 2. Il ajoute le mapping
parameters résolu et des digests SHA-256 du template et de la configuration.
La recette et le manifeste embarquent les valeurs canoniques, jamais le chemin
absolu du fichier --spec. Les manifests version 1 CRUD et append-only restent
lisibles et rejouables tels quels, sans migration implicite.
Le blueprint job utilise le manifeste V3 pour distinguer
target: {kind: standalone} et target: {kind: entity, entity: {name, module}}.
Il exige une spec et un choix explicite --entity ou --no-entity. Le mode
standalone exige aussi --feature. Les quatre profils d'entité du menu ci-dessus
restent inchangés : un job est un modèle d'exécution, pas un profil d'entité.
| Bash | |
|---|---|
Le blueprint synchronization réutilise Job pour une réconciliation pull full/incremental. Il conserve le manifeste V2, exige une entité existante et une spec, et expose quatre opérations. Le mapper, les ports source/cible et le checkpoint sont injectés explicitement ; la génération préserve le modèle métier existant.
| Bash | |
|---|---|
Le blueprint workflow réutilise les cibles du manifeste V3. Il orchestre des étapes séquentielles injectées avec checkpoint après succès, reprise explicite et clé d’exécution stable. Les étapes métier et la projection du résultat restent à compléter. Le store/runner mémoire est non durable.
| Bash | |
|---|---|
La sortie arclith-cli blueprints --json expose parameterized pour que les
outils sachent si une entrée externe comme --spec est requise, sans déduire ce
contrat d'une liste d'opérations vide.
Après installation explicite de FastAPI, le CRUD peut être projeté comme un ensemble REST cohérent :
| Bash | |
|---|---|
Cette commande consomme le manifeste et prévalide les cinq opérations dans un
seul plan avant toute écriture. Elle ne crée jamais l'adapter à la place de
add-adapter. Pour une opération isolée ou un comportement hors blueprint,
utiliser expose-usecase.
Les règles de génération sont strictes :
- avant la première installation, une collision avec un fichier applicatif existant arrête toute la génération ;
- après installation, un replay complète uniquement les fichiers manquants et préserve tous les fichiers existants ;
- un manifeste modifié ou incompatible doit être résolu explicitement ;
--dry-runn'écrit ni fichier, ni manifeste, ni étape de recette ;- aucune route, aucun tool MCP et aucun adapter de persistence ne sont créés
implicitement ; une route n'apparaît qu'après
expose-featureouexpose-usecase.
Le profil append-only crée un ImmutableRecord distinct de l'Entity CRUD.
Sa seule opération est append ; son store est injecté explicitement et aucun
transport ni query n'est ajouté. Il ne transforme pas un modèle mutable existant.
Le profil state-machine crée une Entity dont le champ d'état typé est protégé
contre l'affectation directe. Chaque transition de la spec devient un verbe, un
port et un use case explicites. Le projet fournit un port outbound CAS ; Arclith
ne prétend pas rendre atomique un repository qui ne possède pas ce contrat.
Consulter le blueprint CRUD, le blueprint append-only, le blueprint state-machine, le blueprint job, le blueprint synchronization et le blueprint workflow pour leurs contrats détaillés et les blueprints des adapters pour la structure des implémentations techniques.