Air Desktop — index général
Carte structurelle du projet : ce qui existe, et où le trouver.
Ce document ne décrit pas l’avancement des travaux — c’est le rôle du suivi, document unique et vivant. Il ne consigne pas non plus les décisions : elles vivent dans les ADR.
Les parties factuelles de cette page — versions de sceau, nombre de crates,
arborescence, volumétrie — sont générées depuis leur source de vérité par
scripts/generer-index-general.py, et vérifiées à chaque PR. Elles ne peuvent
donc plus dériver du réel. La prose, elle, est écrite à la main.
Par où commencer
| Question | Document |
|---|---|
| Où en est le projet, quelle est la prochaine tâche ? | Suivi — état d’avancement |
| Quelles décisions ont été prises, et où en est leur mise en œuvre ? | Registre des ADR |
| Pourquoi ce projet existe-t-il ? | Vision · Charte |
| Comment le code doit-il être écrit ? | Principes d’ingénierie |
| Que doit faire précisément telle brique ? | Spécifications |
| Ce qui s’est passé, session par session | Journal |
Ordre d’autorité en cas de divergence : charte → principes d’ingénierie → ADR → specs → setup. Le suivi fait foi sur l’avancement ; cet index fait foi sur la structure.
Identité du projet
| Nom | Air |
| Identité publique | Air Desktop |
| Domaine | air-desktop.org |
| Documentation | https://docs.air-desktop.org |
| Dépôt | github.com/air-desktop-project/air |
| Préfixe des crates | air- |
| Licence | Mozilla Public License 2.0 |
Les couches
Air se construit de bas en haut. Une couche scellée a son API gelée : elle n’évolue plus que par descellement additif, qui exige un ADR et repose un tag.
| Couche | Sceau en vigueur | Crates | Rôle |
|---|---|---|---|
| 0 — syscalls | couche-0-v1.16 | 2 | air-sys-types + air-sys-syscall. Seule couche autorisée à contenir de l’unsafe. |
| 1 — briques Rust | couche-1-v3.8 | 37 | Managers de domaine, 100 % safe. N’évolue que par descellement additif. |
| 2 — services et outils | — | 53 | air-sshd, air-ssh, air-agent, air-keystore… Bâtis sur la couche 1 scellée. |
La règle de dépendance est stricte et vérifiée en CI (cargo xtask check-layers) :
seule la couche 1 consomme la couche 0 ; la couche 2 ne descend jamais
directement au syscall.
Décisions d’architecture
182 décisions d’architecture. Le registre complet — trié par numéro, avec liens FR/EN et avancement — est le document de référence :
| Mise en œuvre | Nombre |
|---|---|
| ✅ Fait | 99 |
| 🔨 En cours | 18 |
| ⏳ À faire | 42 |
| ♾️ Permanent | 23 |
Le registre est généré (scripts/generer-registre-adrs.py) : il ne peut plus diverger des fichiers présents sur disque.
Un ADR consigne une décision structurante : son contexte, la décision, ses conséquences. Ils sont numérotés et immuables une fois acceptés — toute évolution passe par un RFC (ADR-015), jamais par une retouche silencieuse.
Chaque ADR existe en français et en anglais. Le champ **Statut :** qu’il porte
décrit sa décision (Accepté, Proposé) ; la colonne « Mise en œuvre » du
registre décrit son avancement — deux dimensions distinctes.
Arborescence du dépôt
air/
├── crates/ # les crates du workspace, une par brique
│ ├── (couche 0) 2 crates
│ ├── (couche 1) 37 crates
│ └── (couche 2) 53 crates
├── docs/ # toute la documentation (voir la carte ci-dessous)
├── fuzz/ # cibles cargo-fuzz
├── maquette-zola/ # maquette d'évaluation d'un rendu possédé — TEMPORAIRE
├── rt/ # arbre hors-source des cibles `*-linux-air` (expérimental)
├── scripts/ # outillage de documentation et de vérification
├── xtask/ # commandes de développement (`cargo xtask …`)
├── AGENTS.md # mémo d'exécution pour les agents (EN)
├── CLAUDE.md # mémo d'exécution pour les agents (FR)
├── Cargo.lock # verrou committé (ADR-025, builds reproductibles)
├── Cargo.toml # manifeste du workspace
├── LICENSE # MPL 2.0
├── README-fr.md # présentation publique (FR)
├── README.md # présentation publique
├── REPRISE.md
├── book.toml # configuration mdBook
├── deny.toml # politique de licences et d'avis de sécurité
└── rust-toolchain.toml # toolchain épinglée
Carte de la documentation
Toute la documentation vit sous docs/. Les seuls points d’entrée à la racine
sont les fichiers conventionnels : README.md, README-fr.md, LICENSE,
CLAUDE.md, AGENTS.md.
| Rubrique | Documents | Contenu |
|---|---|---|
docs/vision/ | 2 | Vision — ce que le projet cherche à être |
docs/charte/ | 2 | Charte — les valeurs. Immuable |
docs/principes-ingenierie/ | 2 | Principes d’ingénierie — la méthode. Immuable |
docs/adrs/ | 365 | Décisions d’architecture (ADR) — voir le registre |
docs/specs/ | 105 | Spécifications techniques, par couche |
docs/guides/ | 16 | Guides pratiques |
docs/setup/ | 5 | Décisions opérationnelles (CI, style, outillage) |
docs/notes/ | 86 | Notes de travail, études, audits |
docs/architecture/ | 1 | Vues d’architecture transverses |
docs/draft/ | 2 | Brouillons — rien n’y fait autorité |
docs/ (racine) | 14 | Suivi, index, registres transverses |
Convention de nommage des fichiers
| Type | Forme | Exemple |
|---|---|---|
| ADR | ADR-NNN-titre-court-LL.md | ADR-108-air-keystore-fr.md |
| Documents fondateurs | thème-LL.md | vision-fr.md, charter-en.md |
| Specs et notes | thème-en-kebab-case.md | reseau-architecture-crates-fr.md |
Le numéro d’ADR est sur trois chiffres, le suffixe de langue est -fr ou
-en. Les deux langues sont obligatoires : une version manquante fait
échouer la vérification du registre.
Documents encore à produire
Ces documents n’existent pas, et c’est assumé : l’ouverture publique ne prime pas sur la couche 0 tant que celle-ci n’est pas opérationnelle en pratique. Ils sont listés ici pour mémoire, non comme un retard.
| Document | Objet |
|---|---|
CONTRIBUTING.md | Workflow Git, conventions, DCO, processus RFC |
SECURITY.md | Politique de divulgation des vulnérabilités |
CODE_OF_CONDUCT.md | Contributor Covenant 2.1 |
CHANGELOG.md | À démarrer, section [Unreleased] |
docs/guides/first-contribution.md | Le premier patch, pas à pas |
docs/maintainers/ | Release, modération, onboarding, traitement des CVE |
Les conventions de style, de test, de gestion d’erreurs et de commit ne sont pas
listées ici : elles font déjà autorité dans CLAUDE.md, dans les
principes d’ingénierie et dans
les ADR concernés. Les extraire en fichiers racine dupliquerait la source de
vérité — à ne faire qu’à l’ouverture publique, et par extraction, pas par
réécriture.
Tenir cette page à jour
Les blocs encadrés par <!-- GÉNÉRÉ:… --> ne se modifient pas à la main : ils
seraient écrasés, et la CI signalerait l’écart. Après un changement de structure
— nouveau crate, nouveau tag de sceau, nouvelle rubrique de documentation :
scripts/generer-index-general.py # met à jour les blocs générés
scripts/generer-index-general.py --check # ce que vérifie la CI
Pour ajouter une rubrique de documentation ou changer sa description, éditer la
table RUBRIQUES du script — la description est de la prose, seul le volume est
relevé sur disque.
Licence du document : MPL 2.0