docs: put the promotion chain the right way round

The chain climbs experimental-silo, then landing-silo, then main: a
change is attempted in testing before it becomes a nightly candidate for
stable. The document had the two silos the other way round, which is how
the Fronius work ended up one rung below stable while it had only ever
been verified against the bench simulator.

Corrected in the diagram, the promotion criteria, the fix table and its
downward path, the packaging channel list and the agent rules. The
channel each branch feeds is unchanged: experimental-silo is testing,
landing-silo is nightly.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Patrick Schurig 2026-08-02 10:49:39 +02:00
parent 6ac9a1d019
commit 30b58dbf1e

View File

@ -24,29 +24,29 @@ amont.
## Branches et canaux
```
feature/* ──► landing-silo ──► experimental-silo ──► main
(nightly) (testing) (stable)
feature/* ──► experimental-silo ──► landing-silo ──► main
(testing) (nightly) (stable)
```
Vers la droite on promeut, vers la gauche on redescend un correctif. Une correction ne saute
jamais un cran.
Les trois branches existent sur le remote depuis le 2026-08-02. Les deux silos ont été créés
vides depuis `main` ; `landing-silo` a ensuite reçu `feature/fronius-sunspec` comme premier
contenu, `experimental-silo` est encore au niveau de `main`. Avant cette date le modèle
ci-dessus était une intention, pas un état du dépôt.
vides depuis `main` ; `experimental-silo` a ensuite reçu le travail Fronius comme premier
contenu, `landing-silo` est encore au niveau de `main`. Avant cette date le modèle ci-dessus
était une intention, pas un état du dépôt.
`experimental-silo` n'est pas une branche de travail : elle ne reçoit que ce qui a déjà survécu au
nightly. Le travail se fait dans `feature/*`.
Aucun silo n'est une branche de travail : `landing-silo` ne reçoit que ce qui a déjà survécu à
`experimental-silo`. Le travail se fait dans `feature/*`.
### Critères de promotion
| Passage | Critère |
|---|---|
| commits dans `feature/*` | `verify` en local, l'agent boucle seul |
| `feature/*` → `landing-silo` | PR, `verify` vert sur le runner, AC de la spec couverts par des tests |
| `landing-silo` → `experimental-silo` | build complet propre, banc nocturne vert |
| `experimental-silo` → `main` | validation matérielle nommée : appareil, firmware, configuration |
| `feature/*` → `experimental-silo` | PR, `verify` vert sur le runner, AC de la spec couverts par des tests |
| `experimental-silo` → `landing-silo` | build complet propre, banc nocturne vert |
| `landing-silo` → `main` | validation matérielle nommée : appareil, firmware, configuration |
Le dernier critère n'est pas automatisable et ne doit pas l'être.
@ -57,9 +57,9 @@ Le dernier critère n'est pas automatisable et ne doit pas l'être.
| Le bug se reproduit… | Départ | Ensuite |
|---|---|---|
| jusque dans `main` | `hotfix/*` depuis `main` | fusion dans `main`, puis redescente dans `experimental-silo`, puis dans `landing-silo` |
| dans `experimental-silo`, pas dans `main` | `fix/*` depuis `experimental-silo` | redescente dans `landing-silo` |
| seulement dans `landing-silo` | `fix/*` depuis `landing-silo` | rien, il remonte par la promotion normale |
| jusque dans `main` | `hotfix/*` depuis `main` | fusion dans `main`, puis redescente dans `landing-silo`, puis dans `experimental-silo` |
| dans `landing-silo`, pas dans `main` | `fix/*` depuis `landing-silo` | redescente dans `experimental-silo` |
| seulement dans `experimental-silo` | `fix/*` depuis `experimental-silo` | rien, il remonte par la promotion normale |
Ne jamais corriger en aval un bug présent en amont : le correctif remontera un jour, mais la
branche amont reste cassée entre-temps et la promotion suivante réintroduit l'ancien code par
@ -74,8 +74,8 @@ Trois préfixes, pas davantage : `feature/*`, `fix/*`, `hotfix/*`.
### Versionnement des paquets
Tout paquet issu d'un dépôt produit ETM porte un suffixe `+etmN` sur la version amont qu'il modifie
ou remplace (ex. `1.15.2+etm1`), à tous les canaux de promotion (`landing-silo`/nightly,
`experimental-silo`/testing, `main`/stable). Ce suffixe garantit la préséance apt/dpkg sur le paquet
ou remplace (ex. `1.15.2+etm1`), à tous les canaux de promotion (`experimental-silo`/testing,
`landing-silo`/nightly, `main`/stable). Ce suffixe garantit la préséance apt/dpkg sur le paquet
upstream identique.
Ne jamais le remplacer par un tiret (`-etmN`) : `-` a un sens réservé en version Debian (champ
@ -83,8 +83,8 @@ Ne jamais le remplacer par un tiret (`-etmN`) : `-` a un sens réservé en versi
## Agents
Les agents travaillent dans `feature/*` et `fix/*`. Jamais de commit direct dans `landing-silo`,
`experimental-silo` ou `main` : ces branches ne reçoivent que des fusions.
Les agents travaillent dans `feature/*` et `fix/*`. Jamais de commit direct dans `experimental-silo`,
`landing-silo` ou `main` : ces branches ne reçoivent que des fusions.
Une spec, une branche, un jeu de critères d'acceptation.