Ingénierie système · Arcadia · SysML v2 · natif Git
Votre architecture système, en texte relisible.
ArcLang, c'est le MBSE en code : des modèles Arcadia écrits en texte, vérifiés par un compilateur qui ne ment jamais, comparés par leur sens, soumis à un jalon comme un logiciel de vol, et ouverts dans les deux sens, vers Capella et vers SysML v2.
requirements safety { req "REQ-AEB-001" "Obstacle detection" { description: "Detect obstacles at ≥ 150 m" safety_level: "ASIL-D" } } architecture logical { component "Sensor Fusion" { id: "LC-001" function "Fuse radar and camera" { latency: 25 ms } } } trace "LC-001" satisfies "REQ-AEB-001" $ arclang gate model.arc --standard iso26262 ✓ GATE PASS — 5/5 requirements verified, timing budget 90 ms ≤ 100 ms, HARA consistent
01 / POURQUOI LE TEXTE
Un diagramme qu'on ne peut pas comparer, c'est une architecture qu'on ne peut pas relire.
Les outils MBSE graphiques enferment l'architecture dans des bases opaques : pas de pull request, pas d'historique ligne à ligne, pas d'intégration continue. ArcLang met le modèle en texte, pour que cinquante ingénieurs créent des branches, relisent et fusionnent un système comme ils le font pour du logiciel. Les diagrammes restent : un par point de vue Arcadia, générés depuis le modèle et toujours à jour.
Écrire.
Les couches Arcadia (opérationnelle, système, logique, physique, EPBS) dans un langage strict et typé :
latency: 25 msest une durée, pas une chaîne. Une construction inconnue est une erreur localisée, jamais ignorée en silence :error at line 42, column 7.Vérifier.
Le compilateur résout chaque trace, chaque port et chaque allocation. Une référence qui ne mène nulle part fait échouer la compilation. Le jalon de production contrôle la couverture des exigences, la cohérence HARA/ASIL et les budgets temporels au regard de l'ISO 26262 et de la DO-178C.
Relire.
arclang diffcompare deux versions par identité stable : déplacer un bloc n'est pas un changement, renommer est une modification. On relit une liste de changements de sens, pas de lignes.Échanger.
Aller-retour avec Capella (identique à l'octet près), exigences en ReqIF vers DOORS et Polarion, squelettes d'architecture pour Simulink et System Composer, descriptions d'interface FMI 2.0.
02 / ARCADIA ET SYSML V2
La méthode d'Arcadia. L'expressivité de SysML v2. Un seul texte.
Arcadia donne sa méthode à l'ingénierie système : besoin opérationnel, architectures système, logique et physique, chacune tracée vers le niveau du dessus. SysML v2 a depuis donné aux modèles le langage qui leur manquait. ArcLang porte les deux, et traduit de l'un à l'autre sans rien perdre qu'il ne vous dise.
Des définitions réutilisées.
Un type de connecteur donne ses broches à chaque port, un type d'interface son protocole à chaque échange, un type d'allocation la nature de ses extrémités :
trace "PN-BECU" allocates "LC-BMS" { is: "Software deployment" }est vérifiée.Une architecture, toute une gamme.
Les variations portent leurs variantes, et une
configurationen choisit une de chaque. Le compilateur refuse un produit impossible ; les diagrammes dessinent celui que vous nommez.Des vues par préoccupation.
Étiquetez ce qui compte,
tags: ["Safety"], et une vue sûreté tient en une ligne qui se tient à jour d'elle-même :tagged: ["Safety"].Des analyses qui vérifient les exigences.
Un cas de test affirme des contraintes, et son verdict est calculé à chaque compilation. Une exigence dont l'analyse échoue n'est pas vérifiée, et le jalon le dit.
Des ports qui portent des ports, des bus à autant d'extrémités qu'il faut.
wheel.nuts.lugNutest vérifié à toute profondeur ;ends: [ecu.can, door.can, seat.can]est un seul échange, dessiné par une jonction.Tout modèle SysML v2, en entrée.
Plusieurs fichiers, résolus avec la bibliothèque standard de l'OMG ; parties, connexions, actions exécutées, messages et vues deviennent un modèle Arcadia qui compile. Ce qui ne peut pas venir est compté et nommé.
Tout modèle Arcadia, en sortie.
Vers SysML v2, accepté par le pilote de l'OMG avec la même syntaxe abstraite ; retour vers Capella à l'octet près, ce que Capella ne sait pas porter étant aplati et signalé.
03 / SIMULATION VÉRIFIÉE
De l'architecture à la simulation vérifiée.
Une exigence est vérifiée quand quelque chose l'a contrôlée. ArcLang referme cette boucle pour la physique : les ports de l'architecture physique deviennent des connecteurs Modelica, un cas de test la simule dans OpenModelica, et le verdict atteint le même jalon et la même chaîne d'intégration continue que tous les autres contrôles. Un outil absent donne un verdict non concluant, jamais une réussite.
L'architecture en code.
Un port dit ce qu'il transporte :
physics: electrical,mechanical_rotational,thermal,signal. Reliez deux ports qui transportent des physiques différentes et le modèle ne compile pas.La simulation Modelica en code.
arclang export -f modelicaécrit la structure de l'architecture physique, dessinée, de sorte que Modex et OMEdit l'affichent. La physique est un paquetage Modelica que vous écrivez et conservez : régénérer n'en écrase jamais une ligne.Un verdict, pas une courbe.
Un cas de test dit quoi simuler et ce qui doit tenir :
min("PN-BATT".soc) >= 0.1.arclang verifylance OpenModelica, en local ou dans Docker, et contrôle les unités. Dans l'exemple du véhicule électrique, à −10 °C et 100 km/h, la batterie de 82 kWh finit les 300 km avec 28,7 % de charge et celle de 64 kWh avec 8,7 %.Le jalon.
Une simulation en échec est bloquante. Un verdict absent ou périmé compte comme non vérifié, et le jalon indique la commande à lancer. Le verdict est mis en cache sous une clé calculée sur le modèle et les sources Modelica.
L'intégration continue.
Les mêmes commandes tournent dans GitHub Actions, GitLab CI, Azure DevOps ou Jenkins, et la demande de fusion reçoit un commentaire qui dit ce que le changement fait au modèle.
Une exigence qui échoue, trouvée avant la route
Les deux batteries parcourent les 300 km. Seule la preuve diffère, et elle est dans la construction : la batterie standard finit à 8,7 %, sous la réserve de 10 %, l'exigence n'est donc pas vérifiée et le jalon échoue. Cette sortie, abrégée, est celle que montre la documentation, obtenue avec OpenModelica 1.27.1.
$ arclang verify ev_range_simulation.arc ✗ TC-RANGE-STD "Winter range, standard pack": FAIL FAIL min(batteryPack.soc) = 0.08693 ✓ TC-RANGE-LR "Winter range, long range pack": PASS ok min(batteryPack.soc) = 0.2874 $ arclang gate ev_range_simulation.arc ✗ [requirements.verification] REQ-RANGE: verification cases fail PRODUCTION GATE: FAIL ✗ (1 blockers)
Le groupe motopropulseur dans OMEdit (OpenModelica 1.27.1) : moteur, inertie et réducteur de la bibliothèque standard Modelica, reliés aux connecteurs qu'ArcLang génère depuis l'architecture physique.
La caisse du véhicule : roue, masse et force de traînée. La physique est un paquetage Modelica que vous écrivez et gardez ; régénérer la structure ne l'écrase jamais.
Le même modèle simulé dans OMEdit : la batterie longue autonomie finit les 300 km à 28,7 %, la valeur que arclang verify vérifie face à la réserve de 10 %.
Avec quelle probabilité l'exigence tient, pas seulement si elle a tenu une fois
Une voiture rencontre des matins froids et des conducteurs pressés. Donnez à un cas de test ses paramètres incertains : ArcLang les tire en hypercube latin, simule chaque tirage dans OpenModelica, et ne valide le cas que si la probabilité que l'exigence tienne atteint celle exigée, au niveau de confiance demandé. Le jalon reprend ce verdict. R ou Python relisent les mêmes tirages pour les statistiques dont l'ingénieur a besoin ensuite.
$ arclang verify ev_range_simulation.arc ✓ TC-RANGE-LR "Winter range, long range pack": PASS Monte Carlo: 40 samples, 40 hold probability between 92.78 % and 100 % at 95 % confidence what moves the charge left: -0.88 speedController.target_speed +0.50 vehicleBody.ambient
Dans VS Code, le cas de test et ses résultats côte à côte : 200 simulations OpenModelica du pack standard, de −20 à 30 °C et de 75 à 115 km/h. 154 tiennent : la probabilité est entre 71,6 % et 81,8 %, sous les 90 % exigés, l'exigence n'est donc pas vérifiée. La vitesse de croisière pèse le plus sur la charge restante (−0,94).
@arclang dans GitHub Copilot Chat écrit le cas Monte-Carlo à partir d'une phrase : deux lois, 300 tirages, 0,99 à 95 % de confiance. Le compilateur le vérifie avant de le montrer ; un clic l'ajoute au modèle.
R relit les mêmes 200 tirages sans relancer de simulation : corrélations partielles et régression standardisée sur les rangs, avec intervalles bootstrap, en R de base.
Un tirage en échec rejoué sur le diagramme : le pack batterie entouré de rouge à l'instant où sa charge passe sous 10 %.
04 / FONCTIONS
Tout ce dont une équipe système a besoin pour livrer, vérifié en intégration continue plutôt que promis.
Un compilateur qui ne ment jamais
Analyse syntaxique stricte avec position dans le source, identité déterministe des éléments (UUIDv5 : même identifiant, même UUID, partout et pour toujours) et analyse sémantique qui traite une trace sans cible comme un échec de compilation. Si le modèle compile, le graphe de traçabilité est réel.
# l'identité est figée par des tests de valeurs de référence LC-001 → 8006ab91-390c-5908-8464-b353219dfc1f # …et recoupée avec une implémentation # indépendante, à chaque commit
Des diagrammes qu'on parcourt, sans les redessiner
Le compilateur dessine un diagramme par point de vue Arcadia : architectures opérationnelle, système, logique et physique, avec les fonctions dans leurs composants et les échanges sur leurs ports, ainsi que les capacités, les données, les modes et états, les scénarios et la décomposition produit. Suivez un élément d'une couche à l'autre jusqu'à ce qu'il réalise, repliez un conteneur ou ouvrez-le comme un diagramme à part entière, placez les blocs à la main. La disposition est un fichier à côté du modèle : elle est versionnée et relue avec lui.
$ arclang diagram aeb.arc -f html -o aeb.html ✓ 9 types de vue · un seul fichier autonome # D'une couche à l'autre "SensorFusion" satisfies "REQ-AEB-002" "SensorFusion" realized by "FusionModule" # aeb.layout.json : replis et placement, dans Git
Aller-retour Capella
Importez des modèles Capella natifs (184 éléments appariés sur le projet de référence), modifiez-les en texte, resynchronisez par UUID : le XML revient identique à l'octet près quand rien n'a changé.
Jalon de production
Une commande répond à la question « peut-on livrer cette conception ? » : satisfaction et vérification des exigences, ASIL recalculé à partir de S/E/C, budgets temporels additionnés le long des chaînes fonctionnelles, complétude des ICD.
Échange ReqIF
Import et export ReqIF (OMG) pour la boucle DOORS / Polarion : texte, hiérarchie et relations relus, identifiants d'origine conservés au retour.
Simulink et FMI
Scripts d'architecture System Composer, hiérarchie et Stateflow compris, et descriptions d'interface FMI 2.0 validées contre la norme, avec des GUID qui ne changent qu'avec l'interface.
SysML v2, dans les deux sens
Importe tout modèle SysML v2, en un ou plusieurs fichiers, avec la bibliothèque standard de l'OMG : connexions, allocations, séquences et vues. Exporte chaque modèle, vérifié élément par élément par le pilote de l'OMG. Ouvrez le Simple Vehicle Model de la spécification.
Modèles en plusieurs fichiers
import "subsystem.arc" : chaque équipe possède son fragment, le compilateur assemble l'ensemble et le vérifie. Les imports circulaires et les collisions d'identité sont détectés.
Diff sémantique
La revue de modèle comme liste de changements par identité. Utilisable en intégration continue : code de sortie 1 si le modèle a changé sans revue.
Un métamodèle typé
Les grandeurs portent leur unité et leur dimension : comparer une latence à un débit est une erreur détectée. Énumérations, multiplicités, assertions constraint et vos propres types, avec spécialisation. Le document du métamodèle est généré par le compilateur, et un test échoue dès que les deux divergent.
Systems Modeling API
arclang serve expose le modèle élément par élément, avec un commit d'API par commit Git et un diff par identité. L'écriture est désactivée par défaut, protégée par jeton, et chaque écriture devient un commit Git qui conserve vos commentaires.
Analyse de cybersécurité
Actifs primaires, menaces et leurs échelles, au niveau auquel ils appartiennent, comme dans le point de vue sécurité de Capella. Ils vont vers Capella et vers SysML v2, et en reviennent intacts.
Un atelier dans VS Code
Le texte du modèle d'un côté, ses diagrammes, son arbre et ses propriétés de l'autre, le même compilateur derrière. Cliquez ou tapez : le fichier est le même, et un agent IA le modifie à travers le compilateur.
Git sémantique : relire et fusionner un modèle, pas ses lignes
Comparez un modèle à n'importe quelle révision par identité d'élément, et le rapport dit ce que le changement provoque : le jalon avant et après, le budget qu'il dépasse. Chaque élément a un historique. Un pilote de fusion réunit deux branches qui ont touché des attributs différents de la même ligne, et marque un vrai conflit autour de l'élément. Une base de référence lie le verdict du jalon, la couverture et les exports à une étiquette git qu'un auditeur peut vérifier.
$ arclang diff brake.arc --from HEAD ~ modified SystemFunction 'Detect obstacle' latency: "40 ms" -> "80 ms" Production gate: PASS -> FAIL + blocker: functional_chain 'Detection to braking': sum of function latencies 130.0 ms exceeds the 100.0 ms budget $ arclang baseline verify v1.0 Baseline 'v1.0': VERIFIED
Branches, snapshots, fusions et voyage dans le temps
Une frise le long de l'atelier parcourt l'historique du modèle : chaque commit dessiné tel qu'il était, les snapshots en drapeaux, les fusions en losanges, et ce qui a changé depuis n'importe quel moment antérieur marqué sur le diagramme. Restaurez un élément ou tout le modèle depuis le passé, comme une modification que vous relisez ; l'historique n'est jamais réécrit. Les branches fusionnent élément par élément : seul un élément modifié différemment des deux côtés demande une décision.
Le modèle à v1.0, comparé au snapshot design-review-1 : le moniteur conducteur ajouté depuis en vert, l'actionneur passé d'ASIL-B à ASIL-C en orange.
Un commit en arrière : le modèle tel qu'il était quand le moniteur conducteur a été ajouté.
Une fusion où les deux branches ont modifié l'actionneur : seul cet élément est en litige, chaque version entière.
Le jalon dans votre chaîne d'intégration
arclang ci init écrit la chaîne pour GitHub Actions, GitLab CI, Azure DevOps ou Jenkins ; le contrôle nommé ArcLang gate peut être exigé sur la branche par défaut. Le SARIF 2.1.0 va vers l'analyse de code, et la demande de fusion reçoit un commentaire, mis à jour à chaque envoi. Les fichiers générés sont testés comme fichiers ; le premier passage chez votre fournisseur est leur vrai test, et la documentation le dit.
L'analyse d'impact, et l'hypothèse avant la modification
Ce qu'un changement atteint, par lien et par distance, avec le chemin qui l'explique. arclang impact --change applique une modification proposée à une copie, la compile, et dit ce qu'elle casserait avant que vous touchiez au modèle. Dans VS Code, la même analyse est un onglet vivant, où Appliquer est une seule annulation.
Et si la fusion de capteurs prenait 80 ms ? Calculé sur une copie, avant d'écrire quoi que ce soit : le jalon passe de PASS à FAIL, la chaîne de freinage demande 145 ms pour un budget de 100 ms. Apply the change l'écrit en une seule annulation ; Discard laisse le modèle intact.
Tableaux et matrices vivants
La couverture des exigences avec le verdict de chaque cas de test, la traçabilité, l'allocation, les interfaces N² et le dossier de contrôle d'interfaces, calculés par le compilateur. Modifiez une cellule et le modèle change ; exportez en CSV ou en Excel, ou collez dans PowerPoint.
Une IA de votre choix, un compilateur qui tranche
Huit fournisseurs, des modèles de VS Code à Anthropic, OpenAI, Mistral, Google, Azure, un Ollama local ou tout serveur compatible. Chaque proposition est d'abord compilée sur une copie, et Appliquer est une seule annulation. Désactivée, elle n'envoie rien.
Un atelier d'architecture dans la poche
Sur téléphone, le playground devient un atelier de conception assisté par IA : décrivez un système, ou photographiez un tableau blanc, et lisez sur place le dossier d'architecture compilé. Le même compilateur vérifié, partout. Essayez donc avec une suite MBSE de bureau.
vous> 📎 tableau.jpg : « modélise ça » ia> 6 composants, 4 exigences, déployés ✓ compilé · GATE PASS · dossier prêt à partager # depuis la banquette d'un taxi
De l'architecture au premier commit
Le modèle devient du code sur lequel construire : des contrats uniquement, jamais de comportement inventé. Les exports déterministes fournissent des en-têtes C99 qui compilent sans avertissement et du Protobuf que protoc transforme en Java, C++, Python, Go ou TypeScript. L'assistant IA lit aussi votre cible : un nœud FPGA reçoit des entités VHDL, une liaison CAN du C et une ébauche de DBC, un service JVM des interfaces gRPC. C'est proposé en contexte, généré à la demande et téléchargé d'un geste.
# l'assistant lit votre architecture node "SignalFPGA" → « Les entités VHDL ? » link protocol: CAN → « En-têtes C et matrice DBC ? » node "OrderService" → « Interfaces gRPC et Java ? » ⬇ interfaces.vhd · interfaces.h · interfaces.proto
05 / CONFIANCE
Conçu pour qu'on s'y fie pendant trente ans.
Les programmes aéronautiques et automobiles durent plus longtemps que les outils. La gouvernance d'ArcLang est pensée pour cette échelle de temps.
Prêt pour la qualification
Un kit d'aide à la qualification d'outil est fourni dans le dépôt : analyse TCL selon l'ISO 26262-8 §11, détermination du TQL selon la DO-330, inventaire des fonctions et des dysfonctionnements, et matrice de preuves qui renvoie à la suite de tests réelle.
Chaîne d'approvisionnement vérifiable
Licence MIT. Audit RustSec des dépendances à chaque commit. Les versions sont publiées avec leurs binaires, un fichier SHA256SUMS et des attestations de provenance de build GitHub.
Stabilité garantie
Le langage suit le versionnage sémantique et chaque version majeure est livrée avec sa note de migration. La dérivation des identités est figée par des tests de référence et chaque sortie est déterministe : un écart signifie toujours un changement, jamais du bruit.
06 / OFFRE
Gratuit là où il se diffuse. Payant là où il engage.
Open source, pour toujours
Le langage, le compilateur, la ligne de commande, le jalon et ce playground. Versions attestées, kit d'aide à la qualification dans le dépôt. L'absence de dépendance à un éditeur est la fonction principale : vos modèles sont des fichiers texte qui vous appartiennent.
Espace d'équipe
Revue de modèle hébergée avec diff sémantique visuel, tableaux de bord du jalon par programme, flux d'échange ReqIF, SSO. Pensé pour les équipementiers et les bureaux d'études.
Demander l'accès anticipé →Entreprise, hors réseau
Déploiement sur site, support de longue durée, accompagnement à la qualification d'outil (ISO 26262-8 / DO-330), services de migration depuis Capella et formation. Des générateurs d'interfaces avancés sont à la feuille de route entreprise : AUTOSAR ARXML, DDS IDL, spécifications Ada/SPARK, matrices CAN DBC.
Nous écrire →Conçu pour l'IA
Le playground intègre un assistant de conception IA : décrivez votre système, le modèle de langage écrit de l'ArcLang, le compilateur le vérifie, et la boucle tourne jusqu'à ce que le jalon passe. Parce qu'ArcLang est du texte soumis à un compilateur strict, il rend sûre l'ingénierie système assistée par IA : l'IA propose, le compilateur ne ment jamais. Un serveur MCP est fourni dans le dépôt pour Claude et d'autres assistants.
vous> conçois un système de gestion de batterie, ASIL-C ia> écriture du modèle… 4 composants, 6 exigences ✓ compilé en 3 ms · GATE PASS (6/6 vérifiées)
07 / ESSAYER
Le compilateur complet tourne dans votre navigateur. Votre modèle n'en sort jamais.
Le playground est le véritable compilateur ArcLang, le même cœur Rust que la ligne de commande, compilé en WebAssembly. La compilation, la validation, le jalon de sûreté et l'explorateur d'architecture s'exécutent tous dans le navigateur. Rien n'est envoyé, jamais. Collez un modèle confidentiel l'esprit tranquille. Et cela fonctionne sur téléphone : esquisser, décrire, relire, toute la chaîne d'outils tient dans la poche.