Tekton — co-concevoir l'architecture sur un modèle partagé
Ce que c'est
Un substrat pour un partenariat humain↔agent en architecture. Le design vit dans un modèle YAML que nous éditons tous les deux ; git est le round-trip. Vous voyez (visualiseur HTML) ; je lis et écris le même modèle. Nous réfléchissons sur le même contexte.
Le problème qu'il résout : un document HTML/SVG fait à la main est un rendu terminal — vous ne pouvez pas traverser, interroger ou le modifier en retour, et ses diagrammes ne portent aucun sens. Tekton place le modèle vivant en amont du rendu.
Moteur
scripts/tekton.py (Python 3, pyyaml). Ontologie dans references/ontology.md.
python3 scripts/tekton.py validate <model.arch.yaml> # vérification d'intégrité
python3 scripts/tekton.py lint <model.arch.yaml> # v0.2 — fonctions de fitness ; code de sortie 1 en cas de violation
python3 scripts/tekton.py stats <model.arch.yaml> # compteurs nœuds/arcs/statut/règles
python3 scripts/tekton.py views # liste les 6 vues
python3 scripts/tekton.py mermaid <model.arch.yaml> <view># mermaid brut (intégration/agent)
python3 scripts/tekton.py render <model.arch.yaml> [-o out.html] # visualiseur HTML aux couleurs de la marque
python3 scripts/tekton.py query <model.arch.yaml> <from> <to> # chemin cross-couche
Évolutions de l'ontologie v0.2 (issues de la revue d'architecture)
- Contenants —
parent:sur tout nœud + typeboundary; le visualiseur affiche des groupes imbriqués, double-clic pour réduire/déplier (exploration à la C4). - Cycle de vie —
status:sur les nœuds (current|target|deprecated; target rendu en pointillé = as-is/to-be dans un seul modèle) et champs ADR complets de Nygard sur les décisions (context,consequences,status,supersedes). - Qualités — bloc
qualities:; les exigences non fonctionnellescontraintdes éléments ; affichées dans le panneau de détail + vue dédiée. - Fonctions de fitness — bloc
rules:(forbid-dep,no-cycle,layer-order) ;tekton lintest intégrable en CI (code de sortie 1). Le vérificateur indépendant de la boucle de conception.
Comment l'agent l'utilise dans une session de design
- Localiser/créer le modèle :
<projet>/docs/design/<nom>.arch.yaml(ouexamples/pour du brouillon). - Muter pendant la réflexion — ajouter/ajuster des nœuds, des arcs, des décisions directement dans le YAML au fur et à mesure que la conversation fait émerger des composants, des flux, des données, de l'infrastructure et des ADR.
validate+lintaprès chaque modification substantielle (références pendantes, mauvais types, règles de fitness).render, puis — AVANT de présenter le visualiseur comme correct — exécuter l'audit géométrique :bash tests/visual-audit.sh <model.arch.yaml>. Il effectue un rendu sans tête de chaque vue et ÉCHOUE en cas de chevauchement de nœuds ou de captures vides. Déclarer « le diagramme est correct » sans cela est exactement l'échec que le premier dogfood a détecté (arcs déconnectés dans un groupe, nœuds doublons — invisibles pour les sondes DOM-count, détectés uniquement par la géométrie). Lien profond vers une vue avec#<vue>dans l'URL.querypour répondre aux questions de traçabilité (« qu'est-ce que cela touche ? ») plutôt que de deviner.- Piloter → répéter. L'humain édite le YAML ou le visualiseur ; le diff git est la transmission.
Résidus cosmétiques connus (pas des échecs d'audit) : les arcs de boucle de parcours font que ELK casse la boucle à une étape arbitraire (une boucle doit se casser quelque part) ; les étiquettes d'arcs parallèles adjacents peuvent être proches dans les groupes denses.
Conventions
- Fichiers modèles :
*.arch.yaml. Visualiseur rendu :*.view.html(à ignorer ou à versionner — à vous de choisir). - Un modèle par système délimité ; lier les systèmes avec des nœuds
external+ arcsuses. - Les décisions (ADR) sont des nœuds de première classe — les attacher à ce qu'elles
gouvernent. - Les rapports HTML de catégorie C deviennent une exportation en aval du modèle, pas la source de vérité.
Rendu — pourquoi pas Mermaid
Le visualiseur principal est un rendu personnalisé, pas Mermaid. Le plafond thématique de Mermaid ne peut pas
exprimer le système de design Broomva (axe bleu OKLCH, cartes mates, verre mérité, lueur comète)
et sa disposition dagre se dégrade sur les graphes denses. À la place : elkjs calcule la disposition
dans le navigateur (JS pur → la sortie reste un seul fichier HTML autonome), et les nœuds sont
dessinés comme des cartes mates Broomva (verre réservé au panneau de détail flottant, conformément à la règle
« le verre se mérite » du système de design). Les jetons de design sont intégrés depuis le système de design Broomva.
tekton mermaid reste UNIQUEMENT comme une cible jetable d'intégration/agent.
Feuille de route (v0 → v2)
- v0.2 (maintenant) : Modèle YAML · validate + lint (fonctions de fitness) · 6 vues · visualiseur elkjs aux couleurs de la marque (réduction/dépliage des contenants, as-is/to-be, clic pour tracer, panneau de détail en verre) · requête cross-couche · intégration Mermaid de repli.
- v1 : round-trip bidirectionnel (glisser/éditer dans le visualiseur → sérialiser vers YAML) ; serveur MCP (mutations validées pour que l'agent ne puisse pas émettre un modèle invalide) ; intégrer le système de design Broomva complet pour un canvas interactif React-Flow.
- v2 : CRDT (loro) co-édition temps réel humain↔agent ; synchronisation en direct vers Prosopon en tant que surface.
Statut
v0 dogfood — outil de design interne. Skillifed (testé + enregistré) une fois que la boucle de conception a été utilisée sur ≥3 systèmes réels (règle des trois).