Constat (mesuré le 2026-09-24 sur ai-01, dry-run)
python scripts/ci/prune_merged_worktrees.py --json classe REMOVE deux worktrees à HEAD détaché qui ne doivent pas l'être :
| Worktree |
HEAD |
Attribution rendue |
Réalité |
D:/CoursIA-wt-merge-ready |
d0111fbd79 (commit de main, squash de #17637) |
REMOVE — #17637 MERGED |
demeure de la tâche planifiée merge_ready (install_merge_ready_task.py --run --repo D:\CoursIA-wt-merge-ready) ; la retirer casse l'organe |
D:/CoursIA-wt-17632 |
50c4ac75ce (revert, parent = squash de #17029) |
REMOVE — #17029 MERGED |
la PR du worktree, #17632, était OPEN au moment de la mesure |
Cause
lookup_pr_for_detached_head lit git log HEAD --format=%s -n 20. Dès le premier commit partagé avec main, ces sujets sont ceux de main, et la voie 1 (résolution par (#N) final) rend la PR d'un commit ancêtre. Un HEAD détaché posé sur main reçoit ainsi la PR de son propre commit de tête, et une branche détachée à un commit propre reçoit la PR du commit qu'elle a sous elle.
Aucun dégât pour l'instant : la tâche planifiée CoursIA\prune_merged_worktrees échoue à chaque déclenchement (0x80070002, guillemets de /TR). Elle ne doit pas être réparée avant ce correctif, sinon la première passe --apply retire la demeure de merge_ready.
Correctif attendu
- Un HEAD détaché ancêtre de
origin/main n'a aucun commit propre, donc aucune PR attribuable : REFUSE avec la raison nommée detached_on_main.
- La voie de lookup ne lit que les commits propres (
origin/main..HEAD). Si la plage est vide ou si la référence est absente, le résultat est None, donc REFUSE (fail-closed).
Acceptance
Grain: CI prune-worktrees -- lane myia-ai-01:CoursIA
Constat (mesuré le 2026-09-24 sur ai-01, dry-run)
python scripts/ci/prune_merged_worktrees.py --jsonclasse REMOVE deux worktrees à HEAD détaché qui ne doivent pas l'être :D:/CoursIA-wt-merge-readyd0111fbd79(commit demain, squash de #17637)REMOVE — #17637 MERGEDmerge_ready(install_merge_ready_task.py --run --repo D:\CoursIA-wt-merge-ready) ; la retirer casse l'organeD:/CoursIA-wt-1763250c4ac75ce(revert, parent = squash de #17029)REMOVE — #17029 MERGEDCause
lookup_pr_for_detached_headlitgit log HEAD --format=%s -n 20. Dès le premier commit partagé avecmain, ces sujets sont ceux demain, et la voie 1 (résolution par(#N)final) rend la PR d'un commit ancêtre. Un HEAD détaché posé surmainreçoit ainsi la PR de son propre commit de tête, et une branche détachée à un commit propre reçoit la PR du commit qu'elle a sous elle.Aucun dégât pour l'instant : la tâche planifiée
CoursIA\prune_merged_worktreeséchoue à chaque déclenchement (0x80070002, guillemets de/TR). Elle ne doit pas être réparée avant ce correctif, sinon la première passe--applyretire la demeure demerge_ready.Correctif attendu
origin/mainn'a aucun commit propre, donc aucune PR attribuable :REFUSEavec la raison nomméedetached_on_main.origin/main..HEAD). Si la plage est vide ou si la référence est absente, le résultat estNone, doncREFUSE(fail-closed).Acceptance
detached_on_mainrefusé sans aucun lookup, lookup appelé sur la plageorigin/main..HEAD, plage vide →Nonesans appelgh.REMOVE.Grain: CI prune-worktrees -- lane myia-ai-01:CoursIA