@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.
- package/.claude-plugin/plugin.json +9 -0
- package/METACADRE.md +41 -0
- package/agents/developpeur.md +10 -0
- package/agents/explorateur.md +9 -0
- package/agents/questionneur.md +11 -0
- package/agents/referent-technique.md +9 -0
- package/agents/regulateur.md +11 -0
- package/agents/relecteur.md +9 -0
- package/agents/testwriter.md +10 -0
- package/bin/grillhouse.mjs +125 -0
- package/cadre/templates/projet/.claude/settings.json +30 -0
- package/cadre/templates/projet/.editorconfig +47 -0
- package/cadre/templates/projet/.env.example +57 -0
- package/cadre/templates/projet/.eslintrc.cjs +56 -0
- package/cadre/templates/projet/.github/workflows/ci.yml +66 -0
- package/cadre/templates/projet/.mcp.json +13 -0
- package/cadre/templates/projet/.prettierrc +11 -0
- package/cadre/templates/projet/CHANGELOG.md +61 -0
- package/cadre/templates/projet/CLAUDE.md +46 -0
- package/cadre/templates/projet/CONTRIBUTING.md +243 -0
- package/cadre/templates/projet/CREDITS.md +41 -0
- package/cadre/templates/projet/README.md +152 -0
- package/cadre/templates/projet/_gitignore +91 -0
- package/cadre/templates/projet/_npmignore +46 -0
- package/cadre/templates/projet/deployment/README.md +98 -0
- package/cadre/templates/projet/deployment/docs/01-INSTALL.md +145 -0
- package/cadre/templates/projet/deployment/docs/02-CONFIGURATION.md +117 -0
- package/cadre/templates/projet/deployment/docs/03-API.md +264 -0
- package/cadre/templates/projet/deployment/docs/04-TROUBLESHOOTING.md +262 -0
- package/cadre/templates/projet/deployment/scripts/install.ps1 +100 -0
- package/cadre/templates/projet/deployment/scripts/start.ps1 +61 -0
- package/cadre/templates/projet/deployment/scripts/stop.ps1 +37 -0
- package/cadre/templates/projet/deployment/scripts/test.ps1 +118 -0
- package/cadre/templates/projet/docs/agents/issue-tracker.md +44 -0
- package/cadre/templates/projet/ecosystem.config.cjs +73 -0
- package/cadre/templates/projet/package.json +90 -0
- package/cadre/templates/projet/pitmaster/SUIVI.md +22 -0
- package/cadre/templates/projet/src/config.ts +68 -0
- package/cadre/templates/projet/src/errors.ts +102 -0
- package/cadre/templates/projet/src/index.ts +46 -0
- package/cadre/templates/projet/src/services/.gitkeep +8 -0
- package/cadre/templates/projet/src/types/index.ts +24 -0
- package/cadre/templates/projet/src/utils/logger.ts +106 -0
- package/cadre/templates/projet/tests/integration/.gitkeep +7 -0
- package/cadre/templates/projet/tests/unit/config.spec.ts +68 -0
- package/cadre/templates/projet/tests/unit/errors.spec.ts +132 -0
- package/cadre/templates/projet/tests/unit/types.spec.ts +73 -0
- package/cadre/templates/projet/tsconfig.eslint.json +9 -0
- package/cadre/templates/projet/tsconfig.json +41 -0
- package/cadre/templates/projet/tsdoc.json +6 -0
- package/cadre/templates/projet/vitest.config.ts +44 -0
- package/cadre/templates/turbo/paquets.json +29 -0
- package/cadre/templates/turbo/sans-paquets.json +28 -0
- package/charte.md +107 -0
- package/docs/ARCHITECTURE.md +90 -0
- package/hooks/crochet.mjs +33 -0
- package/hooks/hooks.json +58 -0
- package/hooks/register.tsx +558 -0
- package/package.json +75 -4
- package/scripts/avancement.mjs +244 -0
- package/scripts/bilan.mjs +523 -0
- package/scripts/branche-de-nuit.mjs +59 -0
- package/scripts/cadre.mjs +109 -0
- package/scripts/circuit.mjs +4375 -0
- package/scripts/code-mort.mjs +371 -0
- package/scripts/composants-affectes.mjs +598 -0
- package/scripts/consommateurs-arbitres.mjs +192 -0
- package/scripts/consommateurs.mjs +310 -0
- package/scripts/crochet.mjs +24 -0
- package/scripts/crochets.mjs +135 -0
- package/scripts/dernier-vert.mjs +208 -0
- package/scripts/dette.mjs +181 -0
- package/scripts/droits.mjs +354 -0
- package/scripts/enveloppe/codes.mjs +17 -0
- package/scripts/enveloppe/composant.mjs +11 -0
- package/scripts/enveloppe/enveloppe.mjs +628 -0
- package/scripts/enveloppe/lancer.sh +311 -0
- package/scripts/etapes.mjs +323 -0
- package/scripts/etat-du-circuit.mjs +104 -0
- package/scripts/frontieres.mjs +456 -0
- package/scripts/gardes-du-cadre.mjs +72 -0
- package/scripts/greffons.mjs +338 -0
- package/scripts/grillhouse-maj.mjs +514 -0
- package/scripts/index-interfaces.mjs +293 -0
- package/scripts/init.mjs +117 -0
- package/scripts/integration/file-attente.mjs +61 -0
- package/scripts/integration/file.mjs +494 -0
- package/scripts/integration/integrer.mjs +381 -0
- package/scripts/integration/rejeu.mjs +139 -0
- package/scripts/integration/verdict.mjs +13 -0
- package/scripts/interfaces-contre-code.mjs +547 -0
- package/scripts/ligne-etat/defaut.sh +110 -0
- package/scripts/ligne-etat/ligne-etat.mjs +93 -0
- package/scripts/migrations/0.23.0-charte-importee.mjs +47 -0
- package/scripts/migrations/0.23.0-config-vitest.mjs +105 -0
- package/scripts/migrations/0.23.0-crochets-de-seance.mjs +55 -0
- package/scripts/migrations/0.23.0-marche-du-projet.mjs +82 -0
- package/scripts/migrations.mjs +43 -0
- package/scripts/nuit.sh +269 -0
- package/scripts/paquets.mjs +79 -0
- package/scripts/poussee-cles.mjs +46 -0
- package/scripts/preparation.mjs +84 -0
- package/scripts/references-par-les-types.mjs +420 -0
- package/scripts/registre.mjs +336 -0
- package/scripts/resultats.mjs +580 -0
- package/scripts/resumes.mjs +57 -0
- package/scripts/retirer-copie.sh +127 -0
- package/scripts/session-start.sh +203 -0
- package/scripts/sortie.mjs +155 -0
- package/scripts/sous-modules.sh +316 -0
- package/scripts/structure-guard.sh +27 -0
- package/scripts/superviseur.mjs +102 -0
- package/scripts/tableau.mjs +1886 -0
- package/scripts/tests.mjs +236 -0
- package/scripts/ticket.sh +23 -0
- package/scripts/turbo-des-paquets.mjs +899 -0
- package/scripts/un-commit-par-ticket.mjs +212 -0
- package/scripts/verifier.mjs +469 -0
- package/scripts/verrou-de-fichier.mjs +130 -0
- package/scripts/verrou-de-machine.mjs +211 -0
- package/scripts/verrous/commande.mjs +180 -0
- package/scripts/verrous/ticket-du-sous-agent.mjs +39 -0
- package/scripts/verrous/verrou.mjs +165 -0
- package/scripts/vitest-config/avancement.mjs +39 -0
- package/scripts/vitest-config/avancement.reporter.mjs +56 -0
- package/scripts/vitest-config/base-de-passe.mjs +128 -0
- package/scripts/vitest-config/base.d.ts +6 -0
- package/scripts/vitest-config/base.mjs +87 -0
- package/scripts/vitest-config/changements.mjs +173 -0
- package/scripts/vitest-config/cibles.mjs +207 -0
- package/scripts/vitest-config/duree.reporter.mjs +98 -0
- package/scripts/vitest-config/machine.setup.mjs +14 -0
- package/scripts/vitest-config/mesure.d.ts +6 -0
- package/scripts/vitest-config/mesure.mjs +13 -0
- package/scripts/vitest-config/mesure.setup.mjs +12 -0
- package/scripts/vitest-config/pression.mjs +90 -0
- package/scripts/vitest-config/resultats.mjs +23 -0
- package/scripts/vitest-config/resultats.setup.mjs +19 -0
- package/scripts/vitest.nuit.config.mjs +26 -0
- package/skills/developpeur/SKILL.md +175 -0
- package/skills/explorateur/SKILL.md +84 -0
- package/skills/grill/SKILL.md +238 -0
- package/skills/grill/references/releve-structurel.md +38 -0
- package/skills/mesure/SKILL.md +168 -0
- package/skills/pitmaster/SKILL.md +382 -0
- package/skills/pitmaster/references/cadre.md +119 -0
- package/skills/pitmaster/references/consigne-agent.md +308 -0
- package/skills/pitmaster/references/erreurs.md +25 -0
- package/skills/pitmaster/references/tour.md +124 -0
- package/skills/questionneur/SKILL.md +64 -0
- package/skills/redacteur/SKILL.md +84 -0
- package/skills/redacteur/references/documents-d-un-composant.md +105 -0
- package/skills/referent-technique/SKILL.md +145 -0
- package/skills/regulateur/SKILL.md +220 -0
- package/skills/release/SKILL.md +134 -0
- package/skills/release/scripts/update-version.cjs +92 -0
- package/skills/relecteur/SKILL.md +152 -0
- package/skills/relecteur/references/LICENSE-MIT +30 -0
- package/skills/relecteur/references/SOURCE.md +8 -0
- package/skills/relecteur/references/claims-check.md +14 -0
- package/skills/relecteur/references/deletion-check.md +14 -0
- package/skills/relecteur/references/edge-case-hunter.md +80 -0
- package/skills/relecteur/references/verification-gap.md +113 -0
- package/skills/testwriter/SKILL.md +187 -0
- package/types/index.d.ts +56 -0
- 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.
|