État vérifié
wc -l src/dsoxlab/services/doctor.py → 1227 lignes, en croissance
continue : les contrôles egress et incus_pool viennent de s'y ajouter.
Le module porte aujourd'hui, dans un seul fichier : python, pytest, shell, git,
docker, terraform, ansible, kvm, libvirt, incus, pool libvirt, pool incus,
virtualisation matérielle, architecture CPU, ressources, accès sortant, outil
ISO, labs, lab_home — plus le modèle (Check, Fix, FixKind,
DoctorReport), le classement requis/informatif, et la remédiation.
Ce n'est pas du mauvais code : il est très commenté et le raisonnement s'y suit.
Le risque est la régression croisée, et le coût de test : éprouver une
famille demande de construire l'état de toutes les autres — c'est déjà ce qui a
obligé test_doctor.py à neutraliser six sondes dans une fixture autouse.
Découpage proposé
services/doctor/
├── model.py Check, Fix, FixKind, DoctorReport, les états
├── runner.py collect_checks, le classement requis/informatif
├── outillage.py python, pytest, shell, git, terraform, ansible
├── conteneurs.py docker
├── kvm.py virsh, pool libvirt, hw_virt, cpu_arch, iso
├── incus.py client, daemon, groupe, pool
└── systeme.py ressources, accès sortant
collect_checks reste le point d'entrée, et rien ne change pour les appelants.
Ce qu'il faut préserver
- Le classement requis / informatif est le cœur de l'agnosticisme : il ne
dépend que de quatre faits du dépôt. Le découpage ne doit pas le disperser —
d'où runner.py séparé des familles.
- Les trois états (
ok, failed, unknown) et leur sémantique.
- Les tests existants doivent passer sans réécriture, sinon le refactoring
change le comportement au lieu de le déplacer.
Critères d'acceptation
Relevé en confrontant au code une analyse externe du dépôt, le 2026-08-24.
Le chiffre annoncé par cette analyse (1112 lignes) était déjà dépassé.
État vérifié
wc -l src/dsoxlab/services/doctor.py→ 1227 lignes, en croissancecontinue : les contrôles
egressetincus_poolviennent de s'y ajouter.Le module porte aujourd'hui, dans un seul fichier : python, pytest, shell, git,
docker, terraform, ansible, kvm, libvirt, incus, pool libvirt, pool incus,
virtualisation matérielle, architecture CPU, ressources, accès sortant, outil
ISO, labs, lab_home — plus le modèle (
Check,Fix,FixKind,DoctorReport), le classement requis/informatif, et la remédiation.Ce n'est pas du mauvais code : il est très commenté et le raisonnement s'y suit.
Le risque est la régression croisée, et le coût de test : éprouver une
famille demande de construire l'état de toutes les autres — c'est déjà ce qui a
obligé
test_doctor.pyà neutraliser six sondes dans une fixtureautouse.Découpage proposé
collect_checksreste le point d'entrée, et rien ne change pour les appelants.Ce qu'il faut préserver
dépend que de quatre faits du dépôt. Le découpage ne doit pas le disperser —
d'où
runner.pyséparé des familles.ok,failed,unknown) et leur sémantique.change le comportement au lieu de le déplacer.
Critères d'acceptation
collect_checksgarde sa signature ; les imports publics restent valides.prouve qu'un refactoring n'est qu'un déplacement.
Relevé en confrontant au code une analyse externe du dépôt, le 2026-08-24.
Le chiffre annoncé par cette analyse (1112 lignes) était déjà dépassé.