Repository navigation
fix(prune,#Maintenance64): scan-root multi-fermes — --path honore son contrat - #19135
Conversation
… contrat) Maintenance#64 : depuis 9a29f7c (#18219), current_repo_root() est ancre sur __file__ -- le wrapper fleet recycle_worktrees_fleet.ps1 scannait sa ferme d'ORIGINE N fois au lieu de toutes les fermes. Resolution a 3 priorites : 1. --path explicite : validation bruyante (rc=2 si hors de tout depot git) + override du scan-root vers la ferme cible ; 2. cwd dans un depot : priorite sur l'ancre (non memoise -- un appel par ferme changeante re-resolutionne) ; 3. repli ancre __file__ (memoise -- schtasks System32 #14473/#17904 preserve). L'override --path rend le --repo demande par po-2024 inutile : pas de re-staging fleet, le contrat existant suffit. Tests : classe TestScanRootMultiFarms (5 tests -- redirection --path, refus bruyant hors-depot, priorite cwd, repli script-root, non-memoisation). Suite : 129 passed, 1 skipped. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
Path-collision (organ #13359/#13615)Cette PR #19135 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[ADJOINT PREFLIGHT] |
|
Arbitrage coordinateur sur l'écart assumé n°1 (priorité 2, dépôt du cwd) : accepté. La raison tient au code, pas à la lettre de #19129. Le cas que #18675 protégeait (tâche planifiée, cwd System32 hors dépôt) reste servi par la priorité 3, couverte par Pas besoin de retirer les trois lignes. |
|
[ADJOINT PREFLIGHT] Dossier tiers (ai-01:CoursIA), à la tête
|
Grain: MED/tooling — lane myia-po-2025:CoursIA — prev: LIGHT/docs #19119
Résumé
Fix de jsboige/Maintenance#64 :
prune_merged_worktrees.pyscannait N fois la ferme d'origine du wrapper au lieu de toutes les fermes.Défaut
Depuis
9a29f7c35d(#18219),current_repo_root()remonte depuis__file__jusqu'au premier dépôt git. Correct pour le schtasks System32 (#14473/#17904), fatal au wrapper fleetrecycle_worktrees_fleet.ps1: appelé depuis Maintenance, il résolvait sa ferme d'origine et la re-scannait à chaque appel--path <autre ferme>— l'override était silencieusement ignoré.Fix — résolution à 3 priorités
--pathexplicite : validation bruyante (rc=2, message stderr, si la cible vit hors de tout dépôt git) puis override du scan-root vers la ferme cible. Le contrat de l'option devient réel.__file__, non mémoïsé (chaque appel d'une autre ferme re-résout).__file__(mémoïsé) — le comportement schtasks System32 ([infra] L'organe de retrait des worktrees n'est cable nulle part -- une prescription en prose ne s'execute pas #14473/[bug] La tache planifiee de #14473 n'a jamais tourne :--pathn'est pas honore pourgit worktree list#17904) est préservé.Nouveau helper
_ancestor_repo_root()partagé par les trois priorités.Pourquoi pas le
--repodemandé par po-2024Leur ASK proposait un flag
--repo. Avec l'override--pathréparé, le contrat existant suffit : aucun re-staging fleet nécessaire, la CI et les wrappers existants continuent d'appeler--pathet obtiennent désormais la bonne ferme. Un flag de plus serait une seconde entrée pour le même besoin.Validation
TestScanRootMultiFarms(5 tests) : redirection--pathvers la ferme cible, refus bruyant hors-dépôt (rc=2), priorité cwd sans--path, repli script-root depuis un cwd non-dépôt, non-mémoïsation de la priorité cwd.python -m pytest scripts/tests/test_prune_merged_worktrees.py -q, 19:40).9a29f7c35d(introducer réel — le SHA cité par l'ASK,0b481ea679, était un fix de prose ML-10 sans lien) et du wrapper.See jsboige/Maintenance#64
🤖 Generated with Claude Code
Suivi CoursIA#19129 (ouverture ai-01)
Réponse point par point à l'attendu de #19129 :
--path→ cible du scan ✓ —_SCAN_ROOT_OVERRIDEpose la racine résolue de--path;list_worktrees()(l.1455) et la clé de cache (l.758) passent toutes deux parcurrent_repo_root(). Résolution par ascendance.git/.gitmodules(équivalentgit rev-parse --show-toplevel).worktree removegarde_repo_root_for_worktree()✓ — non touché.test_path_redirects_scan_to_target_farm(cwd hors dépôt +--path <ferme B>→ scan B, pas le dépôt hébergeur) + contrôle positiftest_non_repo_cwd_falls_back_to_script_repo(sans--path, hébergeur listé).Écart assumé vs attendu n°1 (à arbitrage coordinateur) : la lettre dit « sans
--path, comportement #18675 inchangé ». Le fix pose une priorité 2 : depuis un cwd dans un dépôt, ce dépôt gagne (non mémoïsé) avant le repli__file__. Le cas protecteur de #18675 — cwd System32 de la tâche planifiée, hors de tout dépôt — reste couvert par la priorité 3, inchangée et mémoïsée. La priorité 2 sert le même but que le grain : la cible de l'analyse suit le contexte d'invocation (lancer l'organe depuis la ferme Maintenance sans--pathscandait CoursIA ; il scanne désormais Maintenance). Si l'arbitrage préfère la lettre stricte, la priorité 2 se retire en 3 lignes sans toucher le reste.Closes #19129
See jsboige/Maintenance#64