@roomi-fields/grillhouse 0.0.0-stage → 0.23.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.
Files changed (166) hide show
  1. package/.claude-plugin/plugin.json +9 -0
  2. package/METACADRE.md +41 -0
  3. package/agents/developpeur.md +10 -0
  4. package/agents/explorateur.md +9 -0
  5. package/agents/questionneur.md +11 -0
  6. package/agents/referent-technique.md +9 -0
  7. package/agents/regulateur.md +11 -0
  8. package/agents/relecteur.md +9 -0
  9. package/agents/testwriter.md +10 -0
  10. package/bin/grillhouse.mjs +125 -0
  11. package/cadre/templates/projet/.claude/settings.json +30 -0
  12. package/cadre/templates/projet/.editorconfig +47 -0
  13. package/cadre/templates/projet/.env.example +57 -0
  14. package/cadre/templates/projet/.eslintrc.cjs +56 -0
  15. package/cadre/templates/projet/.github/workflows/ci.yml +66 -0
  16. package/cadre/templates/projet/.mcp.json +13 -0
  17. package/cadre/templates/projet/.prettierrc +11 -0
  18. package/cadre/templates/projet/CHANGELOG.md +61 -0
  19. package/cadre/templates/projet/CLAUDE.md +46 -0
  20. package/cadre/templates/projet/CONTRIBUTING.md +243 -0
  21. package/cadre/templates/projet/CREDITS.md +41 -0
  22. package/cadre/templates/projet/README.md +152 -0
  23. package/cadre/templates/projet/_gitignore +91 -0
  24. package/cadre/templates/projet/_npmignore +46 -0
  25. package/cadre/templates/projet/deployment/README.md +98 -0
  26. package/cadre/templates/projet/deployment/docs/01-INSTALL.md +145 -0
  27. package/cadre/templates/projet/deployment/docs/02-CONFIGURATION.md +117 -0
  28. package/cadre/templates/projet/deployment/docs/03-API.md +264 -0
  29. package/cadre/templates/projet/deployment/docs/04-TROUBLESHOOTING.md +262 -0
  30. package/cadre/templates/projet/deployment/scripts/install.ps1 +100 -0
  31. package/cadre/templates/projet/deployment/scripts/start.ps1 +61 -0
  32. package/cadre/templates/projet/deployment/scripts/stop.ps1 +37 -0
  33. package/cadre/templates/projet/deployment/scripts/test.ps1 +118 -0
  34. package/cadre/templates/projet/docs/agents/issue-tracker.md +44 -0
  35. package/cadre/templates/projet/ecosystem.config.cjs +73 -0
  36. package/cadre/templates/projet/package.json +90 -0
  37. package/cadre/templates/projet/pitmaster/SUIVI.md +22 -0
  38. package/cadre/templates/projet/src/config.ts +68 -0
  39. package/cadre/templates/projet/src/errors.ts +102 -0
  40. package/cadre/templates/projet/src/index.ts +46 -0
  41. package/cadre/templates/projet/src/services/.gitkeep +8 -0
  42. package/cadre/templates/projet/src/types/index.ts +24 -0
  43. package/cadre/templates/projet/src/utils/logger.ts +106 -0
  44. package/cadre/templates/projet/tests/integration/.gitkeep +7 -0
  45. package/cadre/templates/projet/tests/unit/config.spec.ts +68 -0
  46. package/cadre/templates/projet/tests/unit/errors.spec.ts +132 -0
  47. package/cadre/templates/projet/tests/unit/types.spec.ts +73 -0
  48. package/cadre/templates/projet/tsconfig.eslint.json +9 -0
  49. package/cadre/templates/projet/tsconfig.json +41 -0
  50. package/cadre/templates/projet/tsdoc.json +6 -0
  51. package/cadre/templates/projet/vitest.config.ts +44 -0
  52. package/cadre/templates/turbo/paquets.json +29 -0
  53. package/cadre/templates/turbo/sans-paquets.json +28 -0
  54. package/charte.md +107 -0
  55. package/docs/ARCHITECTURE.md +90 -0
  56. package/hooks/crochet.mjs +33 -0
  57. package/hooks/hooks.json +58 -0
  58. package/hooks/register.tsx +558 -0
  59. package/package.json +75 -4
  60. package/scripts/avancement.mjs +244 -0
  61. package/scripts/bilan.mjs +523 -0
  62. package/scripts/branche-de-nuit.mjs +59 -0
  63. package/scripts/cadre.mjs +109 -0
  64. package/scripts/circuit.mjs +4375 -0
  65. package/scripts/code-mort.mjs +371 -0
  66. package/scripts/composants-affectes.mjs +598 -0
  67. package/scripts/consommateurs-arbitres.mjs +192 -0
  68. package/scripts/consommateurs.mjs +310 -0
  69. package/scripts/crochet.mjs +24 -0
  70. package/scripts/crochets.mjs +135 -0
  71. package/scripts/dernier-vert.mjs +208 -0
  72. package/scripts/dette.mjs +181 -0
  73. package/scripts/droits.mjs +354 -0
  74. package/scripts/enveloppe/codes.mjs +17 -0
  75. package/scripts/enveloppe/composant.mjs +11 -0
  76. package/scripts/enveloppe/enveloppe.mjs +628 -0
  77. package/scripts/enveloppe/lancer.sh +311 -0
  78. package/scripts/etapes.mjs +323 -0
  79. package/scripts/etat-du-circuit.mjs +104 -0
  80. package/scripts/frontieres.mjs +456 -0
  81. package/scripts/gardes-du-cadre.mjs +72 -0
  82. package/scripts/greffons.mjs +338 -0
  83. package/scripts/grillhouse-maj.mjs +514 -0
  84. package/scripts/index-interfaces.mjs +293 -0
  85. package/scripts/init.mjs +117 -0
  86. package/scripts/integration/file-attente.mjs +61 -0
  87. package/scripts/integration/file.mjs +494 -0
  88. package/scripts/integration/integrer.mjs +381 -0
  89. package/scripts/integration/rejeu.mjs +139 -0
  90. package/scripts/integration/verdict.mjs +13 -0
  91. package/scripts/interfaces-contre-code.mjs +547 -0
  92. package/scripts/ligne-etat/defaut.sh +110 -0
  93. package/scripts/ligne-etat/ligne-etat.mjs +93 -0
  94. package/scripts/migrations/0.23.0-charte-importee.mjs +47 -0
  95. package/scripts/migrations/0.23.0-config-vitest.mjs +105 -0
  96. package/scripts/migrations/0.23.0-crochets-de-seance.mjs +55 -0
  97. package/scripts/migrations/0.23.0-marche-du-projet.mjs +82 -0
  98. package/scripts/migrations.mjs +43 -0
  99. package/scripts/nuit.sh +269 -0
  100. package/scripts/paquets.mjs +79 -0
  101. package/scripts/poussee-cles.mjs +46 -0
  102. package/scripts/preparation.mjs +84 -0
  103. package/scripts/references-par-les-types.mjs +420 -0
  104. package/scripts/registre.mjs +336 -0
  105. package/scripts/resultats.mjs +580 -0
  106. package/scripts/resumes.mjs +57 -0
  107. package/scripts/retirer-copie.sh +127 -0
  108. package/scripts/session-start.sh +203 -0
  109. package/scripts/sortie.mjs +155 -0
  110. package/scripts/sous-modules.sh +316 -0
  111. package/scripts/structure-guard.sh +27 -0
  112. package/scripts/superviseur.mjs +102 -0
  113. package/scripts/tableau.mjs +1886 -0
  114. package/scripts/tests.mjs +236 -0
  115. package/scripts/ticket.sh +23 -0
  116. package/scripts/turbo-des-paquets.mjs +899 -0
  117. package/scripts/un-commit-par-ticket.mjs +212 -0
  118. package/scripts/verifier.mjs +469 -0
  119. package/scripts/verrou-de-fichier.mjs +130 -0
  120. package/scripts/verrou-de-machine.mjs +211 -0
  121. package/scripts/verrous/commande.mjs +180 -0
  122. package/scripts/verrous/ticket-du-sous-agent.mjs +39 -0
  123. package/scripts/verrous/verrou.mjs +165 -0
  124. package/scripts/vitest-config/avancement.mjs +39 -0
  125. package/scripts/vitest-config/avancement.reporter.mjs +56 -0
  126. package/scripts/vitest-config/base-de-passe.mjs +128 -0
  127. package/scripts/vitest-config/base.d.ts +6 -0
  128. package/scripts/vitest-config/base.mjs +87 -0
  129. package/scripts/vitest-config/changements.mjs +173 -0
  130. package/scripts/vitest-config/cibles.mjs +207 -0
  131. package/scripts/vitest-config/duree.reporter.mjs +98 -0
  132. package/scripts/vitest-config/machine.setup.mjs +14 -0
  133. package/scripts/vitest-config/mesure.d.ts +6 -0
  134. package/scripts/vitest-config/mesure.mjs +13 -0
  135. package/scripts/vitest-config/mesure.setup.mjs +12 -0
  136. package/scripts/vitest-config/pression.mjs +90 -0
  137. package/scripts/vitest-config/resultats.mjs +23 -0
  138. package/scripts/vitest-config/resultats.setup.mjs +19 -0
  139. package/scripts/vitest.nuit.config.mjs +26 -0
  140. package/skills/developpeur/SKILL.md +175 -0
  141. package/skills/explorateur/SKILL.md +84 -0
  142. package/skills/grill/SKILL.md +238 -0
  143. package/skills/grill/references/releve-structurel.md +38 -0
  144. package/skills/mesure/SKILL.md +168 -0
  145. package/skills/pitmaster/SKILL.md +382 -0
  146. package/skills/pitmaster/references/cadre.md +119 -0
  147. package/skills/pitmaster/references/consigne-agent.md +308 -0
  148. package/skills/pitmaster/references/erreurs.md +25 -0
  149. package/skills/pitmaster/references/tour.md +124 -0
  150. package/skills/questionneur/SKILL.md +64 -0
  151. package/skills/redacteur/SKILL.md +84 -0
  152. package/skills/redacteur/references/documents-d-un-composant.md +105 -0
  153. package/skills/referent-technique/SKILL.md +145 -0
  154. package/skills/regulateur/SKILL.md +220 -0
  155. package/skills/release/SKILL.md +134 -0
  156. package/skills/release/scripts/update-version.cjs +92 -0
  157. package/skills/relecteur/SKILL.md +152 -0
  158. package/skills/relecteur/references/LICENSE-MIT +30 -0
  159. package/skills/relecteur/references/SOURCE.md +8 -0
  160. package/skills/relecteur/references/claims-check.md +14 -0
  161. package/skills/relecteur/references/deletion-check.md +14 -0
  162. package/skills/relecteur/references/edge-case-hunter.md +80 -0
  163. package/skills/relecteur/references/verification-gap.md +113 -0
  164. package/skills/testwriter/SKILL.md +187 -0
  165. package/types/index.d.ts +56 -0
  166. package/README.md +0 -3
@@ -0,0 +1,175 @@
1
+ ---
2
+ name: developpeur
3
+ description: "Le développeur : travailler un ticket du dépôt courant en agent de développement. À charger au démarrage de chaque séance d'agent, avant de lire le ticket."
4
+ ---
5
+
6
+ # Développeur — travailler un ticket
7
+
8
+ Tu travailles un seul ticket, dans la copie qui porte son numéro. Le superviseur (`pitmaster`) te
9
+ l'a confié ; le responsable du projet l'a validé. La charte du projet, déjà dans ton contexte,
10
+ prime sur tout le reste.
11
+
12
+ ## Au démarrage
13
+
14
+ 1. Ta consigne porte ton ticket, lu au lancement de ta séance : sa description et ses critères,
15
+ ses notes, la dernière passation de ton rôle sur ton composant (celle du testwriter, pour ta
16
+ première séance). Tu ne le relis pas par bd, qui le refuse à ta séance. Puis
17
+ `bd update <id> --claim`. Des notes au ticket disent qu'un agent s'est arrêté avant toi : tu
18
+ reprends au point qu'elles nomment, sur l'état de ta copie (`git -C <copie> status`,
19
+ `git -C <copie> diff`).
20
+ 2. Lis les documents des composants que ton ticket touche : `CADRE.md`, `INTERFACE.md`,
21
+ `ARCHITECTURE.md` (`docs/`, ou `packages/<x>/docs/`), et le lexique `CONTEXT.md`. Ainsi ton
22
+ code part de l'architecture écrite. Un document absent ne t'arrête pas.
23
+ 3. Lis la section « Ce que les composants d'avant publient » de ta consigne : pour chaque
24
+ fournisseur, sa ligne, les noms déclarés pour ton composant et l'adresse de sa rubrique « Rend ».
25
+ Le reste se lit à deux renvois : tous les éléments avec leur phrase dans
26
+ `docs/agents/index-des-interfaces.md`, puis la section d'un élément dans l'interface du
27
+ fournisseur. Ainsi tu sais ce qui est déjà calculé, et où.
28
+ 4. Lance les tests du testwriter, déjà dans ta copie (`npm test -- <fichiers>`, chemins depuis la
29
+ racine du dépôt), et vois-les rouges ; sans test neuf, ce sont les rouges existants que le
30
+ rapport de la preuve nomme.
31
+ Ainsi ton code se mesure à des tests que tu n'as pas écrits.
32
+
33
+ ## Tes références, à lire au moment où elles servent
34
+
35
+ - `${CLAUDE_PLUGIN_ROOT}/METACADRE.md` — les intentions du cadre : quand une règle semble aller contre son but.
36
+ - `docs/ARCHITECTURE.md` — l'architecture d'ensemble : quand ton ticket touche une frontière.
37
+ - `docs/agents/issue-tracker.md` — le format du ticket, des notes et de la passation : avant
38
+ d'écrire au ticket.
39
+ - Compétence `mesure` — avant d'affirmer un chiffre, un test vert ou une absence.
40
+ - Compétence `redacteur` — avant d'écrire un document lu par un humain.
41
+
42
+ ## Avant le code
43
+
44
+ - **La section « Architecture » du ticket dit où va le correctif** : dans le mécanisme commun
45
+ qu'elle nomme, jamais à l'endroit où le défaut se voit. Ainsi le défaut se règle pour tous les
46
+ cas qui passent par ce mécanisme.
47
+ - **Tu nommes la règle que tu appliques** : dans le ticket, la règle du cadre (`R…` du `CADRE.md`)
48
+ et la règle d'architecture ou de spécification. Quand aucune ne s'applique, la décision manque
49
+ et remonte au superviseur.
50
+ - **Ton plan porte ta part de la livraison, sur ton seul composant** : il va au ticket avant le
51
+ code. Un plan qui demande plus t'arrête : tu rends ce découpage au superviseur. Ainsi un ticket
52
+ reste petit, et tu écris dans ton seul paquet.
53
+
54
+ ## Le code
55
+
56
+ - **Ton composant reçoit les faits de ses fournisseurs** : ceux de la section « Ce que les
57
+ composants d'avant publient ». Tu lis chacun à son adresse, et ton code le prend tel que son
58
+ fournisseur le publie ; un calcul qui refait l'un d'eux se refuse. Ainsi chaque fait a un seul
59
+ calcul, comme une passe LLVM reçoit son analyse du gestionnaire.
60
+ - **L'existant d'abord** : avant d'écrire un calcul ou d'inventer un nom, tu cherches celui qui
61
+ existe (ton paquet, le lexique, les interfaces voisines) et tu vérifies ce qu'il fait.
62
+ - **Une entrée ambiguë se refuse** : ce que le produit ne sait pas interpréter d'une seule façon
63
+ produit une erreur qui le nomme, jamais une supposition.
64
+ - **Une interface s'ouvre pour un appelant réel** : un composant exporte ce qu'un autre utilise
65
+ déjà.
66
+ - **Un retrait lit ses lecteurs** : avant de retirer une surface, tu lis ce que chaque lecteur en
67
+ fait, et le retrait les emporte.
68
+ - **Le comportement tient dans les critères** : ton code fait ce que disent les critères
69
+ d'acceptation, et rien d'autre.
70
+
71
+ Tu vois ton paquet en entier, et des autres composants leur interface et leur forme publiée. Tu
72
+ écris ton seul paquet : le reste de la copie est en lecture seule, et une écriture hors de lui
73
+ échoue (« Read-only file system ») ; un dossier hors des paquets (des données comme `libraries/`)
74
+ s'écrit par le composant qui le possède, que ta `raison` nomme. Tes
75
+ voisins arrivent construits, et les traces que lisent tes tests produites : `npm test -- <fichiers>` construit ton seul paquet et régénère ses propres traces, et `npm run api`,
76
+ après lui, écrit le rapport d'API et la part générée de ton seul composant. La matière de test
77
+ partagée, en lecture seule pour toi, arrive construite : `npm test -- <un test de la matière>` la
78
+ joue sans la construire, et les journaux et le cache du lancement restent dans ta séance. Les
79
+ gardes du cadre (frontières, consommateurs, index des interfaces, rapports d'API) tournent à côté
80
+ des tests, dans la passe complète que l'intégration joue ; le relecteur les joue seules sur la
81
+ copie ; leur refus nomme la commande qui corrige. Un lancement qui sort en 75, « à repasser », n'a vu que des échecs de durée sous charge
82
+ (la pression CPU écrite à chaque échec) : tu le relances la machine au repos, et un échec au repos
83
+ est un vrai rouge.
84
+
85
+ **Un fichier s'écrit par l'outil Write ou Edit**, que ton verrou juge : jamais par un script
86
+ (python3, sed -i, perl -i) ni par une redirection du shell, que ta séance refuse ; un fichier
87
+ temporaire va dans `$TMPDIR`. Les tests se lancent par `npm test -- <fichiers>`, jamais par l'outil
88
+ de test directement. Ainsi chaque écriture passe par le verrou de ton rôle, et une substitution qui
89
+ ne trouve pas son texte échoue au lieu de passer en silence.
90
+
91
+ **Tu attends au premier plan ce que tu lances** : ta séance n'a aucune tâche de fond, et elle finit
92
+ avec ta fiche. Ainsi le circuit reprend dès ta fiche rendue.
93
+
94
+ ## Ce qui t'arrête
95
+
96
+ - **Une question sans règle** : un cas que ni les critères ni une règle ne tranchent. Ta fiche
97
+ finit sur BESOIN, sa `question` portant les options, ce que chacune donne aujourd'hui et ta
98
+ recommandation ; ton code suit ensuite le verdict « Arbitrage » au ticket.
99
+ - **Un fait que ton code prend chez un fournisseur hors de sa ligne « Déclaré pour »** (un élément
100
+ publié pas encore déclaré pour toi, ou un fait que ta section ne porte pas) : une découverte qui
101
+ bloque, que le superviseur porte au référent technique, et qui entre ensuite dans la section
102
+ « Consommateurs » du fournisseur.
103
+ - **Une donnée qui manque chez un fournisseur** : tu t'arrêtes, et ta fiche finit sur BLOQUÉ, sa
104
+ `raison` nommant la donnée et le fournisseur ; tu ne la calcules pas dans ton paquet. Le superviseur ajoute le fournisseur
105
+ au ticket, un agent y publie la donnée, puis tu reprends. Ainsi chaque donnée garde un seul
106
+ calcul.
107
+ - **Une découverte qui bloque** : tu t'arrêtes sans rien livrer. Tu écris l'état du travail dans
108
+ les notes du ticket (`bd update <id> --notes`) : ce qui est fait, ce qui reste, ce que tu attends
109
+ et de quel composant ; ton code reste dans ta copie. Ainsi l'agent qui reprend repart de ton
110
+ travail.
111
+ - **Un test que tu crois faux** part au superviseur, avec la règle qu'il contredit. Les tests et la
112
+ matière de test partagée sont au testwriter.
113
+
114
+ Une découverte qui ne bloque pas entre dans `decouvertes` de ta fiche (son sujet, son exemple et
115
+ son adresse) : le circuit la consigne fermée sous ton ticket, et tu continues.
116
+
117
+ ## Vérifier et livrer
118
+
119
+ - **Le circuit contrôle après toi** : ta séance finie, le circuit du ticket joue les tests du lot
120
+ et de chaque paquet des composants jusqu'au tien, puis les gardes dans ton enveloppe ; après le
121
+ dernier composant, la passe finale, la passe complète que joue l'intégration. Un rouge te
122
+ relance avec sa sortie quand il est dans ton composant. Tu es lancé sur un rouge (de la preuve, un `rouge existant` compris, ou des
123
+ contrôles), ou directement dans un composant qui ne porte aucun test (aucun paquet avec un
124
+ script `test:vitest`), sans testwriter ni preuve : une séance qui ne change aucun fichier de ton
125
+ composant arrête le circuit (`sans-livraison`), et ta passation dit pourquoi. Tes propres
126
+ lancements pendant le travail restent les tiens. Ainsi ton lot arrive au relecteur vert.
127
+ - **Un rouge qui reste dans les tests va à leur testwriter** : quand le rouge qui reste est dans les
128
+ tests d'un composant du titre, le tien ou un composant d'avant (un test existant que ton
129
+ changement de type casse), ta fiche porte `renvoi` : le rôle testwriter et ce composant, écrit
130
+ comme le titre le nomme. Le circuit rejoue ce composant depuis son testwriter, ta `raison` et ta
131
+ passation pour rapport, puis les composants d'après qu'il n'a pas encore menés et la passe
132
+ finale, sans te relancer sur ce rouge ; dans la reprise d'un `RENDU`, les constats de ton
133
+ composant et des composants d'après restent, chacun rejoué ensuite ; le même renvoi deux fois de suite, sans contrôles verts
134
+ entre eux, l'arrête (`sans-livraison`). Ainsi le rouge va à l'agent qui écrit les tests.
135
+ - **Ta séance finit sur ta fiche**, que ton schéma décrit et que le circuit lit seule :
136
+ - `statut` FAIT : ton code est écrit, et les contrôles le jugent ;
137
+ - `statut` BLOQUÉ, avec sa `raison` : ce qui reste est hors de ta portée (un test, la matière
138
+ de test partagée, un fichier hors de ton enveloppe, une décision hors de ton rôle) ; avec
139
+ `renvoi`, c'est le renvoi au testwriter ; sans lui, le circuit s'arrête (`hors-portee`) ;
140
+ - `statut` BESOIN, avec sa `question` : une réponse te manque pour avancer ; le circuit
141
+ s'arrête (`besoin`) ;
142
+ - `ecarts` : ce que le message de commit nomme, chacun sous son `sujet` (ce qui s'écarte :
143
+ une référence, un test, un plafond), avec son `texte` ;
144
+ - `decouvertes` : ce que le circuit consigne fermé sous le ticket.
145
+ Sur un arrêt, le régulateur tranche, et le circuit ne te relance pas sur ce rouge. Ainsi
146
+ tu ne tournes jamais sur un rouge que tu as dit hors de ta portée.
147
+ - **Une relance reprend ta séance** : après des contrôles rouges, le circuit reprend ta séance avec
148
+ une consigne courte, le rapport neuf seul ; ta consigne, ta compétence et ce que tu as lu restent
149
+ valables. La dernière tentative, sur le modèle fort, est une séance neuve et entière. Ainsi tu
150
+ repars de ce que tu sais.
151
+ - **Les tests ciblés** : les tests touchés et voisins, plus ceux des composants en aval quand une
152
+ interface change (`npm test -- <fichiers>`).
153
+ - **Une suite se juge sur tous ses échecs** : leur liste se compare nom par nom aux échecs connus.
154
+ Ainsi « vert » veut dire que rien de neuf n'a cassé.
155
+ - **Un écart dit l'état que le lot laisse au commit** : un écart voulu, une référence changée, un
156
+ test mis en quarantaine avec le ticket qui le referme entrent dans `ecarts` de ta fiche, avec leur
157
+ cause ; un test qu'un composant d'après du ticket referme se dit dans ta passation, car la passe
158
+ finale est verte avant le commit. Un sujet qu'une fiche d'avant nomme se reprend tel quel, et ta
159
+ valeur remplace la sienne : le circuit écrit chaque sujet une fois, de la dernière fiche qui le
160
+ porte. Ainsi le message de commit ne se répète ni ne se contredit.
161
+ - **Tu retires ce que tu crées pour mesurer**, chemin par chemin, avant de rendre la main.
162
+ - **Les documents du responsable** : une règle nouvelle pour un document que la charte lui réserve
163
+ s'écrit d'abord dans le ticket (étiquette `attend-responsable`).
164
+ - **Ton lot** : tu ne commites pas. Ton lot est ton travail dans la copie, et ta passation au
165
+ ticket ; le circuit le fait relire, puis le commite. Un lot rendu par le relecteur, avec la règle
166
+ qu'il enfreint, te revient par le circuit, le constat pour rapport : il se corrige et se livre à
167
+ nouveau.
168
+
169
+ ## La fin
170
+
171
+ Ta passation au ticket (`bd comments add`), en mots simples, dit la cause, ce qui est juste et la
172
+ règle citée, le test et sa morsure, les questions ; le ticket reste ouvert jusqu'à l'entrée de sa
173
+ branche sur main. Ta séance finit sur ta fiche. Ainsi tout ce que tu écris a son lecteur : le
174
+ circuit lit ta fiche, l'humain et ta séance suivante ta passation, le registre mesure le temps de
175
+ ta séance.
@@ -0,0 +1,84 @@
1
+ ---
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."
4
+ ---
5
+
6
+ # Explorateur — explorer avant de réaliser
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.
11
+
12
+ ## Au démarrage
13
+
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.
16
+
17
+ ## Ta base de connaissance
18
+
19
+ Tes décisions se fondent sur trois sources, et chaque constat nomme la sienne :
20
+
21
+ - **CodeGraph** (l'outil `codegraph_explore`, ou `codegraph explore <symboles>`) : le code, ses
22
+ appels et ses dépendants.
23
+ - **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.
26
+ - **Les documents d'architecture** : `docs/ARCHITECTURE.md`, `docs/CADRE.md` (Reçoit, Rend,
27
+ Connaît) et `docs/INTERFACE.md` (Consommateurs) de chaque composant.
28
+
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.
36
+
37
+ ## Tes références, à lire au moment où elles servent
38
+
39
+ - `${CLAUDE_PLUGIN_ROOT}/METACADRE.md` — les intentions du cadre : quand une règle semble aller contre son but.
40
+ - `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.
42
+ - `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
56
+ 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.
@@ -0,0 +1,238 @@
1
+ ---
2
+ name: grill
3
+ description: "L'initialisation et l'architecture du projet : initialiser un projet bâti sur le framework Roomi's Grillhouse — préparer le dépôt, mener le grill d'initialisation, puis écrire la charte, l'architecture, le cadre, les interfaces et le lexique, et ouvrir les premiers tickets. À charger au premier lancement d'un projet neuf ou d'un projet existant qui adopte le framework, quand l'ouverture de séance liste des éléments « pas encore renseignés » (critères d'arbitrage, champs de la charte, architecture, cadre, interfaces, lexique), quand le responsable demande d'initialiser ou de redéfinir ces éléments, et pour toute question de structure (découper en paquets ou modules, définir une interface, une frontière, l'architecture)."
4
+ ---
5
+
6
+ # Grill — initialiser le projet et décider de sa structure
7
+
8
+ Le framework fournit les outils et les compétences, et `${CLAUDE_PLUGIN_ROOT}/METACADRE.md` les intentions qu'ils servent ;
9
+ l'initialisation leur donne leur objet. Lis le métacadre avant le premier tour : chaque
10
+ recommandation du grill sert une de ses intentions. L'initialisation produit les éléments clés que
11
+ les compétences `pitmaster` et `developpeur` lisent à chaque séance :
12
+
13
+ | élément | ce qu'il fixe |
14
+ |---|---|
15
+ | `CLAUDE.md` | la charte du projet : le projet, le responsable, ce qui décide, ses critères d'arbitrage, ses commandes ; la charte commune du cadre, qu'elle importe du paquet installé (`@node_modules/@roomi-fields/grillhouse/charte.md`), la complète et ne se modifie pas |
16
+ | `docs/ARCHITECTURE.md` | comment le projet est construit, et pourquoi |
17
+ | `docs/CADRE.md` | le rôle de chaque composant, sa frontière, ce qu'il refuse (R1…) |
18
+ | `docs/INTERFACE.md` | ce qui traverse chaque frontière, et le garde qui le tient |
19
+ | `CONTEXT.md` | le lexique du domaine |
20
+
21
+ Dans un dépôt à plusieurs paquets, le cadre, l'interface et l'architecture de chaque paquet vivent
22
+ sous `packages/<x>/docs/`, et `docs/ARCHITECTURE.md` décrit l'ensemble.
23
+
24
+ ## 0. Tout le projet, ou les seuls éléments vides
25
+
26
+ À chaque ouverture de séance, la liste « Pas encore renseignés » dit ce qui reste vide. Un projet
27
+ neuf passe par toutes les sections ci-dessous. Un projet déjà engagé grille les éléments listés, ou
28
+ celui que le responsable choisit, à n'importe quel moment : le relevé (§3) porte sur ce que
29
+ l'élément touche, le grill (§4) sur ses branches, l'écriture (§5) sur son document. Ainsi chaque
30
+ élément de l'architecture est décidé et écrit avant que le code en ait besoin.
31
+
32
+ **Une proposition à corriger** : chaque question arrive avec sa proposition, tirée du projet et de
33
+ son domaine. Pour les critères d'arbitrage (branche 2), cherche dans le code, les documents, les
34
+ projets voisins et la documentation publique les produits matures qui font le même travail, les
35
+ standards et outils en usage, les exigences mesurables du domaine, et propose-les nommément. Ainsi
36
+ le responsable corrige une proposition et garde son temps pour les vraies décisions.
37
+
38
+ ## 1. Préparer le dépôt
39
+
40
+ Un projet neuf naît de `npx @roomi-fields/grillhouse init <dossier> [préfixe]` : le gabarit, les
41
+ tickets, l'index, les greffons et les crochets. S'il manque ensuite un élément, l'ouverture de séance
42
+ le signale sous « Manque », chacun avec sa commande, sans invite : `npx grillhouse maj` installe pour
43
+ le projet chaque greffon que `.claude/settings.json` déclare (`enabledPlugins`), après son
44
+ marketplace. Le préfixe des tickets vient du nom du projet ; il se confirme au premier tour du grill.
45
+
46
+ ## 2. La règle de l'architecture
47
+
48
+ - **Un petit projet se structure comme un grand** : ses composants, ses frontières et ses
49
+ interfaces se décident sur ses objectifs et sur la construction de son code, comme pour un grand
50
+ projet. Ainsi le projet est propre, pro et mature dès sa première ligne, et le reste en
51
+ grandissant.
52
+ - **Les pièces d'abord** : chaque recommandation s'appuie sur une lecture de la construction du
53
+ code, avec ses fichiers et ses symboles. Ainsi elle repose sur une preuve ; un compte de lignes,
54
+ de fichiers ou d'imports ne fonde aucune recommandation.
55
+ - **Une question reportée nomme son fait** : reporter une question nomme le fait qui la rouvrira et
56
+ ce qu'elle coûtera alors. Ainsi le report est une décision écrite de l'architecture, que le
57
+ responsable peut juger.
58
+ - **Une frontière interne a son interface** : une frontière entre deux modules internes a son
59
+ interface, tenue par le cadre et un test, comme une interface publiée. Ainsi le code suit
60
+ l'architecture à l'intérieur du projet aussi.
61
+ - **Un découpage se justifie par ses pièces** : un rôle, un consommateur (dans le dépôt ou hors de
62
+ lui), une raison de changer, une donnée qui traverse. Une fusion se justifie de même : deux
63
+ parties qui changent toujours ensemble, qu'aucun consommateur ne sépare. Ainsi chaque frontière
64
+ découle de l'architecture.
65
+ - **Les mots de la structure** : tu charges `mattpocock-skills:codebase-design` avant le grill et tu
66
+ emploies ses mots (module, interface, profondeur, jointure). Ainsi le responsable et les agents
67
+ parlent de la structure avec les mêmes mots.
68
+ - **Chaque recommandation cite sa référence mature** : elle dit ce que ferait le produit mature du
69
+ domaine (un compilateur mature, un DAW professionnel, selon le contexte), ce qui existe déjà, et
70
+ ce qu'exige le domaine (la rapidité pour le live coding). Ainsi le responsable arbitre sur pièces,
71
+ sans refaire l'enquête.
72
+
73
+ ### Les façons de penser
74
+
75
+ - **Comme le produit mature** : avant de proposer un découpage, décris ce que ferait, et comment est
76
+ structuré, le produit professionnel et mature qui fait le même travail (pour un transpileur :
77
+ TypeScript ; pour un moteur audio : une station audionumérique professionnelle). Ta proposition
78
+ dit en quoi elle le suit, et pourquoi elle s'en écarte. Ainsi le découpage repart de ce qui a
79
+ fait ses preuves.
80
+ - **Un tout cohérent, une seule API** : un projet qui forme un tout cohérent publie un seul paquet,
81
+ avec une API choisie et maîtrisée par lui. À l'intérieur, ses composants sont des modules, chacun
82
+ avec son interface et ses tests ; un composant se publie à part quand il vit hors du produit.
83
+ Ainsi le découpage interne sert l'architecture, et la publication sert les consommateurs.
84
+ - **L'existant d'abord** : on se base sur l'existant. Les conventions des projets voisins de
85
+ l'auteur (organisation des paquets, numérotation, outils, vocabulaire) se reprennent avant toute
86
+ invention, par exemple des dossiers de paquets numérotés comme dans un projet voisin. Ainsi le produit
87
+ hérite de ce qui marche déjà.
88
+
89
+ ## 3. Relever l'existant
90
+
91
+ **Les faits se cherchent** dans le code et les documents ; seules les décisions se posent au responsable. Ainsi il ne reçoit que des décisions.
92
+
93
+ **Le relevé structurel vient avant le premier tour** : un sous-agent (Explore, « very thorough ») rend le relevé décrit dans `references/releve-structurel.md`, et tu le juges avec `mesure` ; un relevé fait de comptes se refait. Ainsi l'architecture se décide sur une preuve.
94
+
95
+ **Le relevé dit ce qui est** : il décrit la construction réelle, défauts compris ; le grill décide
96
+ ce qui doit être. Ainsi chaque décision part de l'état réel du code.
97
+
98
+ ## 4. Le grill d'initialisation
99
+
100
+ Charge `mattpocock-skills:grilling` et suis-le (s'il n'est pas disponible, suis le même format, et
101
+ signale au responsable que le greffon `mattpocock-skills` manque) : des tours numérotés, chaque
102
+ question avec ta recommandation et ses pièces, la frontière de l'arbre des décisions à chaque tour.
103
+ **Le grill se mène en entier**, par tours, même quand le responsable pose la question en une
104
+ phrase. Ainsi chaque décision de structure passe par l'architecture, et une réponse directe ne
105
+ remplace jamais le grill. Les branches de l'arbre :
106
+
107
+ 1. **Les objectifs** — ce que le projet doit permettre, à qui, à quel horizon ; ce qui doit rester
108
+ vrai dans cinq ans ; ce qu'il ne fait pas (ce que fait un autre système à sa place).
109
+ 2. **Les références et les exigences** — les produits matures qui font référence dans le domaine
110
+ (ce qu'un compilateur mature, une station audionumérique professionnelle… font du même
111
+ problème), les standards et outils existants à reprendre, les exigences propres au domaine
112
+ (temps de réponse, fiabilité en direct, compatibilité). Elles remplissent « Comment on arbitre »
113
+ de la charte et arbitrent toutes les branches suivantes.
114
+ 3. **Le responsable** — son nom, les documents qu'il valide, la politique de poussée.
115
+ 4. **Ce qui décide** — la source d'autorité (une spécification, une cible, un produit de
116
+ référence), puis le cadre, puis le code.
117
+ 5. **Les consommateurs** — qui utilise le projet ou une de ses parties, aujourd'hui et demain
118
+ (un éditeur, un autre dépôt, une ligne de commande) ; chacun dit une frontière.
119
+ 6. **Les représentations** — les données qui traversent la chaîne de traitement : texte, arbre,
120
+ graphe, sortie ; où chacune naît, qui la lit. Chaque étape reçoit une structure ; une étape qui
121
+ ré-analyse du texte signale une frontière manquante.
122
+ 7. **Les axes de changement** — ce qui changera (une syntaxe, une cible, un catalogue, un hôte) ;
123
+ deux axes indépendants vivent dans deux modules.
124
+ 8. **Les composants** — le découpage qui découle des branches 5 à 7, chaque frontière avec ses
125
+ pièces ; pour chacun, les huit rubriques du cadre : rôle, reçoit, rend, connaît, ne connaît pas,
126
+ refuse, invariants, coût. Puis la forme : un paquet ou plusieurs, bibliothèque ou service (un
127
+ service garde `deployment/`, le démon et `.env`), TypeScript ou JavaScript. **Plusieurs paquets,
128
+ une forme publiée** : chaque paquet publie son entrée dans le champ `exports` de son
129
+ `package.json`, construite dans `dist/` ; ses tests et leurs données restent dans le paquet.
130
+ **Les outils du projet, un paquet** : les scripts propres au projet (son typage, ses gardes, ses
131
+ traces) et leurs tests forment un paquet de l'espace de travail, comme `src/tools/` de rustc,
132
+ nommé selon la convention du projet ; il déclare ses commandes dans le champ `bin` de son
133
+ `package.json`, comme npm le prévoit pour un exécutable, et n'exporte aucun module. La racine
134
+ ne porte aucun test, et chaque test passe par `npm test`. Ainsi un outil se teste, se relit et
135
+ s'intègre comme un paquet.
136
+ **Le corpus du produit, un seul paquet** : les cas qui traversent toute la chaîne, et dont toute
137
+ modification d'un paquet peut changer le résultat, vivent dans un seul paquet qui exporte
138
+ `./test-fixtures`, comme `tests/cases` de TypeScript ou `tests/ui` de rustc ; tous les rôles le
139
+ lisent, le testwriter seul l'écrit. Sa configuration de Vitest s'écrit en CommonJS
140
+ (`vitest.config.cjs`, la base du cadre par `await import()`) : Vite écrit un fichier à côté
141
+ d'une configuration ESM pour la charger, et le corpus est en lecture seule chez les autres
142
+ rôles. Ses données (scènes, paires) ne bougent que les tests qui
143
+ les lisent, comme le `data` de Bazel : chaque paquet déclare dans son `package.json`, depuis la
144
+ racine, les chemins (dossiers ou fichiers) que ses tests lisent (`"grillhouse": { "lit": [...] }`),
145
+ données ou code d'un voisin (ses scripts de capture, un fichier de ses sources), comme le `data`
146
+ de Bazel prend tout fichier ; son test les prend en entrée, et la construction du paquet qui
147
+ porte un chemin de données seules le laisse hors des siennes, tandis qu'un chemin qui contient
148
+ du code reste dans la construction de son paquet. Une
149
+ trace qu'un étage produit (des grammaires encodées du corpus), comme une genrule de Bazel, vit
150
+ dans le paquet producteur, dans un dossier que git ignore, et se déclare avec ce qu'elle lit
151
+ (`"traces": { "trace:<nom>": { "lit": [...], "ecrit": "<dossier>" } }`, sa commande le script du
152
+ même nom, qui vide son dossier d'abord) ; un lecteur la déclare dans son `lit`. Ainsi un test
153
+ ne dépend que de son code, de ce qu'il importe et des chemins qu'il déclare. Chaque
154
+ paquet construit porte un script `build` qui écrit son `dist/` ; Turborepo les lance
155
+ (`turbo.json`, tâche `build`) : une construction attend celle de ses seules dépendances
156
+ d'exécution (`dependencies`, `peerDependencies`, `optionalDependencies`), et un test celle de
157
+ son propre paquet, dont il importe l'entrée construite, et de tout ce qu'il importe, la matière de test partagée d'un voisin comprise ; une construction
158
+ inchangée se restaure de son cache. Une construction ne compte que ce qu'elle lit : le
159
+ `package.json`, le `tsconfig.build.json` du paquet, ce qu'il étend et les dossiers qu'il inclut
160
+ (un fichier listé, son dossier) ; un fichier de test changé ne rejoue ni elle ni ses dépendants.
161
+ Le `turbo.json` de la racine est au projet : la mise à jour
162
+ du cadre l'écrit une fois, depuis le gabarit de sa forme (`templates/turbo/paquets.json` quand
163
+ le `package.json` déclare `workspaces`), puis n'y écrit que ce que le cadre en tient (les
164
+ dépendances des gardes, la variable des passes ciblées, l'exclusion `!$TURBO_ROOT$/<chemin>/.git`
165
+ à côté d'une entrée qui couvre un sous-module, dont le `.git` nomme la copie). Celui de chaque paquet est
166
+ généré depuis son `package.json` (`npx grillhouse turbo-des-paquets --ecrire`, que la mise à
167
+ jour lance) et `grillhouse:gardes` refuse un fichier absent ou périmé : une dépendance s'écrit
168
+ au `package.json` seul. Chaque paquet testé porte son script
169
+ `test:vitest` et sa configuration Vitest, qui étend la configuration de base du cadre, le
170
+ `@roomi-fields/grillhouse/vitest-config`, que le paquet du cadre exporte (par `mergeConfig`) : les
171
+ exclusions du jour (tests de nuit, bancs de budget) et l'environnement commun y sont, sans
172
+ copie. Le paquet l'importe par son nom (`import base from '@roomi-fields/grillhouse/vitest-config'`) et le
173
+ déclare (`@roomi-fields/grillhouse`) dans ses `devDependencies`, comme les exemples de
174
+ Turborepo atteignent leurs paquets de configuration ; la mise à jour du cadre écrit la
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
+ espace de travail, qu'un voisin importe par son nom, et Turborepo ne joue aucune de ses tâches :
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
179
+ par une seule route : les sources relatives pour un test unitaire, le nom du paquet pour un test
180
+ de porte. Ainsi un agent enveloppé construit et teste son paquet avec ce que ses voisins
181
+ publient.
182
+ 9. **Les interfaces** — pour chaque frontière : ce qui la traverse, qui offre, qui consomme, qui
183
+ juge quelle faute, et le garde qui la tiendra.
184
+ **Une fois les composants décidés**, la nuit entre dans la table des tâches du poste
185
+ (`crontab -e` : `0 3 * * * bash <racine>/scripts/nuit.sh`) : elle rejoue pour de vrai la passe
186
+ complète, puis les tests de nuit et les bancs de budget, que le jour ne joue pas. Chaque
187
+ intégration joue `npm run verifier` en entier (les gardes et les tests), Turborepo relisant de
188
+ son cache ce qui n'a pas bougé.
189
+ Restent des choix selon la taille du projet, que le responsable tranche :
190
+ - **le contrôle de l'interface contre le code** (`packages/grillhouse/scripts/interfaces-contre-code.mjs`) : une
191
+ seule passe avant les tests (petit projet), ou un banc par composant qui appelle
192
+ `verifierComposant`, rejoué seulement quand son composant l'est (grand projet).
193
+ - **les sous-modules partagés** : un sous-module qu'aucun ticket n'écrit (un moteur de
194
+ référence, une dépendance externe) se déclare partagé, `npm pkg set 'grillhouse.partage[0]=<chemin>'` ;
195
+ chaque copie le lit alors dans le dépôt principal, en lecture seule
196
+ (`packages/grillhouse/scripts/sous-modules.sh`).
197
+ 10. **L'architecture** — les trois ou quatre choix qui commandent le reste, chacun avec sa raison et
198
+ l'objectif qu'il sert ; les données centrales ; où le code tourne.
199
+ 11. **Le lexique** — les mots du domaine dont la définition change du code
200
+ (`mattpocock-skills:domain-modeling`).
201
+ 12. **Le premier chantier** — ce qui se construit d'abord, et ce qui attend.
202
+
203
+ **La fin du grill** : le grill est fini quand la frontière est vide, que chaque composant et chaque
204
+ frontière porte ses pièces, que chaque recommandation cite sa référence mature et repose sur une
205
+ lecture du code, et que le responsable confirme la compréhension partagée. L'écriture commence
206
+ ensuite. Ainsi les documents écrivent des décisions prises.
207
+
208
+ ## 5. Écrire
209
+
210
+ - Les documents lus par un humain s'écrivent avec la compétence `redacteur` (référence
211
+ « Les documents d'un composant ») ; la charte avec `mattpocock-skills:writing-for-agents`.
212
+ - **Les champs de la charte** : chaque champ `<…>` de la charte modèle reçoit sa valeur. Ainsi la
213
+ charte cadre les agents dès la séance suivante.
214
+ - `package.json` (nom, description, auteur, dépôt), `README.md`, `LICENSE`, `CREDITS.md`,
215
+ `CHANGELOG.md` et `CONTRIBUTING.md` prennent l'identité du projet.
216
+ - **Les règles de dépendance propres au projet** (un paquet qui n'importe rien, une couche qui ne
217
+ lit qu'en type) et ses options de la carte (`exclude`, `doNotFollow`…) s'écrivent dans
218
+ `.dependency-cruiser.projet.cjs` ; les règles communes sont générées
219
+ (`npx grillhouse frontieres --ecrire`). Ainsi chaque règle de structure décidée au grill est
220
+ tenue par un test.
221
+ - **Ce que la forme écarte se retire** dans le même commit (les parties de service d'une
222
+ bibliothèque, le code d'exemple du modèle, `src/` et ses tests `tests/unit/config.spec.ts`,
223
+ `errors.spec.ts`, `types.spec.ts` ; les tests du cadre restent à Grillhouse et n'arrivent pas
224
+ dans le projet). Ainsi le dépôt contient seulement ce que
225
+ l'architecture décidée garde.
226
+ - **Le responsable relit ses documents** : chaque document se relit au responsable avant son
227
+ commit, puisqu'il les valide. Ainsi il tranche l'essentiel avant que le code ne s'y appuie.
228
+
229
+ ## 6. Ouvrir le travail
230
+
231
+ - **Les premiers tickets attendent son mot** : une épopée pour le premier chantier ; ses tickets
232
+ s'ouvrent sous l'étiquette `a-valider`, chacun avec les règles et les documents qu'il touche,
233
+ et chaque réalisation avec ses critères d'acceptation numérotés (`docs/agents/issue-tracker.md`).
234
+ Ainsi le premier chantier part avec l'accord du responsable.
235
+ - `pitmaster/SUIVI.md` : le premier tour, les questions restées ouvertes.
236
+ - Un commit `docs: initialiser le projet` qui ne contient que ces éléments.
237
+
238
+ À la fin, l'ouverture de séance ne signale plus rien : la séance suivante charge `pitmaster`.
@@ -0,0 +1,38 @@
1
+ # Le relevé structurel — la consigne du sous-agent
2
+
3
+ À transmettre tel quel au sous-agent Explore (« very thorough »), avec la racine du dépôt.
4
+
5
+ ---
6
+
7
+ Relève la construction de ce dépôt, pour qu'on en décide l'architecture. Tu décris la
8
+ construction ; la recommandation vient au grill. Chaque point se répond par ce que fait le code,
9
+ avec son fichier et son symbole : c'est la seule réponse recevable. Ainsi l'architecture se décide
10
+ sur une preuve, et un compte de lignes, de fichiers ou d'imports ne répond à aucun point.
11
+
12
+ L'index d'abord : `codegraph explore` pour les appels, `rtfm_search` en mode hybrid pour les
13
+ documents. Ainsi le relevé voit les appels indirects qu'une recherche de texte manque.
14
+
15
+ 1. **Les points d'entrée** — ce que le projet exporte, sa ligne de commande, ses scripts ; pour
16
+ chacun, ce qu'il reçoit et ce qu'il rend.
17
+ 2. **La chaîne de traitement** — les étapes, dans l'ordre, de l'entrée à la sortie : qui appelle
18
+ qui, avec quoi.
19
+ 3. **Les représentations** — chaque forme de donnée qui passe d'une étape à l'autre (texte, arbre
20
+ syntaxique, graphe, objets, texte de sortie) : où elle naît, qui la lit, qui la modifie. Signale
21
+ chaque étape qui ré-analyse du texte produit par une autre, chaque sortie assemblée par
22
+ concaténation ou par modèles à trous, chaque structure qui n'existe que dans des chaînes.
23
+ 4. **Les connaissances** — ce que chaque module sait du reste. Nomme chaque couplage : un module
24
+ qui connaît le détail d'un autre (sa syntaxe, ses champs, ses formats).
25
+ 5. **Les consommateurs** — qui utilise une partie du projet, dans le dépôt et hors de lui : cherche
26
+ les autres dépôts du même dossier parent, les documents qui décrivent une intégration, les
27
+ besoins déclarés (éditeur, autre langage, hôte).
28
+ 6. **Les axes de changement** — d'après l'historique (`git log --stat`) et les documents : ce qui a
29
+ changé ensemble, ce qui change seul, ce qui est annoncé.
30
+ 7. **Les générés et les sources** — ce qui est engendré (grammaire, catalogue) et par quoi ; ce qui
31
+ s'écrit à la main.
32
+ 8. **Les tests** — ce que chaque test mesure, et à travers quelle surface. Signale chaque test qui
33
+ ouvre l'intérieur d'un module : l'interface manque là.
34
+ 9. **La référence mature** — comment le produit mature du domaine (nommé, celui de la charte
35
+ d'abord) construit la même chose, et en quoi le dépôt la suit ou s'en écarte.
36
+
37
+ Rends chaque point avec ses pièces (fichier, symbole, extrait court), puis la liste des questions
38
+ que le code ne tranche pas.