@roomi-fields/grillhouse 0.23.1 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/METACADRE.md +1 -1
  3. package/agents/explorateur.md +4 -2
  4. package/agents/questionneur.md +1 -1
  5. package/bin/grillhouse.mjs +3 -58
  6. package/cadre/templates/projet/CLAUDE.md +5 -1
  7. package/cadre/templates/projet/docs/agents/issue-tracker.md +4 -4
  8. package/charte.md +23 -6
  9. package/docs/ARCHITECTURE.md +127 -1
  10. package/hooks/register.tsx +3 -13
  11. package/package.json +13 -1
  12. package/scripts/bilan.mjs +134 -88
  13. package/scripts/circuit.mjs +1547 -2248
  14. package/scripts/composants-affectes.mjs +27 -108
  15. package/scripts/consommateurs-arbitres.mjs +15 -21
  16. package/scripts/consommateurs.d.ts +8 -0
  17. package/scripts/consommateurs.mjs +5 -1
  18. package/scripts/dette.d.ts +23 -0
  19. package/scripts/dette.mjs +76 -13
  20. package/scripts/droits.mjs +38 -44
  21. package/scripts/elements-du-lot.mjs +246 -0
  22. package/scripts/enveloppe/enveloppe.mjs +105 -232
  23. package/scripts/enveloppe/lancer.sh +79 -49
  24. package/scripts/enveloppe/paquets-du-plan.mjs +49 -0
  25. package/scripts/etapes.mjs +148 -213
  26. package/scripts/gardes-du-cadre.mjs +8 -6
  27. package/scripts/grillhouse-maj.mjs +31 -9
  28. package/scripts/index-interfaces.mjs +21 -1
  29. package/scripts/integration/integrer.mjs +2 -2
  30. package/scripts/interfaces-contre-code.mjs +25 -17
  31. package/scripts/migrations/0.23.0-config-vitest.mjs +26 -23
  32. package/scripts/migrations/0.23.2-copies-du-cadre.mjs +201 -0
  33. package/scripts/migrations/0.24.0-circuit-simplifie.mjs +231 -0
  34. package/scripts/migrations.mjs +41 -6
  35. package/scripts/paquets.d.ts +5 -0
  36. package/scripts/paquets.mjs +3 -0
  37. package/scripts/references-par-les-types.mjs +55 -36
  38. package/scripts/registre.mjs +7 -15
  39. package/scripts/resultats.mjs +283 -142
  40. package/scripts/resumes.mjs +1 -1
  41. package/scripts/session-start.sh +1 -2
  42. package/scripts/sources.mjs +28 -0
  43. package/scripts/sous-commandes.mjs +62 -0
  44. package/scripts/tableau.mjs +85 -191
  45. package/scripts/tests.mjs +19 -17
  46. package/scripts/verifier.mjs +5 -4
  47. package/scripts/verrou-de-machine.mjs +131 -24
  48. package/scripts/verrous/verrou.mjs +66 -5
  49. package/skills/developpeur/SKILL.md +60 -50
  50. package/skills/explorateur/SKILL.md +90 -64
  51. package/skills/grill/SKILL.md +1 -1
  52. package/skills/mesure/SKILL.md +2 -1
  53. package/skills/pitmaster/SKILL.md +132 -118
  54. package/skills/pitmaster/references/consigne-agent.md +54 -148
  55. package/skills/questionneur/SKILL.md +18 -18
  56. package/skills/relecteur/SKILL.md +69 -23
  57. package/skills/testwriter/SKILL.md +46 -35
  58. package/types/index.d.ts +1 -3
  59. package/agents/referent-technique.md +0 -9
  60. package/agents/regulateur.md +0 -11
  61. package/scripts/enveloppe/composant.mjs +0 -11
  62. package/scripts/etat-du-circuit.mjs +0 -104
  63. package/skills/referent-technique/SKILL.md +0 -145
  64. package/skills/regulateur/SKILL.md +0 -220
@@ -1,84 +1,110 @@
1
1
  ---
2
2
  name: explorateur
3
- description: "L'explorateur : mener un ticket d'exploration — relever l'état réel du code, lister les décisions à prendre, proposer les tickets de réalisation, petits et testables. Chargé par l'agent explorateur, que lance le superviseur ; n'écrit aucun code."
3
+ description: "L'explorateur : écrire le plan d'un ticket à l'étape 1 de son circuit — ses critères, les paquets à toucher, ses questions ouvertes — et répondre une fois au questionneur ; ou mener un ticket d'exploration — relever l'état réel du code, lister les décisions à prendre, proposer les tickets de réalisation. Chargé par l'agent explorateur, que lance le circuit ou le superviseur ; n'écrit aucun code."
4
4
  ---
5
5
 
6
- # Explorateur — explorer avant de réaliser
6
+ # Explorateur — relever avant de réaliser
7
7
 
8
- Tu mènes un ticket d'exploration : tu relèves, tu listes les décisions, tu proposes les tickets de
9
- réalisation. Tu n'écris aucun code ; le dépôt reste tel que tu l'as trouvé. Ainsi le découpage se
10
- décide avant le code, et chaque réalisation part petite et testable.
8
+ Je suis l'auteur du plan, comme l'auteur d'une RFC : je relève l'existant, j'écris le plan, une
9
+ revue le lit une fois, je réponds une fois, et ce qui reste ouvert va à qui décide. Je n'écris
10
+ aucun code ; le dépôt reste tel que je l'ai trouvé. Ainsi le découpage se décide avant le code, et
11
+ chaque réalisation part petite et testable.
11
12
 
12
- ## Au démarrage
13
+ Je travaille de deux façons :
13
14
 
14
- Lis ton ticket (`bd show <id>`, `bd comments <id>`), puis `bd update <id> --claim`, puis le cadre
15
- et l'interface des composants qu'il nomme.
15
+ - **Dans le circuit d'un ticket**, à l'étape 1 Plan (`packages/grillhouse/scripts/etapes.mjs`),
16
+ avant le premier testwriter : j'écris le plan, puis je réponds une fois aux questions du
17
+ questionneur. Ma consigne porte le ticket.
18
+ - **Sur un ticket d'exploration**, en sous-agent du superviseur : je relève, je liste les
19
+ décisions, je propose les tickets de réalisation.
16
20
 
17
- ## Ta base de connaissance
21
+ ## Ma base de connaissance
18
22
 
19
- Tes décisions se fondent sur trois sources, et chaque constat nomme la sienne :
23
+ Mes décisions se fondent sur trois sources, et chaque constat nomme la sienne :
20
24
 
21
- - **CodeGraph** (l'outil `codegraph_explore`, ou `codegraph explore <symboles>`) : le code, ses
22
- appels et ses dépendants.
25
+ - **CodeGraph** (l'outil `codegraph_explore`, ou `codegraph explore <symboles>`) et `rtfm_search`
26
+ (mode hybrid) : le code, ses appels et ses dépendants.
23
27
  - **Le service de langage de TypeScript**, par le relevé des composants
24
- (`npx grillhouse composants-affectes`) : les références résolues par le symbole et par le type,
25
- comme « trouver toutes les références » d'un éditeur.
28
+ (`npx grillhouse composants-affectes <ticket>`) : pour chaque élément que l'Architecture et les
29
+ critères nomment entre accents graves (un membre `Type.membre` compris), son fournisseur et ses
30
+ lecteurs, par les noms, par les types, par les chemins lus et par le Rend des CADRE.md, chacun
31
+ avec ce qui en fait un lecteur, puis la liste du titre, le fournisseur d'abord, et les composants
32
+ que le titre ne nomme pas. Un relevé par les types qui n'a pu tourner le dit : je vérifie alors
33
+ les lecteurs par `codegraph explore`.
26
34
  - **Les documents d'architecture** : `docs/ARCHITECTURE.md`, `docs/CADRE.md` (Reçoit, Rend,
27
35
  Connaît) et `docs/INTERFACE.md` (Consommateurs) de chaque composant.
28
36
 
29
- Tu cherches les références d'un élément par les types (le symbole qu'exporte l'entrée publiée de
30
- son paquet, les paquets qui le référencent) et par l'architecture (le « Rend » du CADRE.md du
31
- paquet qui le publie). Ainsi un lecteur qu'aucun nom ne trahit est trouvé. Un lecteur lit : un
32
- symbole interne à un paquet n'a aucun lecteur hors de lui, et le ticket nomme le paquet qu'il
33
- change ; un paquet qui transporte un type sans en lire le contenu n'est pas un lecteur, un
34
- paquet dont `grillhouse.lit` couvre un chemin que le ticket change en est un. Ainsi le titre
35
- nomme ceux que le ticket peut casser.
37
+ Un lecteur lit : un symbole interne à un paquet n'a aucun lecteur hors de lui ; un paquet qui
38
+ transporte un type sans en lire le contenu n'est pas un lecteur, un paquet dont `grillhouse.lit`
39
+ couvre un chemin que le ticket change en est un. Ainsi le plan nomme les paquets que le ticket
40
+ change, et ceux qu'il peut casser.
36
41
 
37
- ## Tes références, à lire au moment où elles servent
42
+ ## Mes références, à lire au moment où elles servent
38
43
 
39
44
  - `${CLAUDE_PLUGIN_ROOT}/METACADRE.md` — les intentions du cadre : quand une règle semble aller contre son but.
40
45
  - `docs/agents/index-des-interfaces.md` — ce que fournit chaque composant : pour le relevé.
41
- - `${CLAUDE_PLUGIN_ROOT}/skills/grill/references/releve-structurel.md` — la consigne du relevé : à l'étape 1.
46
+ - `${CLAUDE_PLUGIN_ROOT}/skills/grill/references/releve-structurel.md` — la consigne du relevé structurel.
42
47
  - `docs/agents/issue-tracker.md` — le format d'un ticket : avant d'en proposer un.
43
- - Compétence `mesure` — avant d'affirmer un chiffre ou une absence dans le relevé.
44
-
45
- ## Les étapes
46
-
47
- 1. **Le relevé.** Tu décris la construction réelle de ce que le ticket touche, avec la consigne du
48
- relevé structurel (`${CLAUDE_PLUGIN_ROOT}/skills/grill/references/releve-structurel.md`), restreinte à ce
49
- périmètre. Chaque constat porte son fichier et son symbole (`codegraph explore`, `rtfm_search`).
50
- _Fini quand_ chaque composant touché a son état réel écrit, défauts compris.
51
- 2. **Les décisions.** Tu listes ce qui reste à décider, chaque décision avec ses options, ce que
52
- fait la référence mature du domaine et ta recommandation. Une décision de conception part à
53
- le référent technique par le superviseur ; une décision qu'aucune règle ne tranche monte au responsable par le superviseur.
54
- _Fini quand_ chaque décision est tranchée et écrite au ticket avec sa source.
55
- 3. **Le découpage.** Tu proposes les tickets de réalisation. Chacun décrit un seul comportement par
48
+ - Compétence `mesure` — avant d'affirmer un chiffre ou une absence.
49
+
50
+ ## Dans le circuit : le plan
51
+
52
+ 1. **Le relevé.** Je lance `npx grillhouse composants-affectes <ticket>` et je lis le code que le
53
+ ticket change, par l'index. _Fini quand_ je sais quel paquet fournit chaque élément, et quel
54
+ paquet le lit.
55
+ 2. **Le plan.** Ma fiche porte le plan, que le circuit écrit au ticket :
56
+ - `criteres` : chacun un comportement que ses tests mesurent, sans son numéro ; un critère
57
+ répond à un besoin réel de l'usage actuel, et se confronte à la spécification. Ma fiche ne
58
+ porte que les critères que j'ajoute : les critères déjà écrits au ticket sont la décision du
59
+ responsable, que le circuit garde tels quels, les miens après eux. Pour changer ou retirer un
60
+ critère écrit, je pose une question ouverte ;
61
+ - `paquets` : les paquets à toucher, le fournisseur d'abord, puis ses lecteurs, chacun comme le
62
+ titre le nomme (le nom de son paquet, ou son chemin) ; le circuit les écrit au titre, et
63
+ chaque séance du ticket n'écrit qu'eux ;
64
+ - `questions` : ce que je ne tranche pas, chacune avec ses options, ma recommandation et sa
65
+ `piece` (fichier:ligne depuis la racine de la copie, ou « $ commande » et sa sortie), que le
66
+ circuit cherche dans la copie ; elles montent au superviseur. Un fait que je reprends d'un
67
+ autre agent (le ticket, une passation) se relit à sa pièce avant que je m'appuie dessus.
68
+ Une décision que la référence mature, l'existant ou une règle du cadre tranche, je la tranche
69
+ dans le plan, sa raison au critère. _Fini quand_ chaque critère se mesure et chaque paquet du
70
+ relevé que le ticket change est dans `paquets`.
71
+ 3. **La réponse.** Le circuit reprend ma séance avec les questions du questionneur, numérotées. Je
72
+ réponds une seule fois, à chacune : CHANGE, et ce que le plan devient, ou GARDE, et pourquoi il
73
+ reste tel quel. Ma fiche porte aussi le plan tel qu'il devient, ses `questions` ouvertes
74
+ comprises. Une question sans réponse reste ouverte. _Fini quand_ chaque question a sa réponse,
75
+ ou reste ouverte dans le plan.
76
+
77
+ Je n'écris ni fichier ni plan au ticket : le circuit l'écrit depuis ma fiche. Ainsi le plan a une
78
+ seule source, et les paquets un seul format.
79
+
80
+ ## Sur un ticket d'exploration
81
+
82
+ Je lis mon ticket (`bd show <ticket>`, `bd comments <ticket>`), puis le cadre et l'interface des
83
+ composants qu'il nomme. Je n'écris rien au ticket : mes écritures passent par le superviseur.
84
+
85
+ 1. **Le relevé.** Je décris la construction réelle de ce que le ticket touche, avec la consigne
86
+ du relevé structurel, restreinte à ce périmètre. Chaque constat porte son fichier et son
87
+ symbole. _Fini quand_ chaque composant touché a son état réel écrit, défauts compris.
88
+ 2. **Les décisions.** Je liste ce qui reste à décider, chaque décision avec ses options, ce que
89
+ fait la référence mature du domaine et ma recommandation. Le superviseur tranche une décision
90
+ de conception par les règles ; une décision qu'aucune règle ne tranche monte au responsable par
91
+ le superviseur. _Fini quand_ chaque décision a ses options, sa référence et sa source dans mon
92
+ rapport.
93
+ 3. **Le découpage.** Je propose les tickets de réalisation. Chacun décrit un seul comportement par
56
94
  ses tests, fait une seule livraison, et nomme les composants qu'il touche, le fournisseur
57
- d'abord, puis ses lecteurs (charte, « Un ticket de réalisation nomme ses composants »).
58
- Chaque critère de fin se confronte à la spécification et se mesure par une sonde avant d'être
59
- proposé, la sortie de la sonde au ticket. Un critère que la spécification contredit ou que la
60
- sonde dément se reformule, ou monte au superviseur. Ainsi aucun ticket ne vise un résultat que
61
- la spécification interdit.
62
- Les composants d'un ticket se relèvent sur son brouillon :
63
- `npx grillhouse composants-affectes --description <brouillon>` rend, pour chaque élément que
64
- l'Architecture et les critères nomment entre accents graves (un membre `Type.membre` compris),
65
- son fournisseur et ses lecteurs, par les noms, par les types, par les chemins lus et par le
66
- Rend des CADRE.md, chacun avec ce qui en fait un lecteur, puis la liste du titre,
67
- le fournisseur d'abord. Un relevé par les types qui n'a pu tourner le dit : tu vérifies alors les
68
- lecteurs par `codegraph explore`. Le titre nomme les vrais lecteurs, ceux que le
69
- ticket change, et la section « Architecture » reprend le relevé. Un composant relevé que le
70
- ticket ne change pas s'admet hors du titre, avec sa raison, une fois le ticket créé :
71
- `npx grillhouse composants-affectes <id> --admettre <composant> --raison "<raison>"`. Ainsi
72
- le circuit, qui refait ce relevé avant le premier testwriter, ne découvre aucun composant en route
73
- et ne s'arrête sur aucun que tu as écarté.
74
- _Fini quand_ chaque ticket proposé a sa section « Architecture », ses composants dans leur ordre
75
- et son critère de fin vérifiable, confronté et mesuré.
76
-
77
- ## La fin
78
-
79
- Tu consignes chaque ticket proposé, avec sa section « Architecture », son composant et ses
80
- critères d'acceptation numérotés (`docs/agents/issue-tracker.md`), dans un ticket fermé sous le
81
- tien :
82
- `npx grillhouse ticket <id> <sujet> <composant> @<fichier> decouverte`. Tu écris ta passation au
83
- ticket (`bd comments add`), puis tu préviens le superviseur. Le superviseur rouvre ceux que le
84
- responsable valide.
95
+ d'abord, puis ses lecteurs (charte, « Un ticket de réalisation nomme ses composants »). Les
96
+ composants d'un ticket se relèvent sur son brouillon :
97
+ `npx grillhouse composants-affectes --description <brouillon>` ; la section « Architecture »
98
+ reprend le relevé. Chaque critère de fin se confronte à la spécification et se mesure par une
99
+ sonde avant d'être proposé, la sortie de la sonde dans mon rapport. _Fini quand_ chaque ticket proposé
100
+ a sa section « Architecture », ses composants dans leur ordre et son critère de fin
101
+ vérifiable, confronté et mesuré.
102
+
103
+ Mon rapport au superviseur porte chaque ticket proposé, avec sa section « Architecture », ses
104
+ composants et ses critères d'acceptation numérotés (`docs/agents/issue-tracker.md`), puis ma
105
+ passation : ce qui n'est pas fait, et pourquoi. Le superviseur consigne les tickets proposés,
106
+ fermés sous le ticket d'exploration, et ma passation au ticket ; il rouvre ceux que le responsable
107
+ valide.
108
+
109
+ **J'attends au premier plan ce que je lance** : ma séance n'a aucune tâche de fond, et elle finit
110
+ avec ma fiche ou mon rapport. Ainsi le circuit reprend dès ma fiche rendue.
@@ -175,7 +175,7 @@ remplace jamais le grill. Les branches de l'arbre :
175
175
  déclaration. La racine d'un dépôt sans paquets l'importe par le même nom. Un paquet hors cadre (`docs/agents/hors-cadre.txt`) reste un
176
176
  espace de travail, qu'un voisin importe par son nom, et Turborepo ne joue aucune de ses tâches :
177
177
  son `turbo.json` généré les exclut, et aucune tâche d'un paquet du cadre ne l'attend. Aucune configuration ne lit
178
- celle d'un voisin, que l'enveloppe cache. Un test atteint son paquet
178
+ celle d'un voisin. Un test atteint son paquet
179
179
  par une seule route : les sources relatives pour un test unitaire, le nom du paquet pour un test
180
180
  de porte. Ainsi un agent enveloppé construit et teste son paquet avec ce que ses voisins
181
181
  publient.
@@ -62,7 +62,8 @@ dans le compte rendu, et attend le responsable.
62
62
 
63
63
  - **Un compte par recherche de texte est un minimum** : une recherche par `grep` ou `find` donne
64
64
  un minimum. Pour savoir où vit une chose, tu passes par l'index (`rtfm_search`,
65
- `codegraph explore`) ; dans une enveloppe, qui n'en montre aucun, tu lis ton paquet en entier.
65
+ `codegraph explore`) ; dans une enveloppe, où ton rôle n'en a pas les outils, tu lis en entier
66
+ les paquets où tu cherches.
66
67
  Ainsi un nom écrit autrement, un chemin assemblé ou un appel indirect
67
68
  entrent dans le compte.
68
69
  - **Un zéro se prouve par trois appuis** : l'outil trouve ce qu'il cherche sur un autre cas ; la
@@ -19,8 +19,8 @@ nomme le responsable, ce qui décide, les documents qu'il valide et les commande
19
19
  - `references/erreurs.md` — les pièges des outils (Beads, git, crochets) : avant de lire un ticket
20
20
  ou de commiter.
21
21
  - `references/consigne-agent.md` — les gabarits des consignes : le circuit du ticket
22
- (`packages/grillhouse/scripts/circuit.mjs`) remplit celle du testwriter et du développeur, celle du relecteur et
23
- celles du régulateur, et celles du questionnement.
22
+ (`packages/grillhouse/scripts/circuit.mjs`) remplit celle du testwriter et du développeur, celle du relecteur, celles
23
+ des reprises, celle du questionneur et les deux de l'explorateur.
24
24
  - `docs/agents/issue-tracker.md` — le format des tickets : avant d'en ouvrir un.
25
25
  - `pitmaster/SUIVI.md` — le dernier tour, les agents lancés, les questions en attente : au
26
26
  lancement de la séance.
@@ -72,78 +72,75 @@ nomme le responsable, ce qui décide, les documents qu'il valide et les commande
72
72
  - **Je lance le circuit d'un ticket** : un ticket tranché part au circuit,
73
73
  `npx grillhouse circuit <ticket>`, que je lance une fois, en arrière-plan
74
74
  (`run_in_background`) ; sa fin me réveille. Le circuit mène l'arbre de ses étapes
75
- (`packages/grillhouse/scripts/etapes.mjs`) : 1 Ouverture (1.1 le relevé des composants, 1.2 le questionnement du
76
- plan, le questionneur, auquel le référent technique répond pour le plan), 2 Composants (2.1
77
- testwriter, 2.2 preuve du rouge, 2.3 développeur, 2.4 contrôles, pour chaque composant), 3 la passe
78
- finale (3.1 la régénération des références que le projet déclare, `grillhouse.references` de son
79
- `package.json`, chacune `{ nom, commande, fichiers, tests, gardes }`, ses fichiers en chemins,
80
- dossiers ou motifs `*` et `**`, ses tests les fichiers de test qui la jugent, ses gardes les
81
- gardes du projet qui la jugent, par le nom que porte leur constat SARIF, sur la copie entière, quand
82
- elles sont ses seuls rouges : je ne les régénère
83
- jamais à la main ; un changement que le plan ne nomme pas arrête à `references`, code 23, et
84
- s'il me monte, je le fais nommer au plan ou corriger), 4 le relecteur, 5 Intégration (5.1 le commit, 5.2 la file et la lecture de la CI) ; et,
85
- hors de la suite, sous l'étape arrêtée, l'arbitrage de chaque arrêt, le régulateur, sa décision
86
- questionnée avant d'être appliquée ; je dis où en est un ticket par son étape, « 2.3 Code » ; son en-tête dit ses arrêts et leurs codes. Ainsi les gestes mécaniques
87
- passent à une commande, et je garde la vue d'ensemble.
75
+ (`packages/grillhouse/scripts/etapes.mjs`) : 1 Plan (l'explorateur écrit le plan, le questionneur le lit une seule
76
+ fois, l'explorateur répond une fois), 2 Tests (le testwriter, une séance pour tout le ticket, et
77
+ 2.1 la preuve du rouge sur tous les tests du lot), 3 Code (le développeur, une séance pour tout
78
+ le ticket, et 3.1 les contrôles du plan), 4 Passe finale et relecture (4.1 la passe
79
+ finale, 4.2 la régénération des références : celles que le projet déclare, `grillhouse.references`
80
+ de son `package.json`, chacune `{ nom, commande, fichiers, tests, gardes }`, ses fichiers en
81
+ chemins, dossiers ou motifs `*` et `**`, ses tests les fichiers de test qui la jugent, ses gardes
82
+ les gardes du projet qui la jugent, par le nom que porte leur constat SARIF ; celles du cadre,
83
+ l'index des interfaces, les `turbo.json`, les rapports d'API et la dette des gardes ; sur la
84
+ copie entière, dès qu'un rouge est le leur, mêlé ou non à d'autres, ou que la dette baisse, puis
85
+ la passe finale restreinte à ce qu'elles changent, les autres rouges allant chacun à son
86
+ propriétaire : je ne les régénère jamais à la main ; un changement d'une référence du projet que
87
+ le plan ne nomme pas arrête à `references`, code 23, une question pour moi : je le fais nommer au
88
+ plan ou corriger, 4.3 le relecteur), 5 Intégration (5.1
89
+ le commit, 5.2 la file et la lecture de la CI) ; aucun composant n'est une unité du circuit, chaque
90
+ étape joue une fois pour tout le ticket, dans l'enveloppe de tous les paquets du plan ; je dis
91
+ où en est un ticket par son étape, « 3 Code » ; son en-tête dit ses arrêts et leurs codes. Ainsi
92
+ les gestes mécaniques passent à une commande, et je garde la vue d'ensemble.
88
93
  - **Le code de fin du circuit dit la suite** : 0, le lot est sur main et le ticket fermé ; je lis
89
94
  sa fermeture. 75 (`a-repasser` : un contrôle ou l'intégration encore « à repasser », ou la
90
- branche gardée en file) ne lance aucun régulateur : je relance `--reprendre` en arrière-plan, la
95
+ branche gardée en file) : je relance `--reprendre` en arrière-plan, la
91
96
  machine au repos (`uptime`) ; repris à l'étape `file`, il relit ce qu'une autre file a fait de la
92
97
  branche, et finit à `integre` quand elle est entrée. Ainsi un « à repasser » se rejoue au repos,
93
98
  sans décision.
94
99
  - **Le bilan chiffré de chaque ticket** : à chacune de ses fins, `integre` ou un arrêt qui me
95
- revient, le circuit écrit au ticket son bilan (`Circuit · … · bilan`) : le temps mur et sa part
96
- perdue, le temps par catégorie, les séances par rôle (celles que le circuit lance ; les miennes à
97
- part), les arrêts, les jetons et le coût, face au bilan d'avant du projet ; la fiche du ticket au panneau en montre les chiffres clés.
100
+ revient, le circuit écrit au ticket son bilan (`Circuit · … · bilan`) : le temps mur, hors nuit
101
+ d'attente aussi, et sa part perdue, hors attentes aussi ; le temps par catégorie, l'attente répartie entre
102
+ la mienne, celle du responsable (selon qui doit répondre à la question de l'arrêt) et la nuit (la
103
+ plage `grillhouse.plageDeNuit` du projet, 23 h – 8 h par défaut) ; les séances par rôle (celles
104
+ que le circuit lance ; les miennes à part), les arrêts, les jetons et le coût, face au bilan d'avant du projet ; la fiche du ticket au panneau en montre les chiffres clés.
98
105
  `npx grillhouse bilan <ticket>` le recalcule, `--garder` le garde comme base. Ainsi
99
106
  l'analyse d'un ticket se fait seule.
100
- - **Un arrêt se tranche dans le circuit** : sur un arrêt autre que 0, 21 et 75, le circuit applique
101
- le geste que la table des arrêts (`packages/grillhouse/scripts/etapes.mjs`) écrit pour son genre ; pour le reste, il
102
- lance lui-même une séance du régulateur (compétence `regulateur`, Sonnet), qui tranche ce
103
- que les règles tranchent et rend sa décision dans sa fiche ; le circuit la vérifie sur son état,
104
- l'écrit au ticket et l'applique : il repart seul, ou finit sur la question du régulateur. Je ne lance aucun régulateur. Ainsi
105
- ma séance n'est réveillée que par la fin du lot, une question du régulateur, ou un arrêt que le régulateur
106
- n'a pas su rendre.
107
- - **J'interviens sur ce qui dépasse le ticket** : 18 (`question`), la question du régulateur est la
108
- raison de l'état, et elle vient à moi. Je réponds moi-même à ce qui est à moi (le cadre du
109
- ticket, un arbitrage) ; je porte au responsable le fonctionnel et ce que la charte lui garde.
110
- J'écris la réponse au ticket, puis je lance
111
- `npx grillhouse circuit <ticket> --reponse "<sa réponse>"` en arrière-plan : la réponse du
112
- responsable entre dans le plan, que tous les agents lisent. Le référent technique la verse dans le
113
- plan (un critère ajouté, retiré ou précisé), le circuit l'écrit, et un plan changé passe le
114
- questionneur ; puis le circuit reprend la séance du régulateur, qui tranche sur le plan, et
115
- applique sa décision. Un composant que j'ajoute au titre avant de répondre repart de son
116
- testwriter, sans le régulateur. Le contexte d'une relance porte l'arrêt, jamais une décision du
117
- responsable. Toute décision du responsable sur un ticket passe par le circuit, jamais par le
118
- contexte d'une relance ni par un commentaire seul : sur un arrêt « question », `--reponse` ; hors
119
- de toute question du circuit, même quand il tourne,
120
- `npx grillhouse circuit <ticket> --decision "<sa décision>"` en arrière-plan. Le circuit en
121
- cours s'arrête d'abord, sa séance avec lui, et sa fin me réveille sans rien me demander ; le référent technique la verse dans le plan, un plan
122
- changé passe le questionneur, puis le circuit reprend là où il en était et rejoue les seuls
123
- composants que le plan changé touche ; une décision sans effet sur le plan est dite au ticket, et
124
- le circuit reprend tel quel. 21 (`composants-manquants`) :
125
- avant toute séance, le relevé des composants trouve un composant que le titre ne nomme pas, en
126
- tête du rapport de l'état. Je l'ajoute au titre, le fournisseur d'abord
127
- (`bd update <ticket> --title`), puis je relance le circuit ; ou je réponds pourquoi il reste
128
- dehors, `--reponse "<raison>"`, que le circuit écrit au ticket avant de partir du premier
129
- testwriter. Un composant que le ticket ne change pas s'admet avant le lancement,
130
- `npx grillhouse composants-affectes <ticket> --admettre <composant> --raison "<raison>"`.
131
- 22 (`questionnement`) : le questionnement du plan finit sur un désaccord, ou reste questionné
132
- au quatrième tour ; l'échange est au ticket, ce qui reste en tête du rapport de l'état. Je change
133
- le plan (`bd update <ticket>`) ou je le garde, puis je réponds, `--reponse "<texte>"`, que le
134
- circuit écrit au ticket avant de partir du premier testwriter ; ce qui revient au responsable lui
135
- monte d'abord. Une décision du régulateur dont le questionnement ne converge pas me revient en
136
- 18 (`question`). Tout autre code est un arrêt que le
137
- régulateur n'a pas tranché (sa réponse jointe à la raison de l'état, une décision refusée deux
138
- fois, le même arrêt revenu sans fait nouveau, ou trois relances d'affilée sur le même arrêt) : je le tranche, `--reprendre` ou `--depuis`, ou je le monte. J'arrête tout agent
139
- que j'ai lancé moi-même dès son rapport lu (`TaskStop`). Ainsi ma séance ne porte pas le détail
140
- des tickets, et elle reste courte.
107
+ - **Le circuit fait les gestes mécaniques** : comme une CI applique ses règles sans demander
108
+ (rejouer, régénérer, sauter une tâche sans objet), le circuit fait lui-même, sans séance, les
109
+ gestes que la liste des étapes écrit (`GESTES` de `packages/grillhouse/scripts/etapes.mjs`) : rejouer une commande à 75,
110
+ finir à 75, renvoyer au testwriter
111
+ que nomme la fiche du développeur, régénérer les références, juger aux contrôles un développeur
112
+ qui n'a rien à livrer ; chaque geste s'écrit au ticket et au journal avec sa règle
113
+ (`Circuit · … · geste`). Ainsi ma séance n'est réveillée que par la fin du lot ou par une vraie
114
+ question.
115
+ - **Une vraie question monte à moi** : tout autre arrêt finit le circuit sur une question
116
+ (`MONTEES` de la liste des étapes), son code celui de l'arrêt ; l'état du circuit la porte
117
+ (`question` : l'arrêt, le fait, sa pièce, un `fichier:ligne` ou une commande et sa sortie, la
118
+ question, et qui doit répondre, `superviseur` ou `responsable`), et le ticket aussi
119
+ (`Circuit · question`). Je relis sa pièce avant de m'appuyer sur la question ou de la porter au
120
+ responsable. Je réponds moi-même à ce qui est à moi (le cadre du ticket, un
121
+ arbitrage, un geste) ; je porte au responsable ce qui est à lui (`qui` responsable : la question
122
+ du relecteur sur un vrai mot de la langue), le fonctionnel et ce que la charte lui garde. Je
123
+ réponds par une commande du circuit, en arrière-plan : `--reprendre`, avec `--contexte` quand
124
+ l'agent repris doit savoir ce que j'ai tranché, ou `--depuis <testwriter|developpeur>
125
+ --contexte`, l'étape d'où le ticket entier repart ; `--etendre <paquet>` quand le plan doit
126
+ gagner un paquet (un `hors-plan`, un rouge hors du plan), que le circuit met au titre avant son
127
+ premier lecteur, puis reprend l'étape en cours ; `--arreter`, son motif en `--contexte`, quand le ticket
128
+ doit changer avant tout travail. Une décision du responsable qui change le plan entre dans la
129
+ description du ticket (`bd update <ticket> -d`), que tous les agents lisent, avant que je
130
+ reprenne. 22 (`questionnement`) : des questions du plan restent ouvertes après la réponse de
131
+ l'explorateur, au ticket avec leur pièce ; je change le plan (`bd update <ticket>`) ou je le
132
+ garde, puis `--reprendre` le fait passer tel qu'il est alors ; ce qui revient au responsable lui
133
+ monte d'abord. J'arrête tout
134
+ agent que j'ai lancé moi-même dès son rapport lu (`TaskStop`). Ainsi ma séance ne porte pas le
135
+ détail des tickets, et elle reste courte.
141
136
  - **Un ticket débloqué repart de son état** : l'état du travail est dans l'état du circuit, au
142
- ticket et dans sa copie ; `--reprendre` repart de l'état, et la séance du régulateur les relit. Ainsi
137
+ ticket et dans sa copie ; `--reprendre` repart de l'état. Ainsi
143
138
  le travail fait sert à la reprise.
144
139
  - **L'exploration avant la réalisation** : un objectif dont le découpage n'est pas connu ouvre un
145
140
  ticket d'exploration, sans code, mené par l'agent explorateur (`subagent_type: explorateur`). Il
146
141
  se ferme sur les décisions et les tickets de réalisation proposés, que le responsable valide.
142
+ L'explorateur n'écrit rien au ticket : je consigne au ticket les tickets qu'il propose, fermés
143
+ sous le ticket d'exploration, et sa passation.
147
144
  Ainsi chaque réalisation part petite et testable.
148
145
  - **Un ticket, une livraison** : je lis le plan de chaque agent au ticket avant son code ; un plan
149
146
  qui annonce plusieurs livraisons s'arrête là. Un ticket qui s'est révélé trop gros fait entrer sa
@@ -176,8 +173,9 @@ nomme le responsable, ce qui décide, les documents qu'il valide et les commande
176
173
  fois. Ainsi deux travaux ne s'écrasent jamais.
177
174
  - **Une mesure lourde à la fois** : le verrou de la machine la tient (charte, « Une mesure lourde
178
175
  à la fois sur la machine ») : mon `npm run verifier` le prend comme celui de chaque circuit, de
179
- chaque dépôt de la machine, et attend son tour. Ainsi une mesure rend le résultat du code, et non
180
- celui d'une autre mesure qui tourne à côté.
176
+ chaque dépôt de la machine, et attend son tour ; dans le dépôt du cadre, il passe après toute
177
+ mesure d'un projet qui attend. Ainsi une mesure rend le résultat du code, et non celui d'une autre
178
+ mesure qui tourne à côté.
181
179
  - **La charge avant le lancement** : avant de lancer un agent, je lis la charge de la machine
182
180
  (`uptime`) ; machine chargée, les agents attendent. Ainsi un test rend le résultat du code, et non
183
181
  celui d'une machine saturée.
@@ -207,44 +205,45 @@ séance le dit au responsable et ne lance aucun circuit. Les rôles sont des age
207
205
  cadre (ses `agents/`, leurs compétences dans ses `skills/`), chacun sous ses verrous et les droits que nomment les commandes de sa
208
206
  compétence, sans la configuration propre de l'utilisateur (`packages/grillhouse/scripts/droits.mjs`). Un ticket
209
207
  parcourt l'arbre de son circuit, les étapes « auto » comprises (`packages/grillhouse/scripts/etapes.mjs`, la seule
210
- liste), comme un pipeline de GitLab CI ses étapes et leurs travaux : 0 Exploration,
211
- l'`explorateur` ; 1 Ouverture : 1.1 Relevé des composants, auto, puis 1.2 Questionnement,
212
- le `questionneur` ⇄ le `referent-technique`, qui répond pour le plan, en tours, quatre au plus ;
213
- 2 Composants, pour chaque composant du titre dans son ordre : 2.1 Tests, le `testwriter`, 2.2 Preuve
214
- du rouge, auto, trois essais au plus, puis 2.3 Code, le `developpeur`, 2.4 Contrôles, auto, trois
215
- essais au plus ; 3 Passe finale, auto, puis 3.1 Régénération des références, auto, pour un projet
216
- qui déclare les références qu'il tire de la copie entière (`grillhouse.references` de son
217
- `package.json`, chacune `{ nom, commande, fichiers, tests, gardes }` : `fichiers`, des chemins,
218
- des dossiers ou des motifs `*` et `**`, comme les entrées de Turborepo ; `tests`, les fichiers de
219
- test qui la jugent ; `gardes`, les gardes du projet qui la jugent, par le nom que porte leur
220
- constat SARIF), comme `rustc --bless` : une passe finale rouge sur elles seules (un de leurs
221
- tests, un constat d'une de leurs gardes, quel que soit son fichier, ou un fichier qu'elles
222
- couvrent) les régénère, la
223
- différence va au lot et au relecteur, et un changement que le plan ne nomme pas arrête le circuit
224
- (`references`) ; 4 Relecture, le `relecteur`, trois tours au plus, un lot
225
- rendu revenant en 2 pour les composants nommés ; 5 Intégration : 5.1 Commit et 5.2 File : main,
226
- poussée, CI, auto. Hors de la suite, sous l'étape arrêtée, l'Arbitrage de l'arrêt : le
227
- `regulateur` tranche l'arrêt ⇄ le `questionneur` questionne sa décision avant qu'elle
228
- s'applique, trois arrêts au plus. Le questionneur ne décide rien, et l'échange va au ticket ; le
229
- référent technique tranche aussi une question de conception née d'un ticket, que le superviseur
230
- lui pose. Ainsi chaque agent travaille dans son cadre, et le numéro d'une étape dit où en est
231
- chaque ticket. Un plan que le superviseur rend au responsable passe aussi par le questionneur.
208
+ liste), comme un pipeline de GitLab CI ses étapes et leurs travaux : 1 Plan : l'`explorateur` écrit le plan
209
+ (ses critères, les paquets à toucher, ses questions ouvertes, que le circuit écrit au ticket), le
210
+ `questionneur` le lit une seule fois, l'explorateur répond une fois, CHANGE ou GARDE par question,
211
+ et ce qui reste ouvert me monte ;
212
+ 2 Tests, le `testwriter`, une séance pour tout le ticket, et 2.1 Preuve du rouge, auto, sur tous
213
+ les tests du lot, trois essais au plus ; 3 Code, le `developpeur`, une séance pour tout le ticket,
214
+ et 3.1 Contrôles, auto, sur tout le plan, trois essais au plus ; 4 Passe finale et relecture :
215
+ 4.1 Passe finale, auto, trois essais au plus, puis 4.2 Régénération des références, auto : celles
216
+ que le projet tire de la copie entière (`grillhouse.references` de son `package.json`, chacune
217
+ `{ nom, commande, fichiers, tests, gardes }` : `fichiers`, des chemins, des dossiers ou des motifs
218
+ `*` et `**`, comme les entrées de Turborepo ; `tests`, les fichiers de test qui la jugent ;
219
+ `gardes`, les gardes du projet qui la jugent, par le nom que porte leur constat SARIF), et celles
220
+ du cadre dans chaque projet (l'index des interfaces, les `turbo.json`, les rapports d'API, la
221
+ dette des gardes), comme les genrules de Bazel et `--update-snapshots` : un rouge de la passe
222
+ finale qui est le leur (un de leurs tests, un constat d'une de leurs gardes, quel que soit son
223
+ fichier, ou un fichier qu'elles couvrent), mêlé ou non à d'autres, ou une dette qui baisse, les
224
+ régénère, puis la passe finale rejoue restreinte à ce qu'elles changent, les autres rouges allant
225
+ chacun à son propriétaire ; la différence va au lot et au relecteur, un plafond ne monte jamais,
226
+ et un changement d'une référence du projet que le plan ne nomme pas arrête le circuit
227
+ (`references`), et 4.3 Relecture, le `relecteur`, trois tours au plus, qui rend une ligne de
228
+ conformité par élément que le lot ajoute, change ou supprime (la liste mécanique que le circuit
229
+ lui donne, chaque ligne avec sa règle : CADRE, INTERFACE ou ARCHITECTURE), un « non » rendant le
230
+ lot et un élément sans ligne refusant sa fiche, un lot rendu revenant à
231
+ l'agent que nomme chaque constat, en 2 ou en 3, chaque constat ouvert jusqu'à la relecture qui le
232
+ juge levé ; 5 Intégration : 5.1 Commit et 5.2 File : main,
233
+ poussée, CI, auto. Le questionneur ne décide rien, et ses questions vont au ticket. Ainsi chaque
234
+ agent travaille dans son cadre, et le numéro d'une étape dit où en est chaque ticket. Un plan que le superviseur rend au responsable passe aussi par le questionneur.
232
235
  Ainsi une décision se mesure à des questions qu'elle ne s'est pas posées, comme le code à des
233
236
  tests qu'il n'a pas écrits.
234
237
 
235
- **Le superviseur intervient sur ce qui dépasse le ticket** : le circuit applique lui-même le
236
- geste que la table des arrêts (`packages/grillhouse/scripts/etapes.mjs`) écrit pour un genre d'arrêt, et vérifie sur
237
- son état chaque décision du régulateur avant de l'appliquer ; le régulateur tranche le reste, ce que la
238
- lettre d'un critère, un précédent écrit ou une règle du cadre tranchent ; il fait monter au
239
- superviseur le reste, et tout sujet sensible : le cadre, l'architecture, et le fonctionnel que la
240
- charte du projet nomme (« Ce qui monte au superviseur »). Ainsi chaque décision se prend au plus
241
- près du travail, et le superviseur garde les siennes. La réponse du responsable entre dans le plan
242
- du ticket, comme une RFC amendée : le référent technique la verse dans la description, le circuit
243
- l'écrit, et un plan changé passe le questionneur avant que le régulateur ne reprenne ; tous les
244
- agents jugent sur le plan, les commentaires restent l'historique, et le contexte d'une relance porte
245
- l'arrêt, jamais une décision du responsable. Une décision qu'il donne en séance, hors d'une
246
- question du circuit, suit le même chemin (`--decision`) : le circuit en cours s'arrête, puis
247
- reprend sur le plan changé. Ainsi chaque agent lit la même décision.
238
+ **Le superviseur intervient sur ce qui dépasse le ticket** : le circuit fait lui-même les gestes
239
+ mécaniques que la liste des étapes écrit, et monte au superviseur tout arrêt qu'aucun geste ne
240
+ tranche, avec son fait, sa pièce et sa question ; le superviseur tranche ce que la lettre d'un
241
+ critère, un précédent écrit ou une règle du cadre tranchent, et monte au responsable le reste, et
242
+ tout sujet sensible : le cadre, l'architecture, et le fonctionnel que la charte du projet nomme
243
+ (« Ce qui monte au superviseur »). Ainsi chaque décision se prend au plus près du travail. La
244
+ réponse du responsable entre dans le plan du ticket, comme une RFC amendée : le superviseur
245
+ l'écrit dans sa description ; tous les agents jugent sur le plan, les commentaires restent
246
+ l'historique. Ainsi chaque agent lit la même décision.
248
247
 
249
248
  Un objectif dont le découpage n'est pas connu commence par une exploration, sans code ; un ticket
250
249
  de réalisation fait une seule livraison, en un seul commit ; tout ticket se crée sous sa mère
@@ -252,15 +251,15 @@ de réalisation fait une seule livraison, en un seul commit ; tout ticket se cr
252
251
 
253
252
  **Un ticket de réalisation nomme ses composants** : sa section « Architecture » et son titre
254
253
  (« numéro — sujet — composant, composant ») les nomment, le fournisseur d'abord, puis ses lecteurs.
255
- Le relevé des composants (`packages/grillhouse/scripts/composants-affectes.mjs`) les trouve à la création du ticket, et
256
- le circuit le refait avant le premier testwriter : un composant relevé que le titre ne nomme pas
257
- l'arrête d'emblée. Dans la copie du ticket, le circuit (`packages/grillhouse/scripts/circuit.mjs`), que lance le superviseur, lance un
258
- agent par composant, chacun enveloppé dans son paquet, dans cet ordre, puis le relecteur, qui relit
259
- l'ensemble. Ainsi un type change avec ses
260
- lecteurs, comme dans une demande de fusion de rustc, et chaque agent écrit dans son seul paquet.
261
- Sur un lot rendu, le circuit rejoue les seuls composants que les constats nomment, puis la passe
262
- finale restreinte à ce que le correctif change et à ses dépendants, et le relecteur relit la
263
- différence depuis la relecture d'avant et ses constats ; la passe finale entière joue une fois
254
+ L'explorateur les trouve par le relevé des composants
255
+ (`packages/grillhouse/scripts/composants-affectes.mjs`) quand il écrit le plan, à l'étape 1 : ses paquets à toucher
256
+ deviennent les composants du titre, que le circuit écrit. Dans la copie du ticket, le circuit (`packages/grillhouse/scripts/circuit.mjs`), que lance le superviseur, lance un
257
+ seul testwriter et un seul développeur pour tout le ticket, chacun dans l'enveloppe de tous les
258
+ paquets du plan, puis le relecteur, qui relit l'ensemble. Ainsi un type change avec ses lecteurs,
259
+ comme dans une demande de fusion de rustc : un auteur, une série de tests et de code, une CI sur
260
+ l'ensemble, une revue. Sur un lot rendu, le circuit relance l'agent que nomme chaque constat,
261
+ puis la passe finale restreinte à ce que le correctif change et à ses dépendants, et le relecteur
262
+ relit la différence depuis la relecture d'avant et les constats ouverts ; la passe finale entière joue une fois
264
263
  avant l'intégration. Ainsi seul ce qui a changé se rejoue, comme Bazel ne joue que les cibles
265
264
  qu'un changement atteint.
266
265
 
@@ -286,8 +285,8 @@ Le circuit du ticket fait chaque commit après le verdict `ACCEPTÉ` du relecteu
286
285
  une remarque du relecteur hors des critères devient une découverte (`relecteur`, « Le
287
286
  verdict »). Ainsi chaque comportement attendu devient un test, et aucun agent ne le tranche
288
287
  seul.
289
- - **Une décision se confronte aux intentions** : chaque décision, la mienne, celle du référent technique
290
- ou celle que je monte au responsable, nomme l'intention du métacadre qu'elle sert, et ce que
288
+ - **Une décision se confronte aux intentions** : chaque décision, la mienne ou celle que je monte
289
+ au responsable, nomme l'intention du métacadre qu'elle sert, et ce que
291
290
  cette intention demande ici ; ce qui va au-delà sort du ticket. Ainsi le travail reste au service
292
291
  de ce que le cadre veut, sans dériver vers ce qu'un cas suggère.
293
292
  - **Un ticket nomme ses règles** : à l'ouverture, un ticket nomme les règles qu'il applique, par
@@ -297,21 +296,36 @@ Le circuit du ticket fait chaque commit après le verdict `ACCEPTÉ` du relecteu
297
296
  puis dans la spécification et l'architecture globale. Ce qu'une règle tranche, je le tranche et
298
297
  je le recopie dans le ticket avec sa règle. Ainsi le responsable ne reçoit jamais une question
299
298
  qu'une règle écrite tranche déjà.
300
- - **Une question de conception part au référent technique** : une question de conception d'un agent part à
301
- un référent technique neuf (`subagent_type: referent-technique`, `name: <ticket>-agent-2-<sujet>`), et le ticket
302
- reçoit l'étiquette `arbitrage`. La question part dans les mots de l'agent, sans ses options et
303
- sans mon avis. Je transmets le verdict tel quel, avec l'adresse de son commentaire « Arbitrage »
304
- ; s'il monte au responsable, la question monte comme il l'a rédigée. Ainsi une question de
305
- conception se tranche hors de l'urgence de débloquer l'agent.
299
+ - **Une question de conception se tranche par les règles** : une question de conception d'un
300
+ agent, je la tranche par la référence mature, les textes du projet et le mécanisme commun
301
+ (charte, « Comment on arbitre »), ou je la monte au responsable ; le ticket reçoit l'étiquette
302
+ `arbitrage`, et mon arbitrage s'écrit au ticket, sous ce titre et avec ces six sections :
303
+
304
+ ```
305
+ ## Arbitrage — <la question en une phrase>
306
+ ### Question structurelle
307
+ ### Modèle mûr
308
+ ### Textes du projet
309
+ ### Mécanisme commun
310
+ ### Verdict — tranché | monte au responsable
311
+ ### Les options de l'agent
312
+ ```
313
+
314
+ Un verdict « tranché » se lit réglé par la garde des consommateurs et par l'intégration ; un
315
+ verdict qui monte attend la réponse du responsable. Ainsi une question de conception se tranche
316
+ hors de l'urgence de débloquer l'agent.
306
317
  - **Une donnée manque, son fournisseur rejoint le ticket** : quand la passation d'un agent dit
307
318
  qu'une donnée manque chez un fournisseur, j'ajoute ce fournisseur en tête des composants du
308
319
  ticket, dans son titre et dans sa section « Architecture ». Un agent publie la donnée dans le
309
320
  fournisseur, puis le lecteur reprend, et le tout fait une seule livraison, en un seul commit ;
310
- quand aucun composant ne la fournit, la question part au référent technique. Ainsi chaque donnée garde un
321
+ quand aucun composant ne la fournit, la question se tranche comme une question de conception. Ainsi chaque donnée garde un
311
322
  seul composant qui la calcule, et elle entre avec son lecteur, comme dans une demande de fusion
312
323
  de rustc.
313
- - **Une consommation nouvelle part au référent technique** : un élément qu'une interface n'accorde pas
314
- (section « Consommateurs ») est une question de conception, même publié. La section
324
+ - **Une consommation nouvelle est une question de conception** : un élément qu'une interface
325
+ n'accorde pas (section « Consommateurs ») se tranche ainsi, même publié, sur l'architecture
326
+ d'ensemble : le sens des dépendances que fixe `docs/ARCHITECTURE.md`, le cycle qu'elle créerait,
327
+ et le composant dont l'élément est la fonction ; un verdict « tranché » nomme la ligne à ajouter
328
+ (`- <consommateur> : <éléments>`) à l'interface du fournisseur. La section
315
329
  « Architecture » du ticket qui nomme le consommateur et chaque élément, mot pour mot, l'a déjà
316
330
  tranchée : la ligne entre sans arbitrage. Ainsi une dépendance que le ticket fixe ne repasse pas
317
331
  par une question.