Les deux visions, un seul chemin gardé.
La doctrine gouverne deux visions derrière les mêmes ports : ce que le système fait, et où il tourne. runward ne portait que la première. Il porte désormais les deux, dans le même chemin gardé. Déterministe, jamais un runtime : il trace la décision de placement, il ne déploie rien.
La topologie était orpheline
La section 15 de la doctrine, les briques partagées, n'existait dans runward que sous la forme d'un template shared-bricks.md : scaffoldé, mais produit par aucun workflow et vérifié par aucune porte. runward reproduisait fidèlement le défaut de la doctrine elle-même : l'infrastructure reléguée à la fin, décrochée du flux port par port. Sur le terrain, un architecte n'arrivait pas à relier les deux visions dans runward, parce que le versant applicatif était un chemin gardé de bout en bout, et le versant infra une note isolée à côté.
Le port est le pont
La doctrine est claire : la topologie de déploiement est une décision d'adaptateur, prise derrière un contrat stable. Un service, c'est un adaptateur qui a migré dans son propre processus, sans que le domaine change. Le port est donc le pont entre les deux visions. Un nouveau livrable, execution-topology.md, le matérialise : par port, son adaptateur, sa famille d'emplacement, la classe de donnée qui le traverse, sa souveraineté, son ADR et son déclencheur de réévaluation. Plus un registre des usages, car le risque se classe par déploiement, pas par plateforme.
Une porte de première classe
execution-topology.md devient un livrable gaté avec sa propre phase de conformité, topology, symétrique avec architect, floor et govern. runward check --strict vérifie désormais quatre règles déterministes : le placement de chaque port, la souveraineté par classe de donnée, la décision d'export de traces, la présence du registre des usages. Chacune prouve une décision tracée, jamais un état d'infra réel.
Choix assumé pour un produit fini, sans contournement : gater la décision là où elle vit, pas la replier ailleurs. Et l'invariant tient. « Ne pas être un runtime » ne veut pas dire « ignorer la topologie » : la décision de topologie est une décision, et une décision tracée est exactement ce que la porte vérifie.
Décidé avant le code (ADR-0017), ancré sur la doctrine, prouvé par la suite de tests. La méthode de runward, appliquée à runward.
Installer : npx runward init
Release v0.12.0 sur GitHub · CHANGELOG
← Toutes les nouveautés