Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .claude/skills/adjoint-secretary/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,16 @@ La doctrine du 22/09 en avait tiré une hiérarchie qui plaçait les DMs au coor

Un cycle est utile si des PRs sortent de la file grâce à lui : READY remis à ai-01 en liste nominative, puis lus et mergés, BLOCKED qui disent à la lane porteuse quoi réparer. La mesure se lit au cycle suivant : combien des dossiers émis ont été mergés, combien le gate a refusés après le post, et pourquoi. Un dossier refusé après le post (tête ou surfaces bougées, dossier qui n'était pas le dernier commentaire) est le vrai gaspillage : il a coûté le crible sans rien livrer.

### Tells de mesure (22/10, cycle 33)

Trois pièges de mesure rencontrés le 22/10, qui coûtent un cycle chacun quand on les ignore.

1. **Un `PR gate` rouge peut venir d'un *timeout* d'un job enfant, pas du contenu.** La sortie du gate le nomme : `checks that hit their declared timeout-minutes: <job> (cancelled, 30m40s, declared timeout-minutes: 30)`. Le geste est de rejouer le run **enfant** — celui qui porte le job — `gh run rerun <run_enfant> --job <job_id>` — et **jamais** le gate (#15905 : *rerun the CHILD run that owns the job, never the gate*) : rejouer le gate relit le même check-run figé. Le job repart en `attempt=2` sous un **nouvel** `job.id` ; l'ancien reste figé sur l'annulation, ne pas le consulter pour l'état. Une fois le job enfant vert, il faut rejouer le gate pour qu'il relise le check-run. Aucun commit, aucune mutation de la PR — le rerun est dans le périmètre du secrétaire.
2. **Le diff propre d'une PR se mesure de chaque côté, jamais par un diff d'arbres bruts.** `git diff <commit_ancien> <commit_tete>` entre deux commits de **lignées différentes** mélange l'évolution de `main` : sur #21664, il faisait apparaître le renommage de lane `po-2026`→`po-2028` atterri sur `main` entre les deux, qui ne fait pas partie de la PR. Mesurer chaque côté depuis son propre merge-base — `git diff $(git merge-base origin/main <sha>) <sha>` — puis soustraire. C'est ce qui permet de dire si une approbation couvre encore la tête.
3. **L'organe B.0 lit le *glyphe*, pas le verdict.** Une review `COMMENTED` dont le corps contient `🟡` ou `🔴` est classée `[BOT-CONCERN]` même si son verdict est `LGTM` et si son auteur écrit « notes non bloquantes ». Mesure du 22/10 : sur 200 PRs ouvertes scannées, 42 portent une review `clusterManager-Myia` à marqueur ; sur 11 PRs à verdict `LGTM`, 5 sont bloquées (#21630, #22074, #22046, #21960, #21985). **La levée n'appartient qu'à l'auteur de la réserve ou à ai-01** : une lane ne la lève pas (`can_lift` refuse qu'une autre lane lève une réserve d'autrui), et le login partagé `jsboige` rend une levée de lane indiscernable d'une auto-levee. Le geste utile n'est donc pas de réparer, mais d'**alerter le porteur** (motif exact, « ne le lève pas vous-même ») et d'**escalader à ai-01** — qui est le seul à tenir ce levier.

Corollaires d'outillage, mesurés le même jour : `gh api search/issues -f "q=..."` implique un **POST** (les compteurs reviennent `None`) — il faut `-X GET` ; une requête GraphQL qui déclare une variable inutilisée est refusée (`variableNotUsed`) ; une pagination `orderBy: {UPDATED_AT, DESC}` renvoie des **doublons** entre les pages, à dédupliquer par numéro avant de compter.

## Émission de dossiers — garde-fous obligatoires

Référence complète : [coordinate-adjoint §Émission de dossiers](../coordinate-adjoint/SKILL.md). Les non-négociables :
Expand Down
Loading