DDelonix RuntimeGuide du contributeur

Architecture

Cette traduction peut être en retard sur la page anglaise, modifiée depuis la traduction. Lire la page en anglais

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 :

  1. Cargo.toml — le workspace : chaque crate membre, et chaque version de dépendance (les membres n’écrivent que { workspace = true }).
  2. bins/delonix-runtime-bin/src/main.rs — la CLI delonix. Chaque groupe de commandes est un module sous src/cmd/ ; suivez le groupe qui vous intéresse.
  3. crates/<couche>/<crate>/src/lib.rs — le moteur. Le répertoire est la couche (foundation → contexts → adapters / providers → interfaces), et chaque lib.rs s’ouvre sur un commentaire //! disant ce que fait le crate. Les crates a une section par crate.
  4. 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#

text
.
├── 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.dependencies] (chaque chemin de crate et chaque version externe) et [workspace.lints.clippy]. 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/adr/0040-engine-restructuring-layers-ports-node-contract.md
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.ignoreRevsFile .git-blame-ignore-revs. 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/SECURITY-RELEASES.md
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/adr/0008-proxmox-vm-backend.md
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/delonix-runtime-bin/ 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/delonix-node-api-bin/ 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/adr/0050-libvirt-linux-providers-capability-catalog.md
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/adr/0025-mcp-local-ai-control-surface.md
proto/ Le contrat de nœud delonix.node.v1 (proto/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/contract_gate.py (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/compat/cri-conformance.sh (la suite critest) et tests/compat/docker_api_smoke.py. 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/roadmap/13-improvements-traceability.md

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/contract_gate.py --update 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/providers/capability-matrix.md après un changement de déclaration. docs/adr/0050-libvirt-linux-providers-capability-catalog.md
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/dev_docs_site.py depuis docs/dev/. Ne jamais éditer le HTML. Régénéré avec python3 scripts/dev_docs_site.py 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>.routes.json, 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/proxmox_api_inventory.py docs/proxmox/api-9.2.2.routes.json --markdown > docs/proxmox/matrix-9.2.2.md après qu’une route soit ajoutée à delonix-proxmox ; le schéma seulement quand une nouvelle release est mesurée. docs/adr/0049-proxmox-api-coverage-measured-matrix-not-a-cluster-proxy.md
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/schema/v1/delonix.json quand un type de manifeste change. docs/adr/0007-generated-manifest-schema.md

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.yml -f tag=vX.Y.Z), 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/verify-images.sh. Un test unitaire (vmspec::every_shipped_recipe_is_valid_and_complete) é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/<version>/ (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/api/annotations.proto, 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/googleapis/README.md
.ai/ Skills neutres vis-à-vis de l’outil pour les assistants d’IA : skills/delonix-runtime-e2e-quality/ (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/contract_gate.py --update job contract gate (scripts/contract_gate.py)
docs/schema/ v1/delonix.json delonix manifest schema > docs/schema/v1/delonix.json job test, test o_schema_publicado_esta_em_dia_com_o_codigo dans bins/delonix-runtime-bin/src/cmd/schema.rs
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/gen-releases.sh 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/dev_docs.py job arch fitness, étape python3 scripts/dev_docs.py --check ; aussi rafraîchi par release.yml
docs/proxmox/ matrix-9.2.2.md python3 scripts/proxmox_api_inventory.py docs/proxmox/api-9.2.2.routes.json --markdown > docs/proxmox/matrix-9.2.2.md job script tests, scripts/test_proxmox_api_inventory.py (test_the_committed_matrix_is_up_to_date)
docs/handbook/ chaque page python3 scripts/dev_docs_site.py job generated docs and valid examples, python3 scripts/dev_docs_site.py --check ; aussi rafraîchi par release.yml
scripts/ cli_baseline.tsv, arch_baseline.json, lang_baseline.json scripts/cli-tree.sh --update, arch_fitness.py --update, lang_ratchet.py --update 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 dans delonix-net-rules ; les enregistrements uniquement-données et les noms vont dans delonix-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 un if provider == … dans du code existant.
  • Un nouveau serveur de protocole → crates/interfaces/, composé par exactement un binaire dans bins/.
  • Une commande ou une option de la CLI → un module dans bins/delonix-runtime-bin/src/cmd/, avec sa traduction portugaise dans data/pt.po.
  • Un nouveau crate → le répertoire de sa couche et la table LAYERS dans scripts/arch_fitness.py et [workspace.dependencies] dans Cargo.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.