Architecture
Structure du projet
Avant de lire : Cloner, compiler et tester — vous avez un checkout qui compile, et vous savez quels gates existent.
Cette page est la carte du dépôt : ce qu’est chaque fichier et répertoire de premier niveau, qui le modifie et quand, et quelles parties sont générées et ne doivent jamais être éditées à la main. Lisez-la après Cloner, compiler et tester et avant Architecture — l’architecture explique pourquoi le code est découpé ainsi ; cette page vous dit où se trouvent les choses. Après elle, vous pourrez situer n’importe quel chemin du dépôt, dire qui le modifie, et savoir si vous pouvez l’éditer à la main ou devez le régénérer.
Un gate de CI la garde honnête : python3 scripts/dev_docs.py --check échoue quand un chemin de
premier niveau suivi (ou un répertoire de second niveau de crates/, bins/ ou docs/) manque
dans les tableaux ci-dessous, ou quand un tableau nomme un chemin qui n’existe plus.
Lire le dépôt en cinq minutes#
Commencez à la racine et suivez les dépendances vers l’intérieur :
Cargo.toml— le workspace : chaque crate membre, et chaque version de dépendance (les membres n’écrivent que{ workspace = true }).bins/delonix-runtime-bin/src/main.rs— la CLIdelonix. Chaque groupe de commandes est un module soussrc/cmd/; suivez le groupe qui vous intéresse.crates/<couche>/<crate>/src/lib.rs— le moteur. Le répertoire est la couche (foundation → contexts → adapters / providers → interfaces), et chaquelib.rss’ouvre sur un commentaire//!disant ce que fait le crate. Les crates a une section par crate.docs/dev/— ce manuel.docs/adr/— les décisions derrière la structure.
AGENTS.md est le long journal de travail du projet, en portugais. Il est utile pour trouver où
chercher, mais certaines parties sont obsolètes ; vérifiez dans le code ce qu’il affirme.
Arborescence annotée#
.
├── Cargo.toml, Cargo.lock workspace members, shared dependency versions, lock file
├── rust-toolchain.toml pinned Rust toolchain (clippy + rustfmt)
├── buf.yaml buf modules/lint for the node contract in proto/
├── deny.toml cargo-deny policy (advisories, licences, sources)
├── Makefile, Delonixfile release binaries and the secondary CLI image
├── AGENTS.md project journal and agent rules (Portuguese)
├── ARCHITECTURE.md C4 model of the engine (Portuguese)
├── README.rst, CONTRIBUTING.md user entry point, contributor entry point
├── GOVERNANCE.md, MAINTAINERS.md, CODE_OF_CONDUCT.md, SECURITY.md, LICENSE
├── .clinerules, .cursorrules pointers to AGENTS.md for AI coding tools
├── .dockerignore, .gitignore, .git-blame-ignore-revs
├── .ai/ skills for AI assistants (E2E quality)
├── .github/ CI and release workflows, CODEOWNERS, issue/PR templates
├── crates/
│ ├── foundation/ pure shared types and rules (no mechanism)
│ ├── contexts/ Compute, Stack, security decisions
│ ├── adapters/ Linux, OCI, SDN, VM, volumes, state, scanner, telemetry
│ ├── providers/ remote systems behind ports (Proxmox VE, TrueNAS)
│ └── interfaces/ CRI, local management API, node API, MCP server
├── bins/
│ ├── delonix-runtime-bin/ the `delonix` CLI (+ templates, pt.po catalogue)
│ ├── delonix-mgmt-bin/ the `delonix-mgmt` binary
│ ├── delonix-node-api-bin/ the `delonix-node-api` binary
│ └── delonix-mcp-bin/ the `delonix-mcp` binary
├── proto/ node contract delonix.node.v1 (draft, ADR-0040)
├── third_party/ vendored googleapis protos (Apache-2.0)
├── tests/ out-of-tree compatibility scripts (CRI, Docker API)
├── docs/
│ ├── adr/ Architecture Decision Records
│ ├── api/ OpenAPI — generated from proto/
│ ├── comandos/ per-command user pages — generated by docs/gen.py
│ ├── dev/ this handbook (English + translations)
│ ├── discovery/ dated investigations (historical)
│ ├── handbook/ this handbook as HTML — generated
│ ├── releases/ release notes, one per version (historical)
│ ├── roadmap/ improvement-programme traceability matrix
│ ├── runtime/ dated runtime discovery (historical)
│ └── schema/ manifest JSON Schema — generated from code
├── scripts/ CI gates, generators, E2E/chaos harnesses, installer
├── examples/ manifests validated by CI
├── images/ one folder per VM image: a `vm.yaml` recipe and a README
├── dist/ systemd unit for delonix-cri
├── editors/ VMfile syntax for Vim and VS Code
└── reports/ dated audit reports (historical)
Fichiers de premier niveau#
| Chemin | Ce que c’est | Qui le modifie / quand | Pour aller plus loin |
|---|---|---|---|
Cargo.toml |
Racine du workspace : la liste des membres, [workspace.package], [workspace. (chaque chemin de crate et chaque version externe) et [workspace.. Sa version est la tag publiée. |
Quiconque ajoute un crate ou une dépendance ; la version ne change que dans un commit de release (scripts/version_gate.py). |
Conventions de code, Flux de contribution |
Cargo.lock |
Graphe de dépendances résolu pour tout le workspace ; les builds utilisent --locked. |
Mis à jour par cargo quand les dépendances changent ; commitez-le avec ce changement. | Cloner, compiler et tester |
rust-toolchain.toml |
Épingle le canal Rust avec rustfmt et clippy, pour que le dev et la CI compilent avec le même compilateur. |
Les mainteneurs, dans un commit dédié. | Préparer votre environnement |
buf.yaml |
Configuration buf v2 : le module proto/ (vérifié par lint) et le module vendorisé third_party/googleapis (non vérifié), avec les exceptions de lint écrites. |
Quiconque modifie les règles du contrat de nœud. | docs/ |
deny.toml |
Politique cargo-deny : avis (chaque ignoré avec une raison), licences, sources. Exécuté par le job de CI cargo-deny. |
Quiconque ajoute une dépendance qui le déclenche — avec une justification écrite. | Cloner, compiler et tester |
Makefile |
Cibles de commodité : binaries (release de delonix + delonix-cri, l’artefact principal), image, ghcr-push, bench, coverage. |
Les mainteneurs. | Cloner, compiler et tester |
Delonixfile |
Build multi-étapes de l’image de container secondaire de la CLI (construit delonix + delonix-cri depuis les sources). |
Les mainteneurs, quand le build d’image change. | Delonixfile et VMfile |
.dockerignore |
Garde target/, dist/ et .git hors du contexte de build du Delonixfile. |
Rarement. | — |
.gitignore |
Ignore target/, __pycache__/ et les fichiers locaux d’outils d’agent. |
Rarement. | — |
.git-blame-ignore-revs |
Commits que git blame doit sauter (l’exécution rustfmt sur tout le workspace). Activez avec git config blame.. |
Quiconque fait atterrir un commit de reformatage massif. | — |
AGENTS.md |
Journal du projet et règles d’agent, en portugais : l’identité et la frontière du moteur (canonique), les gates, et un long historique par fonctionnalité. Certaines sections sont obsolètes. | Les mainteneurs et contributeurs qui consignent décisions et constats ; les conflits se résolvent en gardant les deux côtés. | Commencer ici |
ARCHITECTURE.md |
Modèle C4 (contexte, containers, composants) et conception fonctionnelle du système, en portugais, rendu sur le site utilisateur. | Écrit à la main, tenu synchronisé avec le code lors de changements structurels. | Architecture |
README.rst |
Le point d’entrée visible de l’utilisateur : ce qu’est Delonix, l’installation, les premières commandes. | Modifié avec les fonctionnalités visibles à l’utilisateur et les releases. | Publier la documentation |
CONTRIBUTING.md |
Courte porte d’entrée du contributeur qui renvoie vers docs/dev/. |
Les mainteneurs du manuel. | Flux de contribution |
GOVERNANCE.md |
Comment les décisions sont prises (modèle à mainteneur unique, ADR pour les décisions structurelles). | Les mainteneurs. | docs/adr/README.md |
MAINTAINERS.md |
Qui maintient quelle zone (un seul mainteneur aujourd’hui). | Les mainteneurs. | GOVERNANCE.md |
CODE_OF_CONDUCT.md |
Contributor Covenant. | Les mainteneurs. | — |
SECURITY.md |
Comment signaler une vulnérabilité en privé (GitHub Private Vulnerability Reporting). | Les mainteneurs. | docs/ |
LICENSE |
Licence Apache-2.0 du projet. | Jamais, en pratique. | — |
.clinerules |
Fichier pointeur pour l’assistant Cline : « les règles sont dans AGENTS.md ». Son décompte de crates est obsolète ; AGENTS.md et Les crates font autorité. |
Rarement. | — |
.cursorrules |
Le même pointeur, pour Cursor. | Rarement. | — |
Code source (crates/, bins/, proto/, tests/)#
La liste des crates, la couche de chacun et qui dépend de qui sont des faits générés dans Architecture et Les crates ; ils ne sont pas répétés ici.
| Chemin | Ce que c’est | Qui le modifie / quand | Pour aller plus loin |
|---|---|---|---|
crates/ |
Tous les crates de bibliothèque, un répertoire par couche (ADR-0040). scripts/arch_fitness.py refuse un crate dont le répertoire n’est pas la couche déclarée dans sa table LAYERS, et toute dépendance allant contre la direction autorisée. |
Toute fonctionnalité du moteur. | Architecture |
crates/foundation/ |
Fondation pure : le modèle uniquement-données — erreurs, enregistrements de données simples (Status, les enregistrements de pare-feu), le modèle de secrets, les noms générés, les classes de code de sortie et DX_* (delonix-model), et des règles réseau sans dépendance (delonix-net-rules). Ne dépend que de la fondation. |
Changements qui ajoutent un type partagé ou une règle pure. | Les crates |
crates/contexts/ |
Contextes bornés avec les cas d’usage : Compute, avec les enregistrements Container et Vm (delonix-compute), les propres assistants du nœud — journal d’événements, vérifications d’hôte et de processus, répartition serveur (delonix-node) —, Stack — Kinds, réconciliateur, révisions (delonix-stack) — et les décisions de sécurité du nœud (delonix-security-runtime). |
Fonctionnalités qui changent ce que le moteur décide. | Les crates |
crates/adapters/ |
Mécanismes sur ce nœud : namespaces/cgroups Linux (delonix-linux), images OCI (delonix-oci), réseau et pare-feu (delonix-sdn), microVM (delonix-vm), volumes (delonix-volume), état persisté et coffre de secrets (delonix-state), analyse de vulnérabilités (delonix-scanner), logging/métriques/traçage (delonix-telemetry). |
Fonctionnalités qui touchent le noyau, le disque ou un outil local. | Les crates, Initiation au cloud native |
crates/providers/ |
Systèmes distants derrière un port : un nœud Proxmox VE en tant que VmBackend (delonix-proxmox) et le provisionnement TrueNAS (delonix-truenas). |
Changements à une intégration de provider ; un nouveau provider entre ici comme implémentation d’un port. | docs/ |
crates/interfaces/ |
Serveurs qui exposent le moteur : le CRI de Kubernetes (delonix-cri, qui livre aussi le binaire delonix-cri), l’API de gestion locale (delonix-mgmt), le serveur du contrat de nœud (delonix-node-api) et le serveur MCP (delonix-mcp). |
Changements à l’un de ces protocoles. | Standards cloud native |
bins/ |
Crates binaires. Chacun compose une interface (imposé par arch_fitness.py). |
Toute fonctionnalité visible dans la CLI. | Architecture |
bins/ |
La CLI delonix : src/main.rs, un module par groupe de commandes dans src/cmd/, le catalogue de messages en portugais data/pt.po, les modèles de projet init dans templates/, build.rs, et tests/architecture.rs. |
Toute fonctionnalité avec une commande, une option ou un message. | Conventions de code |
bins/delonix-mgmt-bin/ |
Le binaire delonix-mgmt : un main.rs mince au-dessus de delonix-mgmt. |
Rarement ; la logique vit dans le crate d’interface. | Les crates |
bins/ |
Le binaire delonix-node-api : un main.rs mince au-dessus de delonix-node-api (le contrat de nœud sur un socket unix, ADR-0040 P5). |
Rarement ; la logique vit dans le crate d’interface. | docs/ |
bins/delonix-mcp-bin/ |
Le binaire delonix-mcp : un main.rs mince au-dessus de delonix-mcp. |
Rarement ; la logique vit dans le crate d’interface. | docs/ |
proto/ |
Le contrat de nœud delonix.node.v1 (proto/), marqué brouillon ; source de vérité pour le gRPC et le HTTP/JSON et pour docs/api/openapi.yaml. Vérifié par scripts/ (format, lint, changements cassants, mappages HTTP, OpenAPI). |
Changements de contrat, relus avec soin — les changements cassants contre la dernière tag échouent. | proto/README.md, ADR-0040 |
tests/ |
Vérifications de compatibilité hors arborescence cargo, pas des tests cargo : tests/ (la suite critest) et tests/. Les tests d’intégration cargo vivent dans le propre tests/ de chaque crate. |
Quiconque travaille sur la compatibilité CRI ou API Docker. | docs/cri-conformance.md, Cloner, compiler et tester |
fuzz/ |
Cibles cargo-fuzz sur des parseurs écrits à la main alimentés par de l’entrée non fiable (un Dockerfile d’un dépôt cloné, une chaîne de référence d’image). Son propre [workspace], pour que les flags de build du sanitizer ne touchent jamais celui du principal ; le job CI fuzz fait tourner chaque cible 60s par push/PR. |
Quiconque ajoute un parseur écrit à la main pour de l’entrée contrôlée de l’extérieur. | M04 de docs/ |
Documentation (docs/…)#
docs/ est aussi la racine de GitHub Pages. Ses fichiers de premier niveau sont un mélange : les
pages HTML (index.html, cheatsheet.html, estrutura.html, …) et .nojekyll sont générés
par docs/gen.py ; gen.py lui-même et du Markdown comme cli-stability.md, gitops.md,
estrutura.md, guia-vm-lab.md sont des sources écrites à la main qu’il rend ; RELEASES.md est
généré par scripts/gen-releases.sh ; et des rapports datés (AUDITORIA-E2E.md,
RELATORIO-PRE-PRODUCAO.md, paridade-docker-podman.md, comparacao-medida.md,
sovereignty-engine.md) consignent ce qui a été mesuré à une date donnée.
| Chemin | Ce que c’est | Qui le modifie / quand | Pour aller plus loin |
|---|---|---|---|
docs/ |
Racine de la documentation et site utilisateur (voir le paragraphe ci-dessus). | Les changements visibles de l’utilisateur régénèrent le site avec python3 docs/gen.py ; la CI échoue si le docs/ commité diffère du régénéré. |
Publier la documentation |
docs/adr/ |
Architecture Decision Records, NNNN-title.md, avec un index dans docs/adr/README.md. Les ADR acceptés ne sont jamais réécrits — un nouvel ADR les remplace. |
Un contributeur proposant une décision structurelle. | docs/adr/README.md, Flux de contribution |
docs/api/ |
openapi.yaml, généré depuis proto/ par protoc-gen-openapi. Ne jamais l’éditer. |
python3 scripts/ après un changement dans proto/. |
proto/README.md |
docs/comandos/ |
Une page HTML par groupe de commandes de la CLI, générée par docs/gen.py à partir du vrai --help du binaire de release plus du texte éditorial dans le générateur. |
Jamais à la main : éditez docs/gen.py, recompilez le binaire, régénérez. |
Publier la documentation |
docs/dev/ |
Ce manuel du contributeur : source Markdown en anglais, avec des traductions pt-AO/ et fr-FR/ portant un hash translated-from. Les régions entre marqueurs dev-docs:begin/dev-docs:end sont générées par scripts/dev_docs.py ; le reste est écrit à la main. |
Les mainteneurs du manuel ; les régions générées suivent le code et sont rafraîchies au moment de la release. | Publier la documentation |
docs/providers/ |
capability-matrix.md, la matrice DÉCLARÉE des capacités des providers (ADR-0050), générée par delonix provider matrix ; un test dans delonix-runtime-bin échoue quand elle diffère de la sortie. |
delonix provider matrix > docs/ après un changement de déclaration. |
docs/ |
docs/discovery/ |
Investigations et plans numérotés et datés (inventaires, spikes avec leurs fichiers de résultat bruts). Archives historiques — ne pas réécrire ; en écrire une nouvelle. | Quiconque mène une investigation avant un changement structurel. | docs/adr/ |
docs/handbook/ |
Ce manuel sous forme de site (en/, pt-AO/, fr-FR/, zh-CN/, index.html), généré par scripts/ depuis docs/dev/. Ne jamais éditer le HTML. |
Régénéré avec python3 scripts/ après un changement dans docs/dev/, et au moment de la release. |
Publier la documentation |
docs/proxmox/ |
La matrice de couverture de l’API Proxmox VE (ADR-0049) : api-<ver>., le schéma d’une release nommée extrait du apidoc.js d’un nœud avec sa provenance (date de récupération, sha256), et matrix-<ver>.md, générée à partir de lui et des routes que le crate provider appelle. Ne jamais éditer la matrice. |
python3 scripts/ après qu’une route soit ajoutée à delonix-proxmox ; le schéma seulement quand une nouvelle release est mesurée. |
docs/ |
docs/releases/ |
Notes de release, un v<version>.md par release. Un commit de release doit ajouter la sienne (version_gate.py). Historique — ne pas réécrire les notes passées. |
Le commit de release. | Flux de contribution |
docs/roadmap/ |
Matrice de traçabilité d’un programme d’amélioration, où chaque cellule cite une mesure ou dit « non mesuré ». | Les mainteneurs, au fur et à mesure que les éléments sont mesurés ou clos. | — |
docs/runtime/ |
Découverte datée du runtime (état actuel, carte de dépendances de crates, cible-vs-réalité). Historique : les noms de crate qui s’y trouvent précèdent des renommages ultérieurs. | Non mis à jour ; remplacé par Architecture et Les crates. | Architecture |
docs/schema/ |
v1/delonix.json, le JSON Schema du manifeste, généré depuis le code (ADR-0007). |
delonix manifest schema > docs/ quand un type de manifeste change. |
docs/ |
Outillage, CI et empaquetage (scripts/, .github/, dist/, editors/, examples/, reports/, third_party/, .ai/)#
| Chemin | Ce que c’est | Qui le modifie / quand | Pour aller plus loin |
|---|---|---|---|
scripts/ |
Gates (arch_fitness.py, lang_ratchet.py, contract_gate.py, version_gate.py, docs_cli_gate.py, cli-tree.sh, dev_docs.py) avec leurs bases de référence (arch_baseline.json, lang_baseline.json, cli_baseline.tsv), des générateurs (dev_docs_site.py, gen-releases.sh, sbom.py), des harnais (e2e.sh, chaos.sh, critest.sh, bench.sh, coverage.sh), l’installateur install.sh, des builds d’images d’appliance dans appliances/, et des sondes de spike dans spikes/. |
Quiconque a un changement qui déplace un ratchet (abaisse la base de référence dans le même commit) ; les mainteneurs pour le reste. | Cloner, compiler et tester |
.github/ |
workflows/ci.yml (chaque gate au push et PR vers main), chaos.yml (harnais de chaos), release.yml (manuel, gh workflow run release.), vm-image.yml et vm-appliances.yml (publication manuelle d’images), plus CODEOWNERS, des modèles d’issue et de PR et un fichier pointeur pour GitHub Copilot. |
Les mainteneurs ; un nouveau gate est ajouté ici et documenté dans le manuel. | Cloner, compiler et tester, Publier la documentation |
dist/ |
delonix-cri.service, l’unité systemd du serveur CRI (aussi embarquée dans le binaire). |
Quiconque change la façon dont delonix-cri s’exécute sous systemd. |
Standards cloud native |
editors/ |
Coloration syntaxique du VMfile : vim/ (ftdetect + syntax) et vscode/ (configuration de langage + grammaire TextMate). |
Quiconque change la grammaire du VMfile. | Delonixfile et VMfile |
examples/ |
Manifestes d’exemple par Kind, un labo réseau multi-fichiers (lab-rede/) et un petit projet complet (delonix-temp/). Le job docs de la CI fait un dry-run de chaque examples/*.yaml, donc un exemple obsolète ou cassé fait échouer le build. |
Toute fonctionnalité qui ajoute ou change un Kind. | Delonixfile et VMfile |
images/ |
Un dossier par image de VM : ubuntu, debian, rocky, fedora (recettes personnalisées qui se construisent hors ligne) et huit appliances (opnsense, proxmox, truenas, openstack, monitoring, carbonio, glpi, wazuh) dont le vm.yaml nomme un builder dans scripts/appliances/. Chacun a un README ; images/README.md les indexe et explique scripts/. Un test unitaire (vmspec::) échoue si une recette cesse de se parser ou pointe vers un fichier ou un builder absent. |
Quiconque ajoute une distribution ou une appliance, ou change le schéma de vm.yaml. |
Delonixfile et VMfile |
reports/ |
Rapports d’audit datés : code-quality/ et production-readiness/ (inventaire, matrice d’écarts, backlog). Archives historiques d’un audit à un commit — ne pas réécrire ; rien n’y est implémenté du seul fait d’y être listé. |
Quiconque mène un nouvel audit (nouveaux fichiers). | — |
third_party/ |
Protos googleapis vendorisés (google/, http.proto) utilisés pour le mappage HTTP du contrat de nœud. Apache-2.0, en-têtes de licence conservés ; le commit source est consigné dans son README.md. Jamais édité ici. |
Quiconque met à jour les protos vendorisés, les deux fichiers depuis un même commit amont. | third_party/ |
.ai/ |
Skills neutres vis-à-vis de l’outil pour les assistants d’IA : skills/ (taxonomie de tests, contrat de provider, vérifications de sécurité, modèles de rapport). |
Les mainteneurs. | — |
Généré vs écrit à la main#
Tout ce qui suit est produit par une commande. Éditez la source, exécutez le générateur, commitez les deux — et attendez-vous à ce que la CI échoue si vous éditez la sortie à la main.
| Chemin | Fichier(s) généré(s) | Commande de génération | Gate de CI qui le vérifie |
|---|---|---|---|
docs/api/ |
openapi.yaml |
python3 scripts/ |
job contract gate (scripts/) |
docs/schema/ |
v1/delonix.json |
delonix manifest schema > docs/ |
job test, test o_schema_publicado_esta_em_dia_com_o_codigo dans bins/ |
docs/comandos/ |
chaque page | python3 docs/gen.py (nécessite cargo build --release -p delonix-runtime-bin) |
job generated docs and valid examples, étape « O site publicado tem de ser o gerado » (git diff sur docs/) |
docs/ |
*.html de premier niveau, .nojekyll |
python3 docs/gen.py |
la même étape que ci-dessus |
docs/ |
RELEASES.md |
bash scripts/ |
aucun en CI : release.yml le régénère et le commite après chaque release |
docs/dev/ |
uniquement les régions dev-docs |
python3 scripts/ |
job arch fitness, étape python3 scripts/ ; aussi rafraîchi par release.yml |
docs/proxmox/ |
matrix-9.2.2.md |
python3 scripts/ |
job script tests, scripts/ (test_the_committed_matrix_is_up_to_date) |
docs/handbook/ |
chaque page | python3 scripts/ |
job generated docs and valid examples, python3 scripts/ ; aussi rafraîchi par release.yml |
scripts/ |
cli_baseline.tsv, arch_baseline.json, lang_baseline.json |
scripts/, arch_fitness., lang_ratchet. |
jobs cli surface (cli-tree.sh --gate), arch fitness, lang ratchet |
Cargo.lock |
le fichier de verrouillage | cargo |
chaque job cargo compile avec --locked |
Pas du tout commité : les pages de manuel (delonix man --dir, vérifiées avec groff en CI) et
target/.
Où va un nouveau fichier ?#
- Un type ou une règle que n’importe quelle couche peut nommer, sans E/S →
crates/foundation/. Les mathématiques réseau pures vont dansdelonix-net-rules; les enregistrements uniquement-données et les noms vont dansdelonix-model. - Une décision ou un cas d’usage (quoi exécuter, ce que signifie un Kind, un plan) →
crates/contexts/. - Du code qui appelle le noyau, le disque ou un outil local (
ip,nft,qemu-img) →crates/adapters/, dans le crate qui possède ce mécanisme. - Une intégration avec un système distant → une nouvelle implémentation de port dans
crates/providers/, jamais unif provider == …dans du code existant. - Un nouveau serveur de protocole →
crates/interfaces/, composé par exactement un binaire dansbins/. - Une commande ou une option de la CLI → un module dans
bins/delonix-runtime-bin/src/cmd/, avec sa traduction portugaise dansdata/pt.po. - Un nouveau crate → le répertoire de sa couche et la table
LAYERSdansscripts/arch_fitness.pyet[workspace.dependencies]dansCargo.toml, dans le même commit. - Un manifeste d’exemple →
examples/(la CI en fait un dry-run). Une décision structurelle →docs/adr/. Documentation pour contributeurs →docs/dev/.
Les règles derrière cette liste, avec des exemples, se trouvent dans Conventions de code — Structure : où va le code et Les crates.
Suivant : Architecture — pourquoi le code est découpé ainsi : les couches, les processus en exécution, le graphe des crates et l’état sur disque.