@roomi-fields/grillhouse 0.23.1 → 0.24.1
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.
- package/.claude-plugin/plugin.json +1 -1
- package/METACADRE.md +1 -1
- package/agents/explorateur.md +4 -2
- package/agents/questionneur.md +1 -1
- package/bin/grillhouse.mjs +3 -58
- package/cadre/templates/projet/CLAUDE.md +5 -1
- package/cadre/templates/projet/docs/agents/issue-tracker.md +4 -4
- package/charte.md +23 -6
- package/docs/ARCHITECTURE.md +130 -1
- package/hooks/register.tsx +3 -13
- package/package.json +13 -1
- package/scripts/bilan.mjs +134 -88
- package/scripts/circuit.mjs +1547 -2248
- package/scripts/composants-affectes.mjs +27 -108
- package/scripts/consommateurs-arbitres.mjs +15 -21
- package/scripts/consommateurs.d.ts +8 -0
- package/scripts/consommateurs.mjs +5 -1
- package/scripts/dette.d.ts +23 -0
- package/scripts/dette.mjs +76 -13
- package/scripts/droits.mjs +38 -44
- package/scripts/elements-du-lot.mjs +246 -0
- package/scripts/enveloppe/enveloppe.mjs +105 -232
- package/scripts/enveloppe/lancer.sh +79 -49
- package/scripts/enveloppe/paquets-du-plan.mjs +49 -0
- package/scripts/etapes.mjs +148 -213
- package/scripts/frontieres.mjs +4 -2
- package/scripts/gardes-du-cadre.mjs +8 -6
- package/scripts/grillhouse-maj.mjs +113 -19
- package/scripts/index-interfaces.mjs +21 -1
- package/scripts/integration/integrer.mjs +2 -2
- package/scripts/interfaces-contre-code.mjs +25 -17
- package/scripts/migrations/0.23.0-config-vitest.mjs +26 -23
- package/scripts/migrations/0.23.2-copies-du-cadre.mjs +201 -0
- package/scripts/migrations/0.24.0-circuit-simplifie.mjs +274 -0
- package/scripts/migrations.mjs +41 -6
- package/scripts/paquets.d.ts +5 -0
- package/scripts/paquets.mjs +3 -0
- package/scripts/references-par-les-types.mjs +55 -36
- package/scripts/registre.mjs +7 -15
- package/scripts/resultats.mjs +283 -142
- package/scripts/resumes.mjs +1 -1
- package/scripts/session-start.sh +1 -2
- package/scripts/sources.mjs +28 -0
- package/scripts/sous-commandes.mjs +62 -0
- package/scripts/tableau.mjs +85 -191
- package/scripts/tests.mjs +19 -17
- package/scripts/verifier.mjs +5 -4
- package/scripts/verrou-de-machine.mjs +131 -24
- package/scripts/verrous/verrou.mjs +66 -5
- package/skills/developpeur/SKILL.md +60 -50
- package/skills/explorateur/SKILL.md +90 -64
- package/skills/grill/SKILL.md +1 -1
- package/skills/mesure/SKILL.md +2 -1
- package/skills/pitmaster/SKILL.md +132 -118
- package/skills/pitmaster/references/consigne-agent.md +54 -148
- package/skills/questionneur/SKILL.md +18 -18
- package/skills/relecteur/SKILL.md +69 -23
- package/skills/testwriter/SKILL.md +46 -35
- package/types/index.d.ts +1 -3
- package/agents/referent-technique.md +0 -9
- package/agents/regulateur.md +0 -11
- package/scripts/enveloppe/composant.mjs +0 -11
- package/scripts/etat-du-circuit.mjs +0 -104
- package/skills/referent-technique/SKILL.md +0 -145
- 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
|
|
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 —
|
|
6
|
+
# Explorateur — relever avant de réaliser
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
13
|
+
Je travaille de deux façons :
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
##
|
|
21
|
+
## Ma base de connaissance
|
|
18
22
|
|
|
19
|
-
|
|
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>`)
|
|
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
|
|
25
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
##
|
|
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é
|
|
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
|
|
44
|
-
|
|
45
|
-
##
|
|
46
|
-
|
|
47
|
-
1. **Le relevé.**
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
la
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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.
|
package/skills/grill/SKILL.md
CHANGED
|
@@ -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
|
|
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.
|
package/skills/mesure/SKILL.md
CHANGED
|
@@ -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,
|
|
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
|
|
23
|
-
|
|
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
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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)
|
|
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
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
- **
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
n'
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
contexte d'
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
|
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
|
|
180
|
-
|
|
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 :
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
essais au plus ; 3
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
(
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
chaque
|
|
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
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
l'
|
|
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
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
l'ensemble. Ainsi un type change avec ses
|
|
260
|
-
|
|
261
|
-
Sur un lot rendu, le circuit
|
|
262
|
-
finale restreinte à ce que le correctif change et à ses dépendants, et le relecteur
|
|
263
|
-
différence depuis la relecture d'avant et
|
|
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
|
|
290
|
-
|
|
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
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
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
|
|
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
|
|
314
|
-
(section « Consommateurs »)
|
|
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.
|