Skip to content

[P1] validate-structure ne voit pas les lab.yaml qu'il devrait justement signaler #198

Description

@stephrobert

État vérifié

cli/auteur.py itère sur discover_labs(), donc sur les labs déjà chargés
avec succès
. Un lab.yaml qui lève au parsing n'y figure pas : il traverse la
validation sans un mot.

CatalogScan existe pourtant depuis un moment et conserve les labs rejetés
avec leur raison
— mais validate-structure ne l'utilise pas (grep négatif
sur illisibles et CatalogScan dans cli/auteur.py).

D'où la règle que la documentation auteur doit enseigner aujourd'hui :

dsoxlab list-labs d'abord, validate-structure ensuite.

C'est une règle qu'un utilisateur ne devrait pas avoir à connaître. Le validateur
devrait être l'outil qui dit la vérité sur le catalogue, pas celui qui suppose
qu'elle a déjà été établie.

Ce que ça change concrètement

Un auteur dont le lab.yaml a une faute de syntaxe obtient
« ✔ Tous les labs sont valides » — sur un catalogue amputé de ce lab. C'est
exactement le motif que le lot 0.1.84 a corrigé partout ailleurs : un contrôle
qui n'a pas pu regarder ne conclut pas au vert
.

Critères d'acceptation

  • validate-structure rapporte les lab.yaml présents sur disque mais non
    chargeables, avec la raison, et sort en échec.
  • Un lab déclaré dans meta.yml: sections[].labs[] mais absent du disque est
    signalé lui aussi — c'est l'autre moitié du même angle mort.
  • La documentation auteur cesse de prescrire « list-labs d'abord ».
  • Un test par cas : YAML invalide, champ requis manquant, schema_version
    trop récent, lab déclaré et absent.

Suite naturelle

CatalogScan gagnerait à devenir le résultat standard de la découverte :
discover_labs() a 6 appelants, et chacun voit uniquement les survivants sans
que rien ne le lui rappelle. À traiter séparément, sans casser l'API existante.


Relevé en confrontant au code une analyse externe du dépôt, le 2026-08-24.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions