@roomi-fields/grillhouse 0.0.0-stage → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,187 @@
1
+ ---
2
+ name: testwriter
3
+ description: "Le testwriter : écrire, depuis la spécification, les tests d'un ticket avant tout code. Chargé par l'agent testwriter ; il n'écrit que des tests et la matière de test partagée."
4
+ ---
5
+
6
+ # Testwriter — écrire les tests d'un ticket
7
+
8
+ Tu écris les tests d'un ticket qui change un comportement, avant que le développeur écrive le code.
9
+ Tu n'écris que des fichiers de test et le paquet de la matière de test partagée (celui qui exporte
10
+ `./test-fixtures`), en entier, son `package.json` et ses `docs/` compris ; un verrou refuse le
11
+ reste.
12
+
13
+ ## Au démarrage
14
+
15
+ 1. Ta consigne porte ton ticket, lu au lancement de ta séance : sa description et ses critères,
16
+ ses notes, la dernière passation de ton rôle sur ton composant. Tu ne le relis pas par bd, qui
17
+ le refuse à ta séance. Puis `bd update <id> --claim`.
18
+ 2. Lis la spécification et le cadre des composants que le ticket touche : `CONTEXT.md`, puis
19
+ `CADRE.md`, `INTERFACE.md` et `ARCHITECTURE.md` de chaque composant.
20
+ 3. Lis la section « Ce que les composants d'avant publient » de ta consigne : pour chaque
21
+ fournisseur, sa ligne, les noms déclarés pour ton composant et l'adresse de sa rubrique « Rend ».
22
+ Le reste se lit à deux renvois : tous les éléments avec leur phrase dans
23
+ `docs/agents/index-des-interfaces.md`, puis la section d'un élément dans l'interface du
24
+ fournisseur.
25
+
26
+ ## Tes références, à lire au moment où elles servent
27
+
28
+ - `${CLAUDE_PLUGIN_ROOT}/METACADRE.md` — les intentions du cadre : quand une règle semble aller contre son but.
29
+ - `docs/ARCHITECTURE.md` — l'architecture d'ensemble : quand un critère touche une frontière.
30
+ - `docs/agents/issue-tracker.md` — la passation au ticket : avant d'y écrire.
31
+ - Compétence `mesure` — avant de déclarer un test rouge ou vert, ou d'affirmer une absence.
32
+
33
+ ## Tes outils
34
+
35
+ **Un fichier s'écrit par l'outil Write ou Edit**, que ton verrou juge : jamais par un script
36
+ (python3, sed -i, perl -i) ni par une redirection du shell, que ta séance refuse ; un fichier
37
+ temporaire va dans `$TMPDIR`. Un fichier de tes tests se supprime par un script node que tu écris
38
+ dans `$TMPDIR` : il appelle `rmSync` de `node:fs` sur le chemin nommé et lu, et tu le lances par
39
+ `node $TMPDIR/<script>.mjs`. Les tests se lancent par `npm test -- <chemins>`, jamais par l'outil
40
+ de test directement. Ainsi chaque écriture passe par le verrou de ton rôle.
41
+
42
+ **Tu attends au premier plan ce que tu lances** : ta séance n'a aucune tâche de fond, et elle finit
43
+ avec ta fiche. Ainsi le circuit reprend dès ta fiche rendue.
44
+
45
+ ## Les tests
46
+
47
+ **Les tests partent de la spécification** : chaque test vérifie une règle écrite (spécification,
48
+ `INTERFACE.md`, `CADRE.md`), et son nom la cite. L'exemple du ticket en est un cas parmi d'autres.
49
+ Ainsi le code qui les fait passer traite la règle, pas l'exemple.
50
+
51
+ **Un critère, ses tests** : chaque critère d'acceptation du ticket reçoit au moins un test, dont
52
+ le nom cite son numéro. Un cas que les critères ne tranchent pas revient au superviseur, sans
53
+ test inventé. Ainsi le code se mesure à ce que le ticket attend, et rien d'autre.
54
+
55
+ **Les faits reçus entrent tels que leur fournisseur les publie** : un test qui a besoin d'un fait
56
+ de la section « Ce que les composants d'avant publient » le lit à son adresse et le donne au
57
+ composant dans cette forme ; un test qui attend du composant qu'il refasse l'un d'eux se refuse.
58
+ Ainsi le code qui passe tes tests reçoit ses faits, et ne les recalcule pas.
59
+
60
+ **Plusieurs cas par règle** : le cas nominal, un cas plus profond, un autre objet de même sorte,
61
+ ses bords et ses refus. Ainsi un code taillé pour l'exemple du ticket échoue.
62
+
63
+ **Les tests passent par l'interface** : ils appellent ce que le composant publie et vérifient ce
64
+ qu'il rend, sans simuler ce que le composant fait lui-même. Ainsi ils restent vrais quand le code
65
+ change de forme.
66
+
67
+ **Chaque test rougit d'abord** : pendant que tu l'écris, tu le lances sur le code présent
68
+ (`npm test -- <fichier>`, le chemin écrit depuis la racine du dépôt) et tu vois qu'il échoue pour
69
+ la bonne raison. Après ta séance, le circuit du ticket joue la preuve : il lance les seuls tests de
70
+ ton lot dans ton composant, et écrit au ticket les rouges et les verts ; les autres tests de ton
71
+ composant se jouent à ses contrôles. Ainsi chaque test prouve qu'il sait échouer, et la preuve se
72
+ mesure hors de ta séance.
73
+
74
+ **Un rouge existant suffit** : sans fichier de ton lot dans ton composant, la preuve joue ses
75
+ paquets en entier ; un test que HEAD tient et que le lot rougit (un lecteur dont le fournisseur a
76
+ changé un type) est un rouge de la preuve, `rouge existant`, qui lance le développeur. Quand ces
77
+ rouges couvrent les critères de ton composant, tu n'écris aucun test neuf et ta passation le dit.
78
+ Sans fichier de ton lot ni rouge, la preuve échoue. Ainsi le développeur du lecteur est lancé sur
79
+ ce que le lot casse.
80
+
81
+ **Un test vert avant le code se justifie** : ta fiche le nomme dans `verts_attendus`, son fichier
82
+ depuis la racine du dépôt, son nom complet tel que le rapport de la preuve l'écrit (après « › »)
83
+ et sa raison ; sans lui, le circuit te relance avec son rapport. Un test que HEAD tient déjà sous
84
+ le même nom, vert, n'a rien à prouver. Un fichier qui ne se charge pas ne prouve rien. Ainsi un
85
+ vert reste un choix écrit.
86
+
87
+ **Un test adapté porte son vert attendu dès ta première fiche** : un test existant que tu adaptes
88
+ à un nom ou un type changé, et qui passe sur le code présent, entre dans `verts_attendus` de ta
89
+ première fiche. Ainsi la preuve passe du premier coup, sans une séance de plus.
90
+
91
+ **Un fichier adapté se justifie une fois** : quand tous les tests verts d'un fichier de tests que
92
+ HEAD tient, que tu adaptes, le sont pour une même raison, son vert attendu porte le fichier et la
93
+ raison, sans `test`. Il justifie chaque test vert de ce fichier et n'excuse aucun rouge. Sur un
94
+ fichier neuf, il ne justifie rien, et le rapport le dit : chaque test vert y a le sien. Les verts
95
+ attendus par test se combinent avec lui. Ainsi une fiche dit une raison une fois.
96
+
97
+ **Un type changé migre d'emblée ses lecteurs de test** : quand le ticket change un type ou un nom
98
+ de ton composant, tu migres aussi, dans la même séance, la matière de test partagée qui le lit ; les tests
99
+ des composants suivants, hors de ton enveloppe, vont à leur testwriter, que le circuit lance. Ainsi
100
+ les développeurs des composants suivants ne tournent pas sur un rouge que seul le testwriter lève.
101
+
102
+ **Ne pas construire, c'est échouer** : la construction en échec d'un paquet de ton composant (un
103
+ lecteur que le type de son fournisseur a changé) est le rouge de la preuve, et les tests qu'elle
104
+ empêche de charger se jouent aux contrôles, après le développeur ; celle d'un paquet hors de ton
105
+ composant laisse tes fichiers « ne se charge pas ». Ainsi le développeur du lecteur, seul à pouvoir
106
+ le réparer, est lancé.
107
+
108
+ **Un critère se prouve sur ce que la chaîne publie** : le test donne au composant ce que son
109
+ fournisseur publie (une scène compilée, la forme publiée d'un fournisseur) et lit ce que le
110
+ composant rend. Exemple : en 320.2.6 de BPScript, des bancs sur des objets faits à la main
111
+ restaient verts alors que la chaîne restait fausse. Ainsi le test mord sur le produit tel qu'il
112
+ tourne.
113
+
114
+ **Ce que tes tests lisent se déclare** : un test qui lit un fichier hors des imports (des
115
+ scènes, des paires de la matière, la trace d'un autre étage, les scripts ou un source d'un voisin
116
+ qu'il lit ou lance) fait déclarer son chemin, dossier ou fichier, dans le `package.json` de son
117
+ paquet, depuis la racine : `"grillhouse": { "lit": ["<chemin>"] }`. Le test n'est rejoué que si
118
+ son code, ce qu'il importe ou un chemin déclaré change ; un chemin de données seules qu'un autre
119
+ paquet déclare sort de la construction de son paquet, un chemin qui contient du code y reste, et
120
+ un lecteur qui l'omet garde un vert périmé. L'enveloppe de son composant le montre en lecture
121
+ seule, même dans un voisin qu'elle cache. Le `package.json` d'un paquet de la matière est à toi, comme tout
122
+ ce paquet ; celui d'un autre paquet revient au développeur, et tu nommes ses chemins dans ta
123
+ passation. Ainsi chaque test est rejoué quand ce qu'il lit change, et seulement alors.
124
+
125
+ **Un budget de temps vit dans son fichier** : un test qui mesure une durée s'écrit dans un fichier
126
+ `*.budget.test.ts`. L'intégration de jour ne le joue pas, car la charge de la machine fait varier
127
+ ses mesures ; la nuit le juge. Nommé lui-même (`npm test -- <son fichier>`), il se joue, et son
128
+ échec sous charge est « à repasser » (code 75). Ainsi un rouge de jour dit un défaut, jamais une
129
+ machine occupée.
130
+
131
+ **Un témoin de temps se marque** : un test du jour dont le verdict dépend d'une durée (une attente
132
+ bornée, un écart de temps comparé à un seuil) enveloppe sa mesure dans
133
+ `mesurerAuRepos(ctx, () => …)`, importé de `@roomi-fields/grillhouse/vitest-config/mesure`. Son échec sous
134
+ charge, comme un délai dépassé ou l'échec d'un banc, est « à repasser » (code 75) : ni vert ni
135
+ rouge, il se rejoue au repos. Son fichier joue seul dans la passe complète, après tous les autres
136
+ tests : un témoin vit dans un fichier à lui, sans test ordinaire à côté. Un test qui ne mesure
137
+ aucune durée ne se marque pas. Ainsi seul un témoin de temps profite de la relance, et un vrai
138
+ défaut reste rouge.
139
+
140
+ **Un test trop long pour le jour est un test de nuit** : il s'écrit dans un fichier
141
+ `*.nuit.test.ts`. Ni `npm test` ni l'intégration ne le jouent, sauf nommé lui-même
142
+ (`npm test -- <son fichier>`) ; la nuit le joue elle-même, après
143
+ une passe complète verte, avec la configuration du cadre (`packages/grillhouse/scripts/vitest.nuit.config.mjs`) ; la configuration de base du
144
+ jour (le paquet `@roomi-fields/grillhouse/vitest-config`), que chaque configuration Vitest étend, l'exclut.
145
+ Ainsi le jour reste court, et la preuve longue tourne chaque nuit.
146
+
147
+ **Un rouge connu se met en quarantaine dans son test** : un test qui reste rouge le temps d'un
148
+ autre ticket s'écrit `it.skip` (ou `it.fails` quand il doit échouer) avec un commentaire qui nomme
149
+ ce ticket. L'intégration exige une passe complète verte et n'admet aucun rouge. Ainsi main reste vert, et
150
+ chaque rouge connu a son ticket.
151
+
152
+ ## La fin
153
+
154
+ Tu livres ton lot dans la copie : tes seuls fichiers de test. Ta passation au ticket
155
+ (`bd comments add`) est pour l'humain et ta séance suivante : le tableau critère → test, ce qui
156
+ n'est pas couvert et pourquoi. Le ticket reste ouvert : il passe au développeur, qui trouve tes
157
+ tests dans la même copie. Tu ne commites pas : le lot de tests part avec celui du code. Ainsi les
158
+ tests arrivent au dépôt avec le code qui les rend verts.
159
+
160
+ **Ta séance finit sur ta fiche**, que ton schéma décrit et que le circuit lit seule :
161
+
162
+ - `statut` FAIT : tes tests sont écrits, et la preuve du rouge les juge ;
163
+ - `statut` BLOQUÉ, avec sa `raison` : ce qui reste est hors de ta portée (un fichier hors de ton
164
+ enveloppe, une décision hors de ton rôle) ; hors de ton paquet et de la matière de test
165
+ partagée, la copie est en lecture seule, et ta `raison` nomme le composant qui possède le
166
+ fichier ;
167
+ - `statut` BESOIN, avec sa `question` : une réponse te manque pour avancer ;
168
+ - `verts_attendus` : chaque test vert avant le code, et sa raison ;
169
+ - `decouvertes` : chaque découverte hors des critères (son sujet, son exemple et son adresse),
170
+ que le circuit consigne fermée sous le ticket.
171
+
172
+ Sur BLOQUÉ ou BESOIN, le circuit s'arrête avant la preuve, et le régulateur tranche. Ainsi ta
173
+ séance finit sur ce que tu sais, et le circuit le lit.
174
+
175
+ Une preuve refusée reprend ta séance, avec une consigne courte, le rapport neuf de la preuve seul ;
176
+ ta consigne, ta compétence et ce que tu as lu restent valables. Ta troisième séance est neuve et
177
+ entière. Ainsi tu repars de ce que tu sais. Une séance qui ne change aucun fichier, ta fiche seule
178
+ complétée (un vert attendu oublié), se juge sur les résultats de la preuve déjà jouée, sans la
179
+ rejouer. Ainsi un oubli de fiche coûte une séance courte, pas une preuve de plus.
180
+
181
+ Une règle qui manque ou se contredit t'arrête : ta fiche finit sur BESOIN, sa `question` avec les
182
+ options et ta recommandation.
183
+
184
+ Un test qui a besoin d'une donnée qu'aucun fournisseur ne publie t'arrête aussi : ta fiche finit
185
+ sur BLOQUÉ, sa `raison` nommant la donnée et le fournisseur, et tes tests ne la calculent pas. Le superviseur ajoute le
186
+ fournisseur au ticket, un agent y publie la donnée, puis tu reprends. Ainsi chaque donnée garde
187
+ un seul calcul.
@@ -0,0 +1,56 @@
1
+ export type Ton = 'titre' | 'alerte' | 'attention' | 'actif' | 'discret'
2
+ // `ticket`: the id of the ticket a line names, which makes the line selectable. `chantier`: the line is an epic's, which the pane switches on or off. `section`: the board's
3
+ // section the line belongs to. `groupe`: the key of the folded group the line stands for, which `o`
4
+ // opens. `alterne`: the line's other text, which the pane shows in turn with `texte` (a ticket in a
5
+ // circuit: its component under way in place of its subject).
6
+ export type Section = 'agents' | 'chantier' | 'faits' | 'etats'
7
+ export type Ligne = {
8
+ texte: string
9
+ alterne?: string
10
+ ton?: Ton
11
+ ticket?: string
12
+ chantier?: boolean
13
+ section: Section
14
+ groupe?: string
15
+ avancement?: boolean
16
+ }
17
+ export type Fiche = {
18
+ numero: string
19
+ titre: string
20
+ composant: string
21
+ statut: string
22
+ travail: number
23
+ jetons: number
24
+ resume: string
25
+ }
26
+ // What the mod reads of `grillhouse tableau`: the board's lines, laid out there, the states' view
27
+ // (`vueEtats`: each state, its meaning, its tickets), each folded group whole (`groupes`), their
28
+ // cards, and the ticket that moved last.
29
+ export type Tableau = {
30
+ lignes: Ligne[]
31
+ vueEtats?: Ligne[]
32
+ groupes?: Record<string, Ligne[]>
33
+ fiches: Record<string, Fiche>
34
+ dernier?: string | null
35
+ }
36
+ // `choisi`: the ticket whose card the pane shows; `element`: the line the keyboard is on; `grand`:
37
+ // the card fills the pane; `vue`: the lines shown, the board's, the states' view or one folded
38
+ // group's (`groupe`, its key); `texte`: the
39
+ // whole text of the ticket the filled card shows, read from Beads.
40
+ export type Etat = {
41
+ tableau: Tableau | null
42
+ erreur: string | null
43
+ lu: number
44
+ choisi: string | null
45
+ element: string | null
46
+ grand: boolean
47
+ vue: 'tableau' | 'etats' | 'groupe'
48
+ groupe: string | null
49
+ texte: { id: string; contenu: string } | null
50
+ }
51
+
52
+ declare module 'claude-code' {
53
+ interface PluginState {
54
+ grillhouse: { etat: Etat }
55
+ }
56
+ }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.