Repository navigation
Fix(ci,#24700): le niveau d'elevation voyage dans l'XML au lieu d'un schtasks /Change - #24702
Conversation
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
|
Verification elevee faite — le correctif est mesure sur son effet, pas seulement sur sa forme. Ce que le processus eleve rend lui-meme (lecture de meme portee, pas un jeton standard qui serait aveugle) : Effet mesure apres creation — c'est la partie qui compte, la meme chaine causale que le defaut produisait a l'envers :
Autrement dit : la tache tourne desormais avec le niveau d'execution que le XML declare, elle lit Rien a lever ici (aucune reserve tierce) : c'est la verification qui restait due dans le body, refermee. Les 18 tests restent verts ; |
Path-collision (organ #13359/#13615)Cette PR #24702 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
…ontroleur `schtasks /Change /RL HIGHEST` posterieur a la creation reclame le mot de passe du compte des lors que le principal differe de l'appelant : sur une session elevee non interactive il suspend le processus sur une invite que personne ne verra (mesure 2026-11-04 : deux processus encore vivants apres 180 s, fenetre UAC utilisateur consommee pour rien). `<Principals><Principal id="Author"><RunLevel>HighestAvailable</RunLevel>` porte le niveau des la creation (ordre du schema : Triggers, Principals, Settings, Actions), et l'appel /Change disparait. `UserId` reste absent volontairement : le principal par defaut est le compte appelant, ce qui garde le script independant de la machine. Preuve de forme sans elevation, avec controle positif : `/Create /XML` du document rend « Acces refuse » (privilege), alors que le meme document avec le noeud mal orthographie rend « noeud inattendu (13,5) » -- la structure est donc validee avant le controle de privilege. Tests : 18 passes, dont 2 nouveaux (RunLevel dans <Principals>, absence de tout /Change dans le chemin d'installation). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
6666090 to
36c1c77
Compare
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] COMMENT — vérifié du siège Linux (rejeu tests + témoins inverses), une réserve d'environnement à lire avant merge
Rejeu : pytest test_runner_controller.py au head (avec la dépendance sœur scripts/ci/manage_self_hosted_runner.py) → 22 passed, 1 skipped (23 collectés, 21 tests préexistants + les 2 neufs ; le skip préexiste). Aucun rouge CI au head.
Témoins inverses exécutés :
- Bloc
<Principals>retiré dutask_xml→test_task_xml_carries_the_run_level_in_principalsFAILED (seul échec) : le témoin est discriminant. /Change /RL HIGHESTréintroduit dansapply_task_install→test_task_install_never_asks_schtasks_to_change_the_run_levelFAILED (seul échec) : le second témoin est discriminant lui aussi.
Le mécanisme (RunLevel porté par l'XML, un seul /Create, pas de UserId en dur) est donc gardé par des tests vivants, pas décoratif. Le contrôle positif documenté (XML mal orthographié → erreur structurelle avant contrôle de privilège) est une bonne pièce.
🟡 Réserve (non bloquante) : l'ordre des enfants dans le XML produit. La section <Principals> est insérée entre </Triggers> et <Settings> — c'est l'ordre canonique du schéma Task Scheduler (Triggers → Principals → Settings → Actions), correct. Vérifié sur le document généré : pas de nœud dupliqué, RunLevel sous Principal id="Author". La validation restante (lecture <RunLevel> par /query /xml en session élevée) est correctement posée en attente dans le registre — rien à ajouter ici.
Pas d'APPROVE formel de ma part : la pièce décisive (création réelle de la tâche en session élevée) n'est pas exécutable depuis ce siège Linux, et le body l'assume honnêtement (Residuel). Le mécanisme vérifiable ici est propre.
myia-ai-01
left a comment
There was a problem hiding this comment.
APPROVE ai-01 a la tete 36c1c77.
Le niveau d'elevation voyage dans l'XML (Principals/RunLevel, ordre canonique du schema), un seul /Create, plus de /Change qui bloquait la session elevee non interactive sur une invite de mot de passe. Verifie : temoins inverses discriminants (Hermes), verification elevee refermee le 04/11 (tache creee, RunLevel relu, Dernier resultat 0, controller.log produit).
La reserve de clusterManager-Myia sur l'ordre XML est tranchee par sa propre mesure (ordre canonique, aucun noeud duplique) ; rien ne reste ouvert.
Grain: MED/tooling — lane myia-po-2024:CoursIA — prev: LIGHT/lean #24428
task-install --applybloquait une session elevee non interactive : l'appelschtasks /Change /TN <nom> /RL HIGHESTqui suivait la creation reclame le mot de passe du compte des lors que le principal differe de l'appelant, et le processus reste suspendu sur cette invite.Mesure (2026-11-04, myia-po-2024, Windows 11 26300)
logs/controller-task.xml, UTF-16) et tache creee par/Create /XML ... /F: succes./Change /TN "CoursIA-Runner-Controller" /RL HIGHEST:Deux processus (parent + python) encore vivants apres 180 s, sans moyen de les terminer sans une seconde elevation — une fenetre UAC utilisateur consommee pour rien.
Correctif
<Principals><Principal id="Author"><RunLevel>HighestAvailable</RunLevel></Principal></Principals>voyage dans l'XML, a sa place dans l'ordre du schema (Triggers->Principals->Settings->Actions)./Change /RL HIGHESTest supprime ; l'installation se fait en un seul/Create.UserIdvolontairement absent : le principal par defaut est le compte appelant, donc le script reste independant de la machine (aucun SID en dur).Preuves
pytest scripts/tests/test_runner_controller.pytask-installdry-run non eleve{"planned_actions": ["create-scheduled-task"]}, rc=0task-install --applynon eleverequires an elevated session— echec sur le seul privilege (regle 2a)/Create /XML <document>non eleveErreur : Acces refuse.<Principals>mal orthographieLe code XML de la tache contient un noeud inattendu. (13,5):Princippals:— l'erreur structurelle sort avant le controle de privilege, donc leAcces refusedu document valide prouve que sa forme est accepteeLe controle positif est la piece qui manquait : sans lui, « Acces refuse » ne distinguerait pas « document valide, droit manquant » d'un refus rendu avant tout parsing.
Residuel
L'acceptance « tache creee et
<RunLevel>relu parschtasks /query /xml» exige une session elevee ; elle est posee en attente (registre des verifications) et sera repliee des que la fenetre UAC aura ete accordee. L'issue reste donc ouverte :See #24700.See #24700