ADR-065 — Descellement additif couche-1-v1.1 : AirRuntime::errno_location
Statut : Accepté (2026-07-03, autorisation BDFL — l’additif errno_location
et la délégation des re-sceaux additifs ont été approuvés explicitement). RFC de
structure (ADR-015). Applique le modèle de
re-sceau additif du sceau couche 1 (ADR-062),
précédent couche 0 ADR-051.
Catégorie : Descellement additif de la couche 1 scellée (couche-1-v1.0 →
couche-1-v1.1). Aucune rupture ; jalons antérieurs conservés.
Contexte
Le premier toit posé sur la couche 1 scellée — la libc C-ABI scopée OpenSSH
(roadmap docs/roadmap-libc-openssh-fr.md, jalon M0) — révèle, exactement comme
anticipé (ADR-062 : « la libc est le driver des additifs v1.x »), un premier
besoin non couvert : __errno_location() (le errno C-ABI) doit rendre l’adresse
stable, par-thread de l’errno que la couche 1 possède déjà (#[thread_local]
d’air-runtime), pour que la libc et le PAL partagent un seul canal errno
(zéro globale, vision Air).
Décision
Descellement additif couche-1-v1.1 : on ajoute à air-runtime (crate
scellée) :
AirRuntime::errno_location() -> *mut i32(adresse par-thread de l’errno) ;- la méthode support
location()dans les trois branches de stockage de l’errno ; thread_control_block::errno_location.
Purement additif : aucune signature publique existante n’est modifiée ; seule la
surface grandit. Host-testé (2 tests). Les jalons couche-1-v1.0 sont conservés
intégralement.
Gouvernance — délégation des re-sceaux additifs (BDFL, 2026-07-03)
Le BDFL a délégué au superviseur les tags de re-sceau additif-seulement
(option B) : tout descellement purement additif révélé par la production des toits
est traité par le superviseur (ADR de descellement + tag couche-1-v1.x), sans
autorisation au cas par cas. Seuls sont remontés au BDFL : les changements
non-additifs (rupture) et les compromis de sécurité. Cet ADR-065 et le tag
couche-1-v1.1 s’inscrivent sous cette délégation (l’additif lui-même a néanmoins été
approuvé explicitement, étant le premier).
Conséquences
- Tag git
couche-1-v1.1posé sur le commit de merge M0 (signé). air-runtimegagne une méthode ; les consommateurs decouche-1-v1.0restent compatibles (additif).- Précédent posé : les additifs futurs révélés par la libc →
couche-1-v1.2, etc., chacun avec son ADR de descellement, sous la délégation ci-dessus.
Alternatives rejetées
- Faire la libc lire l’
errnoen direct de la couche 0. Rejeté : la couche 1 est le seul consommateur de la couche 0 (doctrine) ; la libc passe par la couche 1. - Une globale
errnodédiée à la libc. Rejeté : zéro globale libc (vision Air) ; canalerrnounique partagé libc ⇄ PAL, per-thread.
Suite
- Tag
couche-1-v1.1après merge M0. Note de re-sceau dansINDEX.md+etat-avancement.md.