Le constat
Mandat user du 2026-09-04, verbatim :
« j'insiste sur le fait que je vois beaucoup les agents sur la pédale de frein, qui attendent que tu nourrisses leur file. Tu dois dispatcher vraiment dans la durée, des dizaines de tâches par lane, et puis tu dois avoir un mécanisme idle moins conservateur, qui permet la réalisation de grains de plusieurs genres à chaque session. »
Le réflexe serait d'accuser un gate en particulier (G-VAR-2 trop serré, G-VAR-3 trop absolu). La mesure dit autre chose : l'appareil de variation entier est écrit autour d'UN grain par session, et aucune de ses pièces ne connaît la notion de « ce que la lane a déjà livré dans CETTE session ».
Ce qui est mesuré (2026-09-04, pool complet)
L'outil n'est PAS la contrainte. pick_idle_grain.py a pour défauts --grains 4 --umbrellas 2 --delivered 2 : il rend 8 candidats à chaque appel, pas un. Une lane qui n'en consomme qu'un jette 7 candidats déjà tirés et pondérés. Le plafond est dans la doctrine, pas dans l'organe — c'est le point de départ de cette issue, et il invalide le cadrage naturel « il faut que le picker en donne plus ».
Quatre loci portent l'hypothèse « un grain par session » :
| # |
Locus |
Ce qu'il suppose |
| 1 |
--prev-genre (picker) |
une seule valeur : le genre du grain précédent. Aucune façon d'exprimer « j'ai déjà fait guard ET docs dans cette session ». Une lane qui enchaîne 3 grains ne peut pas faire varier le tirage entre eux. |
| 2 |
G-VAR-2, budget LIGHT max(1, grains_mergés_du_jour // 3) |
fenêtre = le jour UTC. Le numérateur démarre à 0 à minuit : toute lane commence chaque journée avec un budget de 1. Le budget récompense le débit déjà réalisé, donc il est au minimum exactement quand la session commence. |
| 3 |
variation-protocol.md §3, merge-gate |
juge « la PR-plancher du cycle » — singulier. Une session à 3 grains de 3 genres n'a pas de représentation dans cette table. |
| 4 |
garde dwell (24 h) |
veto absolu par issue, indépendant de l'état du pool. |
Pour le locus 4, la mesure du jour : 28 issues retenues par dwell seul, dont la totalité du lot de planification du matin (5 issues à 0-1 h : training, qc, genai — précisément les veines minces) et les 7 issues de la famille Vibe-Coding (12 h). Autrement dit : la substance provisionnée pour nourrir les lanes leur est invisible pendant 24 h. Les lanes se réveillent, tirent, tombent sur le reste, et freinent.
Le pool admissible, lui, porte 64 grains de genre CONTENU pour 106 de genre META — 62 % de l'offre est de l'outillage, pour ~6 grains de contenu par lane quand G-VAR-1 en exige un par cycle et par lane.
Ce qui est demandé
Pas de pendule (~/.claude/CLAUDE.md, « Fixing Prompts and Rules ») : retirer d'abord la ligne qui cause le comportement, n'ajouter un remplacement que si le retrait laisse un trou réel. Remplacer un gate par son opposé est l'échec à éviter — le but n'est pas de supprimer l'anti-monoculture, c'est de la rendre compatible avec plusieurs grains par session.
A. --prev-genre doit accepter plusieurs genres
Répétable ou séparé par virgules : les genres déjà livrés dans cette session, pas seulement le dernier. La pondération les pénalise tous. C'est ce qui rend un enchaînement lean -> qc -> slides tirable en une session sans que le picker reproduise le genre précédent.
B. Écrire explicitement la fenêtre de G-VAR-2, et mesurer ce que la bascule de minuit coûte
Mesurer, sur les merges des 14 derniers jours : combien de fois une lane a-t-elle atteint son budget LIGHT avant que le dénominateur du jour ait eu le temps de monter ? Si le chiffre est significatif, le défaut est la fenêtre (jour UTC glissant vs fixe), pas le ratio // 3. Contrôle positif obligatoire : passer une lane connue pour avoir enchaîné N LIGHT dans une journée et vérifier que l'instrument rend N.
C. dwell : veto absolu -> condition sur l'état du pool
La justification écrite du garde est d'empêcher « l'emballement d'audit » — la flotte ne consommant que ce qui vient d'être créé. Or la pondération fait déjà ce travail : le poids combine l'âge de création ET l'inactivité, donc une issue de 0 jour porte déjà le poids le plus faible du pool et n'est presque jamais tirée. dwell est une seconde couche absolue posée sur une couche probabiliste qui traite déjà le cas.
Piste (à instruire, pas à appliquer les yeux fermés) : ne retenir une issue fraîche que tant que le pool admissible offre encore de la substance de sa classe. Quand le CONTENU admissible passe sous un plancher, retenir du CONTENU frais ne protège de rien — il n'y a plus « le reste du pool » auquel le confronter. Mesurer avant de trancher : la conclusion peut être que le ratio 62/38 rend le garde inoffensif et qu'il faut chercher ailleurs.
D. variation-protocol.md §3 : rendre une session multi-grain lisible au merge-gate
« La PR-plancher du cycle » suppose une PR par cycle. Reformuler pour qu'une session à N grains de N genres soit exprimable, sans affaiblir G-VAR-1 (au moins un DEEP/MED de CONTENU par cycle reste la règle).
Acceptance
- A livré, avec un test qui échoue sans le patch.
- B mesuré et chiffré, avec son contrôle positif ; verdict écrit « la fenêtre est / n'est pas le défaut ».
- C mesuré et chiffré (combien de CONTENU admissible retenu par
dwell au moment du tirage, sur plusieurs tirages), verdict écrit.
- D : toute modification de
.claude/rules/** passe par PR + sign-off user (CLAUDE.md §A). Proposer le diff, ne pas l'auto-promouvoir.
- Aucun des quatre volets ne se solde par « j'ai ajouté un flag pour contourner le garde » : l'échappatoire existe déjà (
--ignore-drought, --admit-reason, --dwell-hours 0) et n'a rien débloqué, précisément parce qu'une échappatoire qui demande une justification écrite ne se prend pas dans le cours normal d'une session.
Rattachements
Le constat
Mandat user du 2026-09-04, verbatim :
Le réflexe serait d'accuser un gate en particulier (G-VAR-2 trop serré, G-VAR-3 trop absolu). La mesure dit autre chose : l'appareil de variation entier est écrit autour d'UN grain par session, et aucune de ses pièces ne connaît la notion de « ce que la lane a déjà livré dans CETTE session ».
Ce qui est mesuré (2026-09-04, pool complet)
L'outil n'est PAS la contrainte.
pick_idle_grain.pya pour défauts--grains 4 --umbrellas 2 --delivered 2: il rend 8 candidats à chaque appel, pas un. Une lane qui n'en consomme qu'un jette 7 candidats déjà tirés et pondérés. Le plafond est dans la doctrine, pas dans l'organe — c'est le point de départ de cette issue, et il invalide le cadrage naturel « il faut que le picker en donne plus ».Quatre loci portent l'hypothèse « un grain par session » :
--prev-genre(picker)guardETdocsdans cette session ». Une lane qui enchaîne 3 grains ne peut pas faire varier le tirage entre eux.max(1, grains_mergés_du_jour // 3)variation-protocol.md§3, merge-gatedwell(24 h)Pour le locus 4, la mesure du jour : 28 issues retenues par
dwellseul, dont la totalité du lot de planification du matin (5 issues à 0-1 h :training,qc,genai— précisément les veines minces) et les 7 issues de la famille Vibe-Coding (12 h). Autrement dit : la substance provisionnée pour nourrir les lanes leur est invisible pendant 24 h. Les lanes se réveillent, tirent, tombent sur le reste, et freinent.Le pool admissible, lui, porte 64 grains de genre CONTENU pour 106 de genre META — 62 % de l'offre est de l'outillage, pour ~6 grains de contenu par lane quand G-VAR-1 en exige un par cycle et par lane.
Ce qui est demandé
Pas de pendule (
~/.claude/CLAUDE.md, « Fixing Prompts and Rules ») : retirer d'abord la ligne qui cause le comportement, n'ajouter un remplacement que si le retrait laisse un trou réel. Remplacer un gate par son opposé est l'échec à éviter — le but n'est pas de supprimer l'anti-monoculture, c'est de la rendre compatible avec plusieurs grains par session.A.
--prev-genredoit accepter plusieurs genresRépétable ou séparé par virgules : les genres déjà livrés dans cette session, pas seulement le dernier. La pondération les pénalise tous. C'est ce qui rend un enchaînement
lean->qc->slidestirable en une session sans que le picker reproduise le genre précédent.B. Écrire explicitement la fenêtre de G-VAR-2, et mesurer ce que la bascule de minuit coûte
Mesurer, sur les merges des 14 derniers jours : combien de fois une lane a-t-elle atteint son budget LIGHT avant que le dénominateur du jour ait eu le temps de monter ? Si le chiffre est significatif, le défaut est la fenêtre (jour UTC glissant vs fixe), pas le ratio
// 3. Contrôle positif obligatoire : passer une lane connue pour avoir enchaîné N LIGHT dans une journée et vérifier que l'instrument rend N.C.
dwell: veto absolu -> condition sur l'état du poolLa justification écrite du garde est d'empêcher « l'emballement d'audit » — la flotte ne consommant que ce qui vient d'être créé. Or la pondération fait déjà ce travail : le poids combine l'âge de création ET l'inactivité, donc une issue de 0 jour porte déjà le poids le plus faible du pool et n'est presque jamais tirée.
dwellest une seconde couche absolue posée sur une couche probabiliste qui traite déjà le cas.Piste (à instruire, pas à appliquer les yeux fermés) : ne retenir une issue fraîche que tant que le pool admissible offre encore de la substance de sa classe. Quand le CONTENU admissible passe sous un plancher, retenir du CONTENU frais ne protège de rien — il n'y a plus « le reste du pool » auquel le confronter. Mesurer avant de trancher : la conclusion peut être que le ratio 62/38 rend le garde inoffensif et qu'il faut chercher ailleurs.
D.
variation-protocol.md§3 : rendre une session multi-grain lisible au merge-gate« La PR-plancher du cycle » suppose une PR par cycle. Reformuler pour qu'une session à N grains de N genres soit exprimable, sans affaiblir G-VAR-1 (au moins un DEEP/MED de CONTENU par cycle reste la règle).
Acceptance
dwellau moment du tirage, sur plusieurs tirages), verdict écrit..claude/rules/**passe par PR + sign-off user (CLAUDE.md §A). Proposer le diff, ne pas l'auto-promouvoir.--ignore-drought,--admit-reason,--dwell-hours 0) et n'a rien débloqué, précisément parce qu'une échappatoire qui demande une justification écrite ne se prend pas dans le cours normal d'une session.Rattachements