Passer au contenu
Anti spaghettiManage AI Code
Anti spaghetti

Le labo

← Retour au tableau

Ce que le tableau publie

Les colonnes Couverture, Enchaînement et Devenir de la spec sont déclarées ; rien d'autre de ce tableau n'est saisi. Chaque ligne porte le rang d'une entrée ; les dates qui disent de quand datent les faits qui le fondent se lisent en tête du tableau, pour le corpus, et sur la fiche, pour l'entrée ; la version de grille sous laquelle les rangs ont été prononcés se lit à l'accueil. Le détail, critère par critère, donnée par donnée, avec sa définition et ses deux dates, se lit sur la fiche de l'entrée.

Les colonnes et les dates

Cinq de ces mentions ne paraissent plus au tableau : Version de grille, Publication, Produite par, Faits les plus anciens, Dernier push. La première se lit à l'accueil ; les quatre autres sur la fiche de chaque entrée, à la partie qu'elles qualifient, et se définissent ici, une fois.

Les trois types de contenu

Produite par : chaque partie d'une fiche dit qui l'a produite, et il y a trois types de contenu sur ce site :

Aucune quatrième. Une mention que vous ne trouveriez pas ici serait une mention que nous n'avons pas définie, et il faudrait nous le dire.

Ce que Non collecté veut dire

Un critère Non collecté ne fait jamais tomber un rang, et n'en fait jamais atteindre un non plus : sur les quatre colonnes qui influencent le rang, il rend l'entrée unranked ; ailleurs il ne change rien. Sans cela, une colonne d'absences se lirait comme une colonne de faiblesses.

L'ordre des lignes

L'ordre des lignes : par rang (A, puis B, puis C), puis par étoiles décroissantes, puis par identifiant. Une entrée sans nombre d'étoiles se range après celles qui en portent un, à rang égal, et aucun nombre ne lui est prêté. La colonne Étoiles porte stars_count, l'un des deux signaux du critère 1 : on trie sur un signal de C1, jamais sur C1, et le second signal est la date de création, qui ne paraît pas dans cet ordre.

Les entrées non classées se publient à part, sous le tableau : elles sortent du classement, gardent les mêmes colonnes et le même ordre secondaire : étoiles décroissantes, puis identifiant.

Les mouvements et leurs causes

La section Mouvements du tableau compte ce qui a bougé depuis l'application précédente et nomme la cause de chaque mouvement, parmi cinq : le dépôt observé a changé, le temps a passé, nous avons changé, notre règle d'agrégation a changé, les deux relevés ne sont pas comparables. Un mouvement peut porter deux causes, et la somme de la table des causes peut donc dépasser le nombre de mouvements. Quand rien n'a bougé, la section affiche son zéro plutôt que de disparaître, sans quoi on ne saurait pas si rien n'a bougé ou si personne n'a regardé.

CauseMouvements
le dépôt observé a changé0
le temps a passé1
nous avons changé0
notre règle d'agrégation a changé0
les deux relevés ne sont pas comparables0

Un mouvement peut porter deux causes : la somme de cette table peut donc dépasser le nombre de mouvements.

L'autre colonne

L'autre colonne ne déplace aucun rang : elle se publie, elle ne classe pas. Une colonne qui influençait le rang et cesse de l'influencer est une révision de la règle, et elle se lit au § Mouvements du tableau avec sa cause.

Les colonnes de classification

Couverture, Enchaînement et Devenir de la spec se lisent au tableau, valeurs de référence de l'Éditeur, et sur chaque fiche, calculées par la règle publiée ici depuis les réponses de l'Analyste. Ce que chaque valeur veut dire, les questions que chaque règle lit et la règle elle-même sont ici, sous la version de sa définition ; la fiche dit sous quelle version chaque valeur a été calculée, et les réponses qu'elle a lues.

Couverture · coverage-v5

Jusqu'où l'entrée prend le travail en charge, du besoin jusqu'au code. En anglais, nous écrivons chain coverage : c'est une formulation propre au comparatif, non un terme établi. La valeur est une catégorie déduite des six domaines de la chaîne (découverte, cadrage, spécification, conception, découpage, réalisation), chacun couvert ou non ; elle ne dépend que de la réalisation, de la spécification et de la découverte. Une étape ne compte, pour un domaine, que reliée à la chaîne : nommée par le parcours déclaré ou par l'aiguillage, ou dont une étape en aval lit le résultat. Un module que l'outil livre à activer à part, que rien ne nomme ni ne lit, se voit sans compter. La spécification est reliée à la réalisation quand l'étape de réalisation la prend en entrée. PDLC et SDLC relèvent du développement piloté par la spécification ; Plan-first n'en relève pas, et l'entrée figure au comparatif parce qu'elle s'en réclame : sa valeur dit ce qui lui manque. PDLC inclut SDLC.

ValeurCe qu'elle signifie
PDLCProduct Development Life Cycle, le cycle de développement produit, à distinguer du cycle de vie du produit au sens marketing : une étape de découverte au sens strict, reliée à la chaîne, puis une spécification prise en entrée par une étape de réalisation.
SDLCSoftware Development Life Cycle, le cycle d'ingénierie : une spécification produite ou consommée, prise en entrée par une étape de réalisation, sans découverte.
Plan-firstPiloté par le plan : une étape de réalisation sans spécification persistée ; le code est gouverné par un plan, une conception ou une liste de tâches, le comment et non le quoi. Comparable au mode plan des agents de code.

Ses questions, dans l'ordre où sa règle les lit :

CléQuestionRéponsesForce admise
implementation_stepL'entrée a-t-elle une étape de réalisation : une commande, un skill, un agent ou une boucle qui écrit le code de l'application à partir des artefacts de l'outil ?oui · nonénoncé
spec_inputCette étape de réalisation prend-elle en entrée une spécification, directement ou par un plan ou une liste de tâches qui en dérive ?oui · nonénoncé
discoveryUne étape a-t-elle pour objet la découverte au sens strict, explorer et qualifier le besoin avant de décider, et en persiste-t-elle le résultat dans un fichier qu'elle seule écrit ?oui · nonénoncé
discovery_linkedUne étape de découverte est-elle reliée à la chaîne : le parcours déclaré ou l'aiguillage la nomme-t-il, ou une étape en aval lit-elle son résultat ?oui · nonénoncé

Sa règle : les branches s'essaient dans l'ordre, et la première qui répond donne la valeur.

#SiValeur
1implementation_step = nonPlan-first
2spec_input = nonPlan-first
3implementation_step = oui et spec_input = oui et discovery = oui et discovery_linked = ouiPDLC
4implementation_step = oui et spec_input = ouiSDLC
5sinonPlan-first

Enchaînement · sequencing-v5

La manière dont l'étape suivante d'une unité de travail est décidée : le mécanisme qui décide, non ce qui empêche l'agent de dévier. Les valeurs se distinguent par l'endroit où l'ordre est écrit : dans l'outil, dans les données du projet, ou nulle part avant le moment de choisir.

ValeurCe qu'elle signifie
WorkflowFlux de travail, processus : l'étape suivante découle de la position dans un parcours de phases fixé par l'outil, chaque phase exigeant l'artefact de la précédente ; l'utilisateur ou un script déclenche la suivante. L'ordre est écrit dans l'outil.
Task graphGraphe de tâches : l'étape suivante découle d'un graphe de tâches persistant, dotées d'un état et de dépendances, où l'exécutant prend la prochaine tâche prête ; on pilote en modifiant le graphe. L'ordre est écrit dans les données du projet. Repères hors corpus : beads, Backlog.md, claude-task-master.
CatalogCatalogue : l'étape suivante découle d'un choix parmi un ensemble d'éléments décrits (skills, agents), sans parcours imposé ; le choix se fait sur le moment, par le modèle ou par l'utilisateur. L'ordre n'est écrit nulle part.
sans objetL'entrée ne décide d'aucune étape : elle n'en a qu'une.
inclassableLe dépôt est trop jeune ou se contredit, et aucune des valeurs précédentes ne se prouve.

Ses questions, dans l'ordre où sa règle les lit :

CléQuestionRéponsesForce admise
chained_stepsL'entrée a-t-elle au moins deux étapes qui s'enchaînent dans une même unité de travail ?oui · nonénoncé
fixed_pathL'outil fixe-t-il un parcours unique de phases, avec un prérequis d'artefact entre elles, sur le chemin de toute unité de travail ?oui · nonénoncé
task_storeSur le chemin de toute unité de travail, l'exécutant choisit-il l'élément suivant dans un même magasin persistant d'éléments de travail, dotés d'un état et de dépendances, dont il calcule les éléments prêts et qu'il réclame avant de les travailler ?oui · nonénoncé
catalogL'entrée offre-t-elle un ensemble d'éléments décrits, skills ou agents, parmi lesquels l'étape suivante se choisit sur le moment, avec un mécanisme de sélection et sans parcours imposé ?oui · nonénoncé

Sa règle : les branches s'essaient dans l'ordre, et la première qui répond donne la valeur.

#SiValeur
1chained_steps = nonsans objet
2fixed_path = ouiWorkflow
3task_store = ouiTask graph
4catalog = ouiCatalog
5sinoninclassable

Devenir de la spec · spec-fate-v5

Combien de temps la spécification sert, une fois écrite : le temps d'une demande, ou la vie de la fonctionnalité. C'est la question que pose Birgitta Böckeler, et les valeurs suivent les trois niveaux d'implémentation du développement piloté par la spécification qu'elle distingue (implementation levels) ; en anglais, nous écrivons spec lifecycle. Au premier, spec-first, une spécification réfléchie est écrite d'abord, puis sert à la tâche en cours. Au deuxième, spec-anchored, elle est conservée après la tâche achevée, pour continuer à faire évoluer et à maintenir la même fonctionnalité. Au troisième, spec-as-source, elle est dans la durée la source principale : seule elle est modifiée par une personne, qui ne touche jamais le code. Böckeler constate que toutes les démarches pilotées par la spécification qu'elle a trouvées sont au moins spec-first, et se demande si spec-as-source, et même l'ancrage, ne cumuleront pas les défauts du développement piloté par les modèles (MDD, model-driven development) et ceux des LLM : la rigidité et le non-déterminisme.

Le champ lit la reprise, non un réalignement sur le code livré. spec-anchored tient à ce que la spécification soit reprise à chaque évolution de la fonctionnalité ; garder la spécification et le code cohérents est l'effort qui accompagne ce niveau, un défi en soi selon Böckeler, et non une condition que le champ vérifie. La reprise se décide par son déclencheur, une demande nouvelle sur une fonctionnalité livrée, non par le mécanisme qui rouvre la spécification ; une spécification rangée par fonctionnalité qu'aucune étape ne dit reprendre reste au premier niveau.

Ce qui s'écarte d'elle, et pourquoi.

ValeurCe qu'elle signifie
spec-firstÉcrite d'abord, la spécification sert à la tâche en cours, le temps d'une demande : la demande suivante en ouvre une autre, et la précédente, archivée ou laissée en place, même rangée par fonctionnalité, n'est plus reprise.
spec-anchoredSpécification ancrée : conservée après la tâche, elle est reprise à chaque évolution de la même fonctionnalité, dont elle sert la vie. Le niveau tient à cette reprise, non au rangement de la spécification ni à la preuve d'un réalignement sur le code livré.
spec-as-sourceSpécification comme source : la source principale dans la durée, seule modifiée par une personne, le code en étant régénéré. Böckeler doute de ce niveau au vu du développement piloté par les modèles. Repère hors corpus : Tessl.
sans specL'étape de réalisation ne prend en entrée aucune spécification au sens ci-dessus : son code est gouverné par un plan ou une conception (Couverture Plan-first). La valeur est hors des trois niveaux.

Ses questions, dans l'ordre où sa règle les lit :

CléQuestionRéponsesForce admise
implementation_stepL'entrée a-t-elle une étape de réalisation : une commande, un skill, un agent ou une boucle qui écrit le code de l'application à partir des artefacts de l'outil ?oui · nonénoncé
spec_inputCette étape de réalisation prend-elle en entrée une spécification, directement ou par un plan ou une liste de tâches qui en dérive ?oui · nonénoncé
generatedLe lot montre-t-il des fichiers de code marqués générés, à ne pas modifier, et une commande qui les régénère depuis la spécification ?oui · nonénoncé
resumeSur une demande nouvelle portant sur une fonctionnalité déjà livrée, une étape dit-elle reprendre la spécification existante, ou en ouvrir une autre ?la reprend · en ouvre une autre · ne le dit pasénoncé

Sa règle : les branches s'essaient dans l'ordre, et la première qui répond donne la valeur.

#SiValeur
1implementation_step = nonsans spec
2spec_input = nonsans spec
3implementation_step = oui et spec_input = oui et generated = ouispec-as-source
4implementation_step = oui et spec_input = oui et resume = la reprendspec-anchored
5implementation_step = oui et spec_input = oui et resume = en ouvre une autrespec-first
6implementation_step = oui et spec_input = ouispec-first
7sinonsans spec

Comment une valeur se calcule

L'Analyste répond à chaque question par une réponse de sa liste, citée et pesée d'une force, ou dit qu'il ne peut pas répondre, et cite ce qui l'en empêche. La chaîne vérifie chaque réponse, puis essaie les branches de la règle du champ dans l'ordre : la première qui répond donne la valeur. Une question restée sans réponse ne fait répondre aucune branche qui exige une réponse ; elle n'est pas un non. Le qualificatif dit sur quoi la valeur tient, sans entrer dans la case ni dans l'accord.

Chaque question déclare la force qu'elle admet, la plus haute qu'elle accepte : la dernière colonne de sa table. Une réponse dont la force la dépasse est ramenée par la chaîne à celle-ci, et acceptée : ce n'est pas un refus, et la fiche le dit à côté de la réponse. Le qualificatif se calcule sur la force ramenée. Quand l'Analyste dit ne pas pouvoir répondre, il n'y a rien à ramener.

ForceCe qu'elle dit
énoncéLe lot dit le fait : une étape, un gabarit, un fichier ou une commande l'écrit.
indiceLe lot laisse inférer le fait sans le dire : un nom, un rangement, une portée ou une prose qui le suggère.
douteLe lot ne permet ni de dire le fait ni de l'inférer : aucune réponse n'est rendue, et la citation dit ce qui a fait douter.
QualificatifQuand la chaîne l'écrit
principalementUn doute a écarté une branche de la règle essayée avant la branche retenue : la valeur tient à ce que le lot n'a pas permis d'établir.
sembleUne réponse que lit la branche retenue est un indice : la valeur tient à ce que le lot laisse inférer.

Quand une case vaut -

La case vaut -, et la fiche dit pourquoi : la chaîne a refusé ce que l'Analyste a rendu, ou l'entrée ne lui donnait rien à lire. Un désaccord avec la référence n'est pas un -.

CauseCe qu'elle ditRemède
réponse hors listeune réponse rendue n'est pas de la liste de sa question, écrite mot pour mot, casse comprise, ou sa force n'est pas un mot de la listerelire la question, la méthode du champ ou l'instruction, et les réviser par un commit
chemin hors lotun chemin cité n'est ni au listage de la racine ni dans l'inventaire, ou une commande citée ne figure ni dans une pièce ouverte ni dans un préambulerevoir la ligne des racines de l'entrée ou l'instruction
sans réponseaucune réponse exploitable : binaire indisponible, délai dépassé, réponse vide, illisible ou hors schéma, ou modèle autre que celui déclarérelancer la commande
sans inventairel'entrée ne livre aucun matériel lisible dans son dépôtdéclarer où vit son matériel s'il le devient

Quand une source attendue manque

À sa demande de pièces, l'Analyste nomme, pour chaque champ, les sources que la méthode du champ fait lire pour le trancher et que l'inventaire de l'entrée ne porte pas ; la fiche les publie à côté de la valeur. Elles ne changent pas la case : la valeur reste celle que la règle du champ calcule, une case n'en devient pas -, et l'accord se compte comme pour toute autre. Une source se nomme dans cette liste fermée, sous notions-v5 :

Le prochain cran du rang

Une entrée porte une date de prochain cran, ou n'en porte aucune. La première publie, sur sa fiche, la date à laquelle le seul passage du temps déplacera son rang, dérivée des dates relevées et des seuils d'âge des critères 1 et 2, jamais de l'horloge. La seconde n'en publie aucune : aucun seuil d'âge ne change son rang, et une date publiée là se lirait comme une promesse.

Chaque cran est d'exactement un rang, et c'est une propriété de la règle : un cran de niveau, au plus un cran de rang. La date d'un cran porté par le critère 2 est une hypothèse, non une échéance (last_pushed_at bouge à chaque push), et la fiche publie la réserve avec la date. Les seuils d'âge eux-mêmes se publient sous les critères 1 et 2, à la partie suivante.

La règle du rang

Quatre colonnes influencent le rang, et le rang est celui de la plus faible des quatre :

La règle : un niveau Bas est éliminatoire, et A exige les quatre au vert

Version de la règle du rang : rank-rule-v2

Les clauses de cette règle, dans leur ordre d'essai :

#Condition sur les quatreRang produit
1l'un d'eux vaut not_collectedunranked
2sinon, l'un d'eux vaut low ; le critère décisif est le premier qui vaut low, dans l'ordre de la grilleC
3sinon, A si les quatre valent high, B autrementA ou B

Comment un critère est tranché

Les branches sont essayées dans cet ordre, la première qui répond gagne. La fiche porte, sous chaque critère, la règle atteinte en mots : la condition de la branche qui a répondu, ou le libellé de seuil que son niveau a atteint. Les autres ne disparaissent pas : les seuils, les branches et leur ordre d'essai se publient en entier à la partie La grille et ses cinq critères, qui est la source que la chaîne applique.

Ce que chaque critère ne mesure pas se lit au même endroit, sous le critère qui le borne, les limites du critère 9 comprises.

Les travaux qui citent : critère 5

Le compte publié sur chaque fiche est celui des travaux gardés après exclusion de l'auto-citation : un travail est écarté si le login du propriétaire du dépôt figure dans un nom d'auteur ou une affiliation rendus. Le nombre n'entre dans aucun seuil : le critère lit une présence et un croisement, et un travail écarté n'y paraît pas.

Trois états, et ils ne se confondent pas : des travaux, un zéro déclaré, ou rien du tout. Une fiche qui déclare « zéro trouvé suite à nos recherches » dit que la recherche a eu lieu et n'a rien rendu : ce n'est pas une absence de relevé : « rien trouvé » et « pas cherché » ne se disent pas de la même façon.

Le dénominateur du critère 4

Le dénominateur est publié : un agent absent de cette liste fermée se lirait non regardé aussi bien que non supporté sans lui. La liste elle-même, et sa version, se publient aux listes fermées en vigueur, à la partie suivante.

Ce que chaque fiche vous permet de vérifier

Une fiche se vérifie à partir de ce qu'elle porte. Chaque donnée y paraît avec sa définition et deux dates (le jour où elle a été relevée, et la date des faits qu'elle rapporte), et l'entrée porte, en tête, l'adresse publique du dépôt observé : c'est là que n'importe qui peut aller regarder la même chose.

Un fait qui manque est marqué absent, avec son motif. Il n'est jamais remplacé par un zéro, une moyenne ou une supposition : c'est ce qui sépare « j'ai regardé et n'ai rien vu » de « je n'ai pas regardé », et la distinction change des niveaux.

Rien n'est saisi. Aucun rang, aucun niveau ne bouge sans que le critère en cause, sa valeur avant et sa valeur après ne paraissent, sur la fiche de l'entrée, à la section qui dit ce qui a bougé.

La grille et ses cinq critères

La version en vigueur

criteria-v3, et la règle du rang porte la sienne, rank-rule-v2.

criteria-v3 désigne la grille publiée : cinq critères, dont quatre décident du rang, trois rangs, rang et état de publication séparés. Les rangs attribués sous une version antérieure restent estampillés de cette version tant qu'ils n'ont pas été réexaminés : c'est l'indicateur de dette éditoriale du projet, et il se mesure au lieu de se plafonner.

Ce qui vaut pour les cinq

L'échelle des niveaux

NiveauMotCe que le niveau dit
highHautle critère est pleinement satisfait
mediumMoyensatisfait, sans l'être pleinement
lowBasle niveau bas, éliminatoire sur les quatre colonnes qui influencent le rang
not_collectedNon collectérien n'a été mesuré, donc rien n'est jugé

Le régime d'évaluation

Deux valeurs, et deux seulement : le régime dit comment le verdict d'un critère s'obtient, et un critère sans régime ne se charge pas.

RégimeIdentifiantComment le verdict s'obtient
MesurémeasuredCalculé depuis les faits relevés par la chaîne, en appliquant la règle publiée : une table de seuils, ou une procédure à branches. Ne se saisit jamais à la main
Sans gisementno_sourceAucun calcul : le critère vaut not_collected par construction, avec un motif d'abstention identique sur toutes les entrées. Reporte l'absence de source ouverte à ce palier de projet, jamais l'absence de valeur

Les cinq critères sont mesurés aujourd'hui, et Sans gisement reste déclarable sans être employé.

Les cinq critères

Critère 1 : Adoption durable

Ce que ça mesure. Une attention accumulée et durable : un dépôt largement remarqué, et qui a eu le temps de l'être. Les deux se lisent ensemble et ne se compensent pas : le critère conjoint un seuil d'étoiles et un seuil d'âge, il ne les divise pas. 279 788 étoiles en dix mois valent medium, 5 351 étoiles en treize mois valent high, et c'est le comportement voulu : le premier est un pic de lancement, le second une audience installée.

Ce que ça ne mesure pas. L'usage, ni la qualité. Une étoile est un signet : elle s'ajoute et ne se retire pratiquement jamais, si bien qu'elle enregistre l'attention passée et non l'activité présente. Rien ici ne dit combien de personnes se servent réellement de l'outil. Et le critère n'établit aucun rapport entre les deux grandeurs : « tant d'étoiles par mois » serait une autre mesure, qui rangerait un pic de lancement au-dessus d'une audience installée.

RubriqueContenu
RégimeMesuré
Faits lusstars_count · created_at
Valeurs possiblesBas · Moyen · Haut · Non collecté
Influence le rangoui : son niveau entre dans la règle du rang

Traitement. Trois branches, essayées dans l'ordre ; la première qui répond gagne. La première est une disjonction (un seul fait suffit) ; la deuxième une conjonction : les deux doivent être disponibles et tenir ensemble, et si l'un manque la branche est franchie ; la troisième est le résidu, explicite, qui garantit qu'aucun jeu de faits ne reste sans réponse.

NiveauLibellé publié
Basmoins de 1 000 étoiles ou dépôt créé depuis moins de 6 mois
Moyentout le reste
Hautau moins 5 000 étoiles et dépôt créé depuis 12 mois ou plus

Quand une clause d'âge décide, la fiche publie la date du prochain changement de niveau par le seul âge, dérivée de la date de création et des seuils, jamais de l'horloge. Un dépôt sous les six mois passe la première branche à sa date d'anniversaire ; un dépôt qui a les étoiles et pas les douze mois atteindra high à la sienne. Rien n'est publié quand aucune clause d'âge ne décide : une date fabriquée là où le temps ne change rien se lirait comme une promesse.

Les nombres que la règle pèse. Ils vivent dans le fichier de ce critère, à côté du libellé qui les annonce : une valeur changée là déplace le verdict qu'elle touche, sans autre écriture.

ParamètreValeur
min_stars1000
created_within_months6
high_min_stars5000
high_min_age_months12

Critère 2 : Maintenance active

Ce que ça mesure. Si le projet donne des signes de vie récents : du code poussé, des versions publiées, et l'absence d'archivage déclaré. C'est un test de dérive, pas de vitalité : on cherche l'abandon, pas l'intensité.

Ce que ça ne mesure pas. La qualité de ce qui est maintenu, ni l'intention de le poursuivre. Une date rapportée par une forge est une borne inférieure : l'activité réelle est au moins aussi récente que ce qui est lu, jamais moins. Trois limites de plus, publiées le 2026-09-07.

(1) La date de push ne date pas le travail de la branche par défaut, et elle court devant elle. Mesuré le 2026-09-08 sur les 21 entrées, et la mesure a renversé la cause qu'on lui prêtait : la limite disait « un push peut être le fait d'un robot » et c'est faux dans le corpus : la tête de la branche par défaut est humaine sur 21 entrées sur 21, et trois entrées seulement portent un commit de robot dans leurs cent derniers, un chacune. Ce qui rafraîchit la date de push est un push sur n'importe quelle branche ou étiquette : elle devance la branche par défaut sur 12 entrées sur 21, médiane 2 jours, maximum 49. Aucun de ces écarts ne franchit un seuil du critère, et la date du dernier commit d'un auteur non robot se publie désormais à côté de la date de push, sans entrer dans aucune branche : le fait mesure l'hypothèse, il ne la sanctionne pas. La contre-épreuve est chiffrée : s'il décidait, il déplacerait 2 niveaux et 0 rang.

(2) La fraîcheur repose sur le seul push pour les entrées sans release : elles ne peuvent pas atteindre high, et leur medium se lit alors sur une moitié de preuve.

(3) Le seuil de 120 jours a une bordure, et elle est mesurée : deux entrées sont à 103 jours, soit dix-sept du basculement, et un relevé mensuel les fera osciller sans qu'aucun fait n'ait changé de nature.

RubriqueContenu
RégimeMesuré
Faits lusarchived · last_pushed_at · last_human_commit_at · releases_count · latest_release_at
Valeurs possiblesBas · Moyen · Haut · Non collecté
Influence le rangoui : son niveau entre dans la règle du rang

Traitement. Trois branches, essayées dans l'ordre. La première teste trois signaux de dérive indépendants ; un seul suffit. La deuxième est la négation de la première, puis l'exigence d'une release publiée, puis la négation des deux fraîcheurs, et non une conjonction de faits présents. La troisième est le résidu : le projet ne dérive pas, et il n'est pas frais des deux côtés ; la fiche publie les deux dates lues, de sorte que le lecteur voie laquelle manque.

NiveauLibellé publié
Basarchivé ou dernier push > 180 j ou dernière release à plus de 12 mois
Moyenaucun signal de dérive, mais aucune release publiée ou au moins une des deux fraîcheurs en défaut
Hautaucun signal de dérive, une release publiée, et aucune des deux fraîcheurs en défaut : push ≤ 120 j, release ≤ 6 mois

Les trois signaux de dérive, un par un. L'archivage se déclenche sur le drapeau de la forge ; un fait manquant ne le déclenche pas. L'ancienneté de push se déclenche au-delà de 180 jours du relevé ; un fait manquant ne le déclenche pas. L'absence de release exige un compte strictement positif et une dernière release à plus de 12 mois du relevé : un compte à zéro ne déclenche rien, car ne pas employer les releases de la forge n'est pas dériver, et le critère est un test de dérive. Un compte indisponible retire cette clause sans toucher aux deux autres.

Les deux fraîcheurs du high, une par une. Le push récent est en défaut au-delà de 120 jours du relevé ; la release récente au-delà de six mois, en mois calendaires comme les trois autres seuils d'âge de la grille. Dans les deux cas, un fait manquant retire la clause : elle n'est pas en défaut. C'est la seule exception publiée à la règle « un fait absent n'abaisse jamais un niveau », et elle vaut dans les deux sens.

L'exigence de release, elle, ne se retire pas, et c'est la seule asymétrie de la règle. Un compte à zéro est un fait lu : il dit que le projet n'en publie aucune, et high devient inatteignable. Un compte indisponible est un fait qu'on n'a pas pu lire, et il retire la clause comme les deux fraîcheurs : l'invariant 4 interdit d'abaisser un niveau sur un trou de relevé. Ne pas publier de release cesse ainsi d'être mieux traité que d'en publier lentement.

Les nombres que la règle pèse. Ils vivent dans le fichier de ce critère, à côté du libellé qui les annonce : une valeur changée là déplace le verdict qu'elle touche, sans autre écriture.

ParamètreValeur
max_push_age_days180
no_release_within_months12
high_max_push_age_days120
high_no_release_within_months6

Critère 3 : Gouvernance / bus factor

Ce que ça mesure. La concentration du projet sur une seule personne : le nombre de contributeurs déclarés par la forge, la part que le premier d'entre eux porte, et la nature du propriétaire du dépôt. Un compte personnel à trois contributeurs n'expose pas au même risque qu'une organisation ; un dépôt à quarante contributeurs dont une seule personne écrit neuf commits sur dix non plus.

Ce que ça ne mesure pas. Le bus factor réel : la part dit qui écrit, jamais qui décide. Ni la qualité de la gouvernance : rien ici ne lit de charte, de fondation ni de règle de succession. Deux limites de la part sont publiées, et chiffrées, le 2026-09-08.

(1) La population interrogée est celle du compte, qui fragmente une personne commitant sous deux adresses : sur les 21 entrées, l'autre population en déplace neuf d'au moins deux points, jusqu'à 36,8 : 63,0 % à 99,8 %, 69,9 % à 88,5 %, 52,8 % à 79,1 %. Le sens de l'erreur est publié avec elle : la population retenue sous-estime la concentration, donc rate un low au lieu d'en fabriquer un, et entre rater et fabriquer sur un éliminatoire la grille a déjà choisi.

(2) Un mode de fusion qui écrase les commits concentre les contributions sur qui fusionne, et redouble le premier écart. Les rattraper demanderait un jugement que la chaîne ne tient pas : ce sont des limites, non des correctifs.

RubriqueContenu
RégimeMesuré
Faits luscontributors_count · top_contributor_share · owner_type
Valeurs possiblesBas · Moyen · Haut · Non collecté
Influence le rangoui : son niveau entre dans la règle du rang

Traitement. Trois branches, essayées dans l'ordre ; la première qui répond gagne. La première est une disjonction (un seul fait suffit), et la part n'y est lue que si elle est exacte : une part bornée ou indisponible laisse la branche se conclure sur le seul compte. La deuxième est une conjonction (les deux doivent tenir à la fois), et elle ne lit pas la part. La troisième est le résidu, explicite.

NiveauLibellé publié
Bastrois contributeurs ou moins, ou part exacte du premier contributeur ≥ 80 %
Moyentout le reste
Hautpropriétaire de type Organization et ≥ 15 contributeurs

La clause de concentration est entrée le 2026-09-08, et son seuil est calibré, pas posé. Les parts relevées vont de 18,4 % à 100 %, et la bande [78 %, 97,5 %) est vide : au seuil retenu, la clause ne déplace aucun niveau, les deux seules entrées au-dessus étant déjà low par le compte. Les valeurs écartées se publient avec ce qu'elles auraient produit, un rejet sur pièce valant une adoption : 50 % aurait déplacé 6 rangs, dont deux A vers C ; 60 %, 3 ; 65 %, 2 ; 70 % et 75 %, un seul : le premier du classement, A vers C, sur une part de 76,8 % qui vaut 79,7 % sous l'autre population ; 77 % et au-delà, aucun. Le genou n'existe pas : la distribution est continue de 18 % à 77 %, puis vide.

La garde de troncature est mesurée, pas postulée. Une part lue sur une page partielle est surestimée, donc journalisée comme borne supérieure, et la clause ne conclut pas low sur elle : c'est le principe du critère 8, un relevé incomplet ne rend jamais un niveau plus favorable, lu dans l'autre sens, et c'est la même règle. Elle ne coûte rien au seuil retenu et protège deux rangs, dont un A, aux seuils bas.

La branche basse a perdu sa clause de propriétaire le 2026-09-07 : le critère mesure la concentration du projet sur une seule personne, et deux organisations à 1 et 3 contributeurs y échappaient par un attribut purement déclaratif : une organisation se crée seule en deux minutes. Le seuil est passé de « moins de 5 » à « trois ou moins » dans le même geste, et il n'a déplacé aucun niveau : personne n'est à 4 sur les vingt et une entrées.

La symétrie du fait manquant a cessé d'être vraie, et c'est dit plutôt que maintenu. La branche basse ne lit plus qu'un fait : un type de propriétaire indisponible ne l'empêche plus de se conclure. La branche haute, elle, en lit toujours deux, et un fait absent l'empêche de se conclure. Ce que l'asymétrie coûte est accepté : un compte de contributeurs absent laisse toujours l'entrée au résidu, et un fait absent n'abaisse jamais un niveau tient donc encore.

Les nombres que la règle pèse. Ils vivent dans le fichier de ce critère, à côté du libellé qui les annonce : une valeur changée là déplace le verdict qu'elle touche, sans autre écriture.

ParamètreValeur
low_max_contributors3
high_min_contributors15
concentration_threshold_percent80

Critère 4 : Multi-outils

Ce que ça mesure. Dans combien d'assistants de la liste fermée agents-v4 l'outil est atteignable, donc l'inverse d'un verrouillage sur un seul. Adopter un outil qui n'en sert qu'un, c'est épouser le sort de cet un. Un agent est atteignable par l'une des trois routes : un marqueur porté au listage de la racine ou du répertoire de la forge, un nom cité dans le README, ou un jeton d'invocation cité en position d'argument d'une ligne de commande du README. Le décompte est l'union des trois ensembles, jamais la somme de trois nombres (un agent porté, nommé et invoqué compte une fois), et la fiche publie, par agent compté, la ou les routes qui l'ont fait entrer.

Le dénominateur est à quatorze depuis le 2026-09-07, et la convention d'interopérabilité est un drapeau. Elle n'est pas un assistant : la compter pour un sur quinze rangeait la forme la moins verrouillante qui soit au plus bas du décompte. Elle sort du décompte des deux côtés, numérateur comme dénominateur (la laisser dans l'un publierait des décomptes à quinze sur quatorze), et reste dans la liste, parce que la deuxième branche lit son appartenance et que la fiche la publie à part.

Ce que ça ne mesure pas. Cinq limites subsistent, et elles sont publiées ici plutôt que tues.

(1) Le README est le seul gisement des noms et des invocations : un outil dont le support est documenté sur un site ou dans un répertoire de documentation est sous-compté, et l'élargir demanderait des appels non bornés.

(2) L'intention n'est pas lue : « contrairement à tel assistant… » compte cet assistant ; le signal lit un nom, pas une phrase.

(3) Un résidu de faux positifs subsiste : cinq formes sont désambiguïsées, mais trois noms d'agent restent des mots que d'autres contextes peuvent porter.

(4) Les outils qui sont eux-mêmes l'agent sont le verrouillage le plus littéral, et le critère leur reste applicable. Un outil qui remplace l'assistant plutôt que de s'y greffer ne nomme aucun agent tiers, et son décompte tombe à zéro : ce n'est pas une mesure manquante, c'est la mesure. Le critère lit une compatibilité déclarée, et une autonomie complète est une compatibilité nulle.

(5) Il est quasi constant, et cela se chiffre : high 17 · medium 2 · low 2 sur les 21 entrées. La quasi-constance n'est pas l'inertie : neutralisé à medium, le critère déplace quatre rangs, plus que les critères 2 et 3 : ses quatre niveaux bas mordent tous. La règle de sortie de la grille ne l'atteint donc pas, et c'est mesuré plutôt qu'espéré.

RubriqueContenu
RégimeMesuré
Faits lusagents_supported · agents_considered · agents_reachable · agents_routes
Valeurs possiblesBas · Moyen · Haut · Non collecté
Influence le rangoui : son niveau entre dans la règle du rang

Traitement. Cinq branches, essayées dans l'ordre ; la première qui répond gagne. Les seuils portent sur le décompte d'agents atteignables, sur les quatorze considérés.

#IdentifiantNiveauCondition
04.not_collected.reachable_agents_unavailableNon collectéle décompte des assistants ou son dénominateur est indisponible
14.high.agents_md_reachableHautla convention AGENTS.md fait partie des assistants atteignables
24.high.five_or_more_reachableHaut5 agents atteignables ou plus
34.medium.two_to_four_reachableMoyende 2 à 4 agents atteignables
44.low.at_most_one_reachableBasau plus 1 agent atteignable

Trois points que l'échelle laisserait implicites, tranchés ici.

La branche 0 passe avant les autres, comme aux critères 7 et 9 : sans gisement lisible, il n'y a rien à apprécier. Elle lit les deux décomptes : un décompte sans dénominateur ne se lit pas.

Zéro n'est pas une absence. Un README lisible qui ne nomme aucun agent, et une arborescence sans marqueur, donnent 0, donc low par la branche 4, jamais la branche 0. C'est l'invariant 4 dans son second sens : ne pas deviner un manque là où il y a une mesure.

La branche 1 teste une appartenance, et une indisponibilité y répond non. La liste des agents atteignables indisponible ne fait jamais une abstention : l'essai continue vers les décomptes. Le cas est réel : une entrée porte une liste indisponible de motif « les trois routes ont été lues, aucune n'atteint d'agent déclaré », un vide mesuré écrit sous forme d'indisponibilité, et le lire comme la branche 0 lit ses deux signaux ferait tomber en abstention la seule entrée que la révision doit laisser low.

Pourquoi la branche 1 passe avant les décomptes, et non après. Le critère mesure l'inverse d'un verrouillage sur un seul, et il pénalisait la forme la moins verrouillante qui soit : un fichier de convention comptait pour un agent sur quinze, quand il ouvre l'outil à tous ceux qui lisent la convention. La placer après les décomptes ne changerait aucun niveau, mais elle dirait que la convention est un appoint, quand elle suffit.

Le seuil bas n'est pas un choix, il est dans la définition du critère : l'inverse d'un verrouillage sur un seul. Le seuil haut, lui, est un choix (un tiers de la liste fermée) et il est éditorial : high n'a aucune voie d'effet sur le rang, seul low plafonne.

La branche 0 a un compte à zéro sur le corpus et reste publiée telle quelle, même posture que la branche high du critère 9. Une branche retirée faute d'occasion ferait disparaître la seule distinction entre pas d'agent et pas lu.

Les nombres que la règle pèse. Ils vivent dans le fichier de ce critère, à côté du libellé qui les annonce : une valeur changée là déplace le verdict qu'elle touche, sans autre écriture.

ParamètreValeur
high_min_reachable5
low_max_reachable1

Critère 5 : Évaluation tierce

Ce que ça mesure. Qui cite l'entrée, et si ce travail en cite une autre. Un index bibliographique ouvert est interrogé une fois par entrée, sur l'URL canonique de son dépôt ; les travaux rendus sont ceux qui nomment cette adresse, hors auto-citation. Deux faits en sortent, et ils sont publiés à côté du verdict :

Un travail qui figure dans les résultats d'au moins deux entrées du classement les rapproche de fait : il les a lues ensemble, et c'est le seul rapprochement que ce critère sache établir. Les entrées qu'un travail rapproche se publient avec lui, par travail.

Vingt travaux qui citent la même entrée et un seul valent le même apport : le critère lit une présence et un croisement, jamais un volume. C'est ce qui le rend invariant au volume par construction, et ce qui l'empêche de servir de prime à la notoriété.

Ce que ça ne mesure pas. Six limites subsistent, et elles sont publiées ici plutôt que tues.

(1) Le critère compte des travaux sans lire leur contenu : il ne distingue pas un retour élogieux d'un retour accablant. Être cité et être bien jugé sont deux choses, et seule la première est ici établie.

(2) La mesure introduit un avantage structurel aux outils d'origine universitaire, publiés dans des travaux que l'index interrogé référence, et qui citent volontiers d'autres travaux du même milieu.

(3) Un cas réel de sous-comptage que la requête ne voit pas, et qu'aucune heuristique de nommage ne colmate : une entrée dont l'URL canonique a changé n'est cherchée sur l'index que sous son ancienne adresse, et un travail citant la nouvelle est manqué. Il se lit sur la Requête exacte de chaque fiche.

(4) L'exclusion de l'auto-citation est une heuristique mécanique, non une lecture de qui est partie prenante : un travail est écarté si le login du propriétaire du dépôt figure dans un nom d'auteur ou une affiliation rendus par l'index ; un travail signé par la personne sous son nom, ou par l'équipe d'un dépôt personnel sous un autre nom, passe. Mesuré le 2026-09-05 puis le 2026-09-08 sur les 21 entrées, par des sondes de lecture seule : l'heuristique n'a écarté aucun travail ; une entrée porte deux travaux signés par son équipe que la règle laisse passer parmi dix-sept autres ; et chacune des neuf entrées attestées porte au moins un travail sans lien visible avec le propriétaire.

(5) Citer le dépôt en bibliographie seule échappe probablement à la recherche, et c'est une hypothèse, non une mesure : la requête porte sur un index plein texte dont la couverture des listes de références n'est ni garantie ni documentée par nous. Le sous-comptage qui en résulterait est invisible depuis nos résultats : on ne peut pas compter ce qu'on ne voit pas.

(6) Une entrée sans travail indexé ne peut pas croiser, et c'est une dépendance structurelle : le croisement se lit sur les travaux gardés, et le high est donc hors de portée d'une entrée que rien ne cite. Douze des vingt et une sont dans ce cas au 2026-09-08.

RubriqueContenu
RégimeMesuré
Faits lusattesting_works · attesting_works_count
Valeurs possiblesBas · Moyen · Haut · Non collecté
Influence le rangnon : il se publie, il ne classe pas

Traitement. Aucune branche, aucun seuil numérique : trois niveaux lus sur les travaux.

NiveauLibellé publié
Basaucun travail indexé ne cite l'entrée
Moyenau moins un travail indexé cite l'entrée
Hautun travail qui cite l'entrée en cite aussi une autre du classement

Le niveau se lit, il ne se compte pas. low quand le décompte vaut 0 ; high quand au moins un travail rapproche l'entrée d'une autre ; medium dans tous les autres cas. Aucun nombre n'est pesé, et le critère n'a donc aucun paramètre : il n'y a pas de frontière à déplacer, donc pas de calibrage à publier.

Une requête qui n'a pas répondu abstient, avec son motif. « Je n'ai pas pu regarder » n'est pas « j'ai regardé et n'ai rien vu », qui rend low : c'est l'invariant 4, et c'est la seule voie d'abstention du critère.

Les travaux se publient à côté du verdict, et leur type n'entre dans aucun niveau : il dit ce qu'on a trouvé, jamais ce que ça vaut.

Le critère 5 est peut-être une source déguisée en critère, et la question reste ouverte : ce qu'une évaluation tierce rapporte (ce qu'il a fallu changer pour adopter l'outil, ce qu'il en a coûté d'en sortir) n'est mesuré par aucune colonne de la grille. Ce qui tranchera n'est pas un raisonnement mais la première lecture réelle de ces travaux : en lire cinq et regarder ce qui en sort, de la notoriété ou des faits de coût.

Les listes fermées en vigueur

13 listes, sous 6 versions : agents-v4 · documentation-roots-v1 · membership-v1 · portable-v2 · signals-v5 · templates-v2. Elles gouvernent des signaux relevés, jamais des seuils, et elles sont publiées in extenso : une liste résumée par des points de suspension ne serait pas vérifiable.

Agents reconnus · agents-v4

Critère 4, première route : un marqueur présent au listage de la racine. La comparaison se fait sur la casse publiée : un marqueur est un nom de fichier que la convention fixe.

AgentMarqueurs portés
Claude CodeCLAUDE.md · .claude/ · .claude-plugin/
Cursor.cursor/ · .cursorrules · .cursor-plugin/
GitHub Copilot.github/copilot-instructions.md
Windsurf.windsurf/ · .windsurfrules
Cline.clinerules
Roo Code.roo/ · .roomodes
Aider.aider.conf.yml
Continue.continue/
Gemini CLIGEMINI.md · .gemini/ · gemini-extension.json
Codex CLI.codex/ · .codex-plugin/
Junie.junie/
Kiro.kiro/
OpenCode.opencode/ · opencode.json
Augment Code.augment/
Convention AGENTS.mdAGENTS.md

Noms d'agent reconnus · agents-v4

Critère 4, deuxième route : un agent nommé dans le README. Une forme est reconnue si elle apparaît dans le texte mis en minuscules, délimitée de part et d'autre par un caractère qui n'est ni une lettre, ni un chiffre, ni un tiret, ni un souligné. Un agent compte une fois, quel que soit le nombre de ses formes.

AgentFormes de nom
Claude Codeclaude code · claude-code
Cursorcursor
GitHub Copilotcopilot
Windsurfwindsurf
Clinecline
Roo Coderoo code · roocode · roo-code
Aideraider
Continuecontinue.dev · continue ide
Gemini CLIgemini cli · gemini-cli
Codex CLIcodex
Juniejunie
Kirokiro
OpenCodeopencode
Augment Codeaugment code · augmentcode · augment-code
Convention AGENTS.mdagents.md

Jetons d'invocation reconnus · agents-v4

Critère 4, troisième route : un agent désigné en position d'argument d'une ligne de commande du README. L'appariement est une égalité de chaînes sur des jetons déjà découpés. C'est la seule de ces listes dont une entrée puisse être vide, et le vide y est un refus déclaré, jamais un oubli : une convention de fichier ne s'invoque pas.

AgentJeton d'invocation
Claude Codeclaude
Cursorcursor
GitHub Copilotcopilot
Windsurfwindsurf
Clinecline
Roo Coderoo
Aideraider
Continuecontinue
Gemini CLIgemini
Codex CLIcodex
Juniejunie
Kirokiro
OpenCodeopencode
Augment Codeaugment
Convention AGENTS.md-

Répertoires de gabarits · templates-v2

Ordonnée, et un seul répertoire est retenu : le premier de cette liste qui figure à la racine. Deux candidats ne se cumulent pas : le signal dit ce que le projet livre comme gabarits, pas combien de répertoires y ressemblent.

templates/ · template/ · scaffolds/ · boilerplate/ · commands/ · skills/

Manifestes de dépendances · signals-v5

Critère 7 : le changement d'environnement exigé pour entrer, lu au listage de la racine. Des fichiers de racine, et rien d'autre : les fichiers de verrou accompagnent un manifeste déjà compté. Ce fait est publié et n'entre dans aucune branche.

package.json · pyproject.toml · requirements.txt · setup.py · go.mod · Cargo.toml · Gemfile · composer.json · pom.xml · build.gradle · Dockerfile · docker-compose.yml

Marqueurs d'installation · signals-v5

Critère 7 : ordonnée, et la première famille dont un marqueur apparaît gagne. L'ordre va du moins coûteux au plus coûteux pour l'adoptant. Un README qui n'en porte aucun donne une indisponibilité qualifiée, jamais la chaîne vide.

FamilleMarqueurs
package_manageruvx · uv tool install · pipx install · pip install · npm install · npx · yarn add · pnpm add · brew install · go install · cargo install · gem install
agent_plugin/plugin install · /plugin marketplace add · claude plugin
scriptinstall.sh · curl - · wget - · bash <( · | sh · | bash
binary.dmg · .exe · brew install --cask
containerdocker run · docker compose up · docker-compose up
manual_copygit clone · cp -r

Marqueurs de documentation de format · signals-v5

Critère 9 : la réversibilité documentée, cherchée d'abord par un nom de fichier à la racine. Le plus faible des signaux du critère : il fonde une appréciation, jamais une note.

FORMAT.md · SCHEMA.md · SPEC.md · SPECIFICATION.md

Titres de documentation de format · signals-v5

Critère 9 : les titres de section du README qui valent document de format, à défaut de fichier à la racine. Comparés en minuscules.

format des artefacts · artifact format · file format · output format

Fichiers de documentation ouverts · documentation-roots-v1

Critère 6 : les seuls formats ouverts, et c'est mesuré. Ce sont les deux formats Markdown, et pas les autres extensions de prose. L'analyseur ne reconnaît qu'un titre préfixé, et dans un fichier de configuration chaque ligne de commentaire en serait un. Au plus 45 fichiers ouverts par entrée, dans l'ordre du chemin, et un extrait publié est borné à 300 caractères. Le journal de version de la racine, changelog.md, est la cinquième pièce du gisement.

.md · .mdc

Formes de titre reconnues · signals-v5

Critère 6 : ce que le projet publie sur ses propres difficultés, reconnu sur un titre de section et jamais sur de la prose. Une famille compte une fois, quel que soit le nombre de ses formes reconnues et de pièces où elles apparaissent. Seules les limites explicites fondent le high.

FamilleFormes de titre reconnues
Limites explicitescaveat · caveats · limitation · limitations · known limitation · known limitations · non-goal · non-goals
Bugs connusknown issue · known issues · known bug · known bugs
Statut / maturitéexperimental · status · alpha · beta · work in progress · maturity · stability
Dépannagefaq · troubleshooting · frequently asked questions
Avertissementdisclaimer · warning · caution

Formats portables · portable-v2

Critère 9 : est portable ce dont la grammaire se lit hors de l'outil qui l'a produit. Les formats non portables sont déclarés, et non simplement absents : sans eux, un lecteur ne distinguerait pas jugé non portable de jamais vu, et la chaîne ne pourrait pas refuser une extension inconnue, ce qu'elle fait, plutôt que de deviner.

JugementExtensions
portableallowlist · backup · bak · c · cjs · coverage · csv · cts · d2 · diff · dot · example · feature · go · gtmpl · html · j2 · js · json · jsonl · log · md · mjs · mmd · mustache · pdf · pl · png · ps1 · py · rs · sh · svg · template · tmpl · toml · ts · tsv · txt · typed · yaml · yml
non portabledag · dog · hook · mdc

Extensions de prose retenues · signals-v5

Critère 8 : un fichier est pesé si et seulement si son extension figure ici. Cette liste décide donc du poids publié de chaque outil, et elle est fermée, publiée et gelée avant d'être appliquée. La seconde ligne nomme un régime de chargement, jamais un contenu : ce sont les fichiers qu'un assistant lit à l'ouverture, et leur somme est le second total du critère.

Ce qui est comptéValeurs
extensions pesées.dog · .gtmpl · .j2 · .md · .mdc · .mustache · .template · .tmpl · .txt · .yaml · .yml
toujours chargéCLAUDE.md · AGENTS.md · GEMINI.md · .cursorrules · .windsurfrules · .clinerules · copilot-instructions.md · AGENT.md · QWEN.md

Termes d'appartenance reconnus · membership-v1

Le signal d'appartenance : pour chacune des deux conditions d'entrée lisibles sur un dépôt, désignée par l'identifiant que déclare corpus.md, le listage de la racine se lit d'abord, puis le README, et le premier terme déclaré qui répond l'emporte. Un nom du listage se compare sur la casse publiée ; une forme du README se reconnaît dans le texte mis en minuscules, délimitée comme un nom d'agent. Le signal est un fait, jamais un verdict : il ne décide d'aucun rang d'entrée, et n'admet personne.

ConditionTermes, dans l'ordre d'essai
realizationREADME : implement · implementation
specification_inputlistage : specs · spec · .specify, puis README : spec-driven · specification · specifications · specs · spec · prd

Provenancemanual éditorial
Établie le2026-09-10
Version de méthodemethod-ranking-v1

Cet en-tête vient de la déclaration que la chaîne lit : cette page publie la grille telle qu'elle est appliquée, et aucune prose ne la double.

Le corpus et les sources

Ce qui peut entrer au corpus

Un projet entre au corpus s'il remplit chaque condition de cette table, ou l'exception qui la remplace sur sa ligne. Ces conditions s'appliquent depuis le 2026-09-29.

ConditionCe qu'elle exigeException admiseCe que l'exception admet
étape de réalisationune étape nommée, commande, skill, prompt ou boucle, où l'agent écrit le code à partir de ce qui a été décidé avant luiaucuneaucune
dépôt lisibleun dépôt public qui porte ce que le projet livre, instructions, gabarits ou code, lisible sans compte ni contratartefacts et documentationun dépôt qui ne porte pas le produit, admis sur les artefacts et la documentation qu'il publie
spécification prise en entréeune spécification écrite, à énoncé vérifiable, que l'étape de réalisation consommeauto-description SDDun Plan-first, dont le code suit un plan sans spécification à énoncé vérifiable, quand son dépôt se décrit lui-même spec-driven

Le critère d'inclusion est mécanique. Il porte sur la nature d'un projet et sur ce qu'on peut en lire, jamais sur sa qualité : trier « les projets sérieux » avant de les instruire reviendrait à juger sans grille, puis à présenter le résultat comme si la grille l'avait produit.

L'identité d'un projet est l'URL canonique de son dépôt, jamais son nom : un projet renommé garde son dépôt, un fork en a un autre. Chaque condition cite ce qui l'établit : un chemin du dépôt ou un extrait de ce qu'il publie, qu'un lecteur peut aller relire lui-même. Tout ce que ce site publie repose sur des faits revérifiables, et l'entrée au corpus n'y fait pas exception.

Ce qui en est écarté, et pourquoi

Une exclusion sans motif n'oppose rien à personne. Chacune porte le sien, et chacune dit aussi ce que ce motif n'est pas.

ÉcartéMotifCe que ce motif n'est pas
Les offres ferméesNi dépôt lisible, ni l'exception artefacts et documentation : sans rien de public à relire, nous ne pourrions renseigner leurs critères qu'en croyant leur documentation commerciale sur paroleUn jugement sur leur qualité. Plusieurs sont probablement bonnes ; nous n'avons aucun moyen honnête de le dire
Les recueils d'instructions isolésPas d'étape de réalisation : rien n'y fait écrire le code à partir de ce qui a été décidé avantUn dédain pour leur utilité pratique
Les extensions d'éditeur sans méthodePas de spécification prise en entrée : l'assistance à la frappe ne consomme rien qui ait été spécifiéUne frontière étanche : un projet qui se dote d'une étape de réalisation sur une spécification prise en entrée devient éligible

Un cas limite est listé et signalé comme tel, jamais tranché en silence. Si nous hésitons à faire entrer un projet, le lecteur a le droit de le savoir et de trancher autrement.

Ce qui a le droit de fonder un fait

Toutes les sources ne servent pas à la même chose, et une même adresse peut jouer plusieurs rôles : la liste curée du domaine SRC-002 est un canal de découverte et une publication tierce. Chaque fait publié cite la nature sous laquelle sa source a été employée. Sans cette distinction, un projet cité dans un comparatif deviendrait une preuve de sa propre qualité.

La liste des natures est close : une valeur hors de cette liste fait échouer la lecture du registre. Chaque nature énonce ce qu'elle autorise et ce qu'elle n'autorise pas : une nature qui n'énonce que la première moitié est un mot sans contrat, et c'est la moitié qu'on oublie parce qu'elle est celle qui gêne.

Le registre ci-dessous est en croissance : une source s'ajoute par décision datée et motivée, et aucune ne disparaît. Effacer une ligne effacerait la trace d'un choix.

Ce que ce registre ne dit pas

Il ne classe pas les sources, et il ne dit pas laquelle est la meilleure. Il dit ce que chacune a le droit de fonder, et ce qu'elle ne peut pas fonder seule.

Les candidats au corpus

13 candidats au corpus : repérés et pas encore tranchés, chacun attend le jugement qui l'admettra ou l'écartera. 8 remplissent la règle d'inclusion, qui demande au signal d'établir les deux conditions lisibles sur un dépôt : étape de réalisation et spécification prise en entrée. Ils portent le rang qu'ils auraient une fois admis, qui n'est compté nulle part ailleurs.

CandidatURL canoniqueCanalRepéré leRang si admis
MetaSpecgithub.com/acnlabs/MetaSpecseed2026-09-16C, relevé du 2026-09-30
quint-codegithub.com/m0n0x41d/quint-codeseed2026-09-16sans rang : étape de réalisation non établie, relevé du 2026-09-30
coligngithub.com/colign/colignseed2026-09-16C, relevé du 2026-09-30
Cosmosmithgithub.com/devnomad-byte/cosmosmithseed2026-09-16C, relevé du 2026-09-30
pi-sdd-kitgithub.com/felipefontoura/pi-sdd-kitseed2026-09-16C, relevé du 2026-09-30
vibe-kanbangithub.com/BloopAI/vibe-kanbanseed2026-09-16sans rang : spécification prise en entrée non établie, relevé du 2026-09-30
Plansgithub.com/yrangana/Plansseed2026-09-16C, relevé du 2026-09-30
VibeDocgithub.com/JasonRobertDestiny/VibeDocseed2026-09-16C, relevé du 2026-09-30
spec-kit-command-cursorgithub.com/madebyaris/spec-kit-command-cursorseed2026-09-16C, relevé du 2026-09-30
mcp-server-spec-driven-developmentgithub.com/formulahendry/mcp-server-spec-driven-developmentseed2026-09-16C, relevé du 2026-09-30
Tesslgithub.com/tesslio/cliseed2026-09-16sans rang : étape de réalisation non établie, relevé du 2026-09-30
agents.mdgithub.com/agentsmd/agents.mdseed2026-09-16sans rang : étape de réalisation et spécification prise en entrée non établies, relevé du 2026-09-30
FPFgithub.com/ailev/FPFseed2026-09-16sans rang : étape de réalisation non établie, relevé du 2026-09-30

Premier relevé des candidats, le 2026-09-30 : aucun rang à comparer.

Table calculée, auto_collected calculé. Lecture datée du 2026-09-16 ; relevé des candidats du 2026-09-30.

Le registre des sources

18 sources inscrites. Chacune porte la date de son entrée et le motif de son admission.

IdSourceNatureStatutAlimentePérimètreLuEntrée leMotif
SRC-001API REST GitHub, api.github.comfact_sourcein_serviceAxe 1, critères 1, 2, 3 · les faits d'arborescence du critère 4--2026-08-02Reproductible et datable : n'importe qui peut refaire l'appel et obtenir la même chose. Limites connues : voir classement.md § 7. Les critères 6, 7 et 9 quittent la colonne Alimente le 2026-09-24, jour où ils sortent de la grille : la source n'a rien perdu, ce sont les lecteurs qui ont disparu, et une colonne qui les nommerait encore déclarerait un emploi sans objet. Sa nature ne bouge pas : elle sert toujours trois critères et l'arborescence du quatrième
SRC-002engineering4ai/awesome-spec-driven-developmentdiscovery_channel · third_party_publicationin_serviceAxe 1, corpus--2026-08-02Énumération tenue par des tiers, indépendante de nos préférences. Seul canal dont le contenu est déjà une liste, donc directement comparable au corpus. fact_source retirée le 2026-09-08, et la ligne demeure avec son motif (règle 2) : c'est une awesome-list, elle énumère sans comparer, et le critère 3 n'atteste la forme comparatif que sur une source qui porte une comparaison : une page de critères ou un verdict par outil, dont le registre déclare l'adresse et la clé d'appariement. Elle portait dix-huit des dix-huit attestations de la forme, sur un listage : le canal Listes curées de la méthode promu en source de fait. Sa nature de canal de découverte reste entière, et c'est celle sous laquelle elle a toujours été juste. Elle n'est plus interrogée par aucune campagne : le nombre d'entrées qu'elle nomme (18, recompté le 2026-09-08) est désormais descriptif. fact_source avait été ajoutée le 2026-09-04 pour lever un écart entre sa colonne Alimente et ses natures ; la mesure établit que l'écart était dans la colonne
SRC-003cameronsjo/spec-comparediscovery_channel · third_party_publicationin_serviceAxe 1, corpus--2026-08-02Désigne les projets qu'un tiers a jugés comparables entre eux, un signal sur le périmètre autant que sur les entrées. fact_source retirée le 2026-09-24, et la ligne demeure avec son motif (règle 2) : le critère 3 cesse de compter des formes d'évaluation tierce pour lire les travaux indexés qui citent l'entrée, et le comparatif inscrit sort avec les deux autres formes. Ce que cette source établissait, à savoir qu'un tiers nomme et compare plusieurs outils, n'est plus lu par aucun critère : sa page de comparaison, sa clé d'appariement url et les 7 entrées du corpus qu'elle nommait cessent d'alimenter un verdict. Ses natures de canal de découverte et de publication tierce restent entières, et c'est sous celles-là qu'elle a toujours été juste. fact_source avait été ajoutée le 2026-09-04 pour lever un écart entre sa colonne Alimente et ses natures ; elle part avec la forme qui la justifiait, non sur un défaut de la source
SRC-004torvalds/linuxcontrolwithdrawnToute campagne de relevé sur SRC-001, jusqu'au 2026-08-06--2026-08-02Dépôt au comportement connu, plusieurs commits par jour. Un silence y est impossible : il révèle une défaillance de la source, pas un fait. Retirée le 2026-08-06 : D-066 acte le changement de témoin (linux puis cpython), et le témoin en service est désormais SRC-017. Elle reste inscrite et citable au passé : le journal d'incidents du 2026-08-02 établit par elle le retard de 47 jours de SRC-001, et effacer sa ligne effacerait la trace d'un choix (règle 2)
SRC-005Liste-semence de 23 entrées, fournie par Jean-Lucdiscovery_channelin_serviceAxe 1, corpus--2026-08-02Point de départ empirique, déclaré comme tel. N'attribue aucun rang : voir classement.md § 4
SRC-006Brouillon de page « Aide au choix » antérieur au projet, conservé en archive hors dépôtinspirationin_serviceAxe 1, structure de la page d'aide au choix--2026-08-02Fournit un plan éprouvé : propriétés, cas d'usage, questions qui décident, sortie « aucun ». Aucun fait, chiffre ou énoncé n'en est repris : voir aide-au-choix.md § 6
SRC-007METR, Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity, 2025-07-10 · arXiv 2507.09089published_method_measurein_serviceAide au choix, énoncés de contexteEssai randomisé. 16 développeurs open-source expérimentés, 246 tâches sur leurs propres dépôts (22 000+ étoiles, 1 M+ lignes en moyenne), auxquels ils contribuent depuis des années. Faits de février à juin 2025. Outils : Cursor Pro, Claude 3.5/3.7 Sonnet. Rémunérés 150 $/hprimary2026-08-02Essai randomisé au protocole publié : la mesure est décrite assez précisément pour être discutée, ce qui est rare sur ce sujet. Ses auteurs ont eux-mêmes apposé un bandeau « These results are out of date », et elle n'est jamais citée sans lui : c'est avec SRC-008 le cas d'école de la règle 4 du protocole de synthèse.
SRC-008METR, We are Changing our Developer Productivity Experiment Design, 2026-02-24published_method_measurein_serviceAide au choix, énoncés de contexteSeconde expérience, démarrée août 2025. 57 développeurs (10 de l'étude initiale, 47 nouveaux), 143 dépôts, 800+ tâches, médiane 10 ans d'expérience. Rémunérés 50 $/h. Déclarée non fiable par ses auteursprimary2026-08-02Publiée par METR contre sa propre mesure antérieure : c'est la seconde moitié du couple SRC-007/SRC-008, et la raison pour laquelle la première n'est jamais citée seule. Le fait que ses auteurs la déclarent non fiable est écrit à chaque emploi, et fait partie de ce qui est cité
SRC-009DORA / Google Cloud, State of AI-assisted Software Development 2025published_method_surveyin_serviceAide au choix, énoncés de contexteEnquête sectorielle mondiale auprès de professionnels de la technologie. Le site publie ses errata, signe de méthode. Primaire pour la thèse centrale seule ; les chiffres de détail sont derrière un formulaire et ne sont pas luspartial2026-08-02Enquête de terrain à méthode publiée, et le site publie ses errata, ce que peu de sources de ce format font. Retenue pour sa thèse centrale, lue à la source ; les chiffres de détail ne sont pas repris, faute d'accès au rapport
SRC-010Stanford, programme de recherche sur la productivité en génie logiciel, ~100 000 développeurs, 600+ entreprisespublished_method_measurein_serviceAide au choix, énoncés de contexteComparaison des gains selon projet neuf / base existante et selon la complexité des tâches. Chiffres lus dans des reprises, pas dans la publication primairesecond_hand2026-08-02Inscrite pour que sa distance à nous soit visible plutôt que déduite d'un silence : ses chiffres nous parviennent par la chaîne SRC-013 → SRC-012 → SRC-010, à trois niveaux de la source. Dette déclarée : aucun chiffre n'en est repris, seulement signalé comme existant
SRC-011DORA / Google Cloud, 2025 AI Capabilities Model, v. 2025.1, CC BY-NC-SA 4.0published_method_surveyin_serviceAide au choix § « ce qui compte plus que le choix de l'outil »Plus de 100 heures de données qualitatives et réponses de près de 5 000 professionnels de la technologie dans le monde, 2025. Établit sept capacités qui amplifient l'effet de l'adoption de l'IA sur des résultats nommés. Primaire, partiel. Lus : résumé, chapitre « AI is an amplifier », figure du modèle, liste et définition des résultats, chapitre « AI-accessible internal data » ; non lus : cinq des sept chapitres de capacité et toute la partie priorisationpartial2026-08-02Seule source de cette ampleur sur les capacités qui amplifient l'effet de l'adoption. Employée faute d'équivalent, et son défaut d'indépendance est écrit dans le corps du texte, pas en note : DORA est un programme de Google Cloud, et les partenaires de recherche annoncés du rapport 2025 incluent GitHub et GitLab. À son crédit, elle publie ses errata. Plusieurs de ses résultats sont auto-évalués, ce qui se rappelle à chaque emploi
SRC-012DORA / Google Cloud, ROI of AI-assisted Software Development, version 2026.01. Auteurs : équipe DORA et delta innovation practice de Google Cloudpublished_method_modelin_serviceAide au choix, études de ROICadre de calcul, non une mesure. Chaîne de valeur : adoption → sept capacités → métriques de livraison → résultats non financiers → résultats financiers. ROI = (valeur − investissement) / investissement. Chiffres illustratifs sur une organisation supposée de 500 personnes. Publie ses errata et un calculateur. Rapport derrière formulaire, connu via SRC-013 ; page de présentation lue à la sourcesecond_hand2026-08-02Cadre de calcul publié, et non une mesure, inscrit comme modèle pour que la distinction soit opposable plutôt que rappelée en note. Publié par Google Cloud, qui vend des services d'IA : son chiffre de rendement portant sur les produits de Google Cloud eux-mêmes est une déclaration d'éditeur sur son propre produit, citée comme telle et jamais fondue dans les résultats du cadre. Dette déclarée : rapport derrière formulaire
SRC-013InfoQ, New DORA Report Claims Strong Engineering Foundations Drive AI Return on Investment, Matt Saunders, 2026-05-11third_party_publicationin_serviceAide au choix, études de ROICompte rendu détaillé de SRC-012, avec citations directes du rapport. Publication à comité éditorial, sans lien commercial connu avec l'objetprimary2026-08-02Seul accès lu à la source au contenu de SRC-012, dont le rapport est derrière formulaire. Publication à comité éditorial, sans lien commercial connu avec l'objet : c'est ce qui la sépare d'une reprise promotionnelle, et la condition à laquelle elle est inscrite. Elle rapporte SRC-012, elle ne le remplace pas
SRC-014Jegham, Abdelatti, Koh, Elmoubarki, Hendawi, How Hungry is AI? Benchmarking Energy, Water, and Carbon Footprint of LLM Inference, arXiv:2505.09598, v6 du 2025-11-24, CC BY 4.0published_method_measure_inferred_inputsin_serviceAxe 3, énoncés de contexte30 modèles en centres de données commerciaux. Combine des performances d'API publiques, des multiplicateurs environnementaux par entreprise et une inférence statistique des configurations matérielles. Unité : la requête, distinguée courte / longue. Primaire, résumé seul, texte intégral non lupartial2026-08-02La seule façon d'estimer la consommation de services fermés : les configurations matérielles des centres de données commerciaux ne sont pas publiques, et la source les infère statistiquement : la précision apparente de ses résultats repose sur une reconstitution, ce qui est répété à chaque emploi. Révisée six fois entre mai et novembre 2025 : signe de sérieux, et rappel que tout chiffre de ce domaine est provisoire
SRC-015Singh, Nan, Wang, D'Souza, Kapoor, Üstün, Koyejo, Deng, Longpre, Smith, Ermis, Fadaee, Hooker, The Leaderboard Illusion, arXiv:2504.20879, v2 du 2025-05-12, CC BY-SA 4.0published_method_measurein_serviceAxe 3, énoncés de contexteAnalyse d'une plateforme publique de comparaison de modèles : pratiques d'évaluation privée non déclarées, divulgation sélective des scores, asymétries d'accès aux données. 68 pages. Primaire, résumé seul, texte intégral non lupartial2026-08-02Travail au protocole publié qui borne ce qu'un classement public de modèles établit : évaluation privée non déclarée, divulgation sélective, asymétries d'accès. Inscrite pour que cette limite soit disponible partout où l'axe 3 rencontre un classement public. Résumé lu à la source ; les 68 pages ne sont pas lues
SRC-016Littérature sur la contamination des jeux d'évaluation, bibliographie curée lyy1994/awesome-data-contaminationdiscovery_channelin_serviceAxe 3, corpus de lectureRecensement de travaux sur la contamination des données d'évaluation. Non lue, repérée seulementnot_read2026-08-02Bibliographie curée tenue par un tiers, inscrite pour que son existence soit datée plutôt que déduite d'un silence : la contamination des jeux d'évaluation est un sujet ouvert de l'axe 3, et le canal qui y mène est nommé avant d'être exploité (règle 1). Aucun chiffre n'en est repris
SRC-017python/cpythoncontrolin_serviceToute campagne de relevé sur SRC-001--2026-08-06Même profil que le témoin d'origine : un dépôt qui reçoit des dizaines de commits par jour, où un silence d'un mois n'existe pas : il révèle une défaillance de la source, pas un fait. Entrée datée du 2026-08-06, jour des campagnes qui l'ont interrogé et de D-066, qui acte le changement de témoin. Elle est écrite le 2026-08-25 : c'est la dette de registre que sources-v4 solde, et le motif pour lequel la chaîne nomme désormais les sources qu'elle emploie
SRC-018OpenAlex, API ouverte, api.openalex.orgfact_sourcein_serviceCritère 5--2026-09-04Index bibliographique ouvert, interrogeable sans clé ni compte : l'adresse de rejeu est publique, et un lecteur sans accès privilégié refait le compte (SC-013). L'interrogation se fait par URL de dépôt uniquement (FR-007) : la recherche par nom d'outil a été mesurée inutilisable le 2026-09-02 (SPEC Kit : 1 255 résultats, zéro pertinent) et n'est pas réparable par un filtre. Ligne neuve sous une nature existante : elle ne bumpe pas à elle seule : c'est la règle que D-173 a déjà appliquée au critère 6, et le bump de sources-v5 vient de la nature ajoutée aux deux comparatifs. La mention de la forme quitte la colonne Alimente le 2026-09-24 : les trois formes sont sorties du critère 3, qui lit désormais les travaux eux-mêmes. C'est la même source, interrogée de la même façon, sous la même nature ; ce qui disparaît est le nom d'une forme, pas un emploi

Ce qui a été écarté du corpus

25 entrées admises, 10 écartées. Une exclusion sans motif n'oppose rien à personne : chacune porte le sien.

EntréeMotif de l'exclusionÉcarté leAuteur
productskillscollection de 16 skills indépendants, chacun encodant un cadre distinct de gestion de produit : aucune étape de réalisation, la collection s'arrête au PRD, à la feuille de route et au plan de lancement, et aucun skill ne fait écrire le code2026-08-05l'Éditeur
aidd-pmmodule de l'entrée AIDD Framework, pas un dépôt autonome : sans URL propre, il n'a pas d'identité distincte2026-08-05l'Éditeur
Agent OSaucune étape de réalisation : shape-spec produit un plan exécuté par le mode plan de l'agent hôte, et la v3.0 délègue l'orchestration de l'implémentation aux agents (dernier commit du 2026-08-29)2026-09-29l'Analyste
TaskmasterPlan-first sans auto-description SDD : étape de réalisation présente (task-master start, autopilot, agent task-executor), mais le PRD consommé n'a pas d'énoncé vérifiable et le README se décrit en « task management » (v0.43.1)2026-09-29l'Analyste
dotdogaucune étape de réalisation : linter et compilateur de spécifications (v0.9.0)2026-09-29l'Analyste
MetaGPTPlan-first sans auto-description SDD : pipeline de rôles jusqu'au code, mais le PRD généré (user stories, exigences priorisées) n'a pas d'énoncé vérifiable et le README se décrit en « multi-agent framework » (v1.0.0)2026-09-29l'Analyste
adversarial-specaucune étape de réalisation : rédacteur de spécifications par débat entre modèles (v1.0.0)2026-09-29l'Analyste
beadsPlan-first sans auto-description SDD : agent task-agent qui prend et termine les tâches prêtes, mais tracker d'issues sans spécification, README « issue tracker » (dernier commit du 2026-09-28)2026-09-29l'Analyste
Backlog.mdaucune étape de réalisation : l'agent fourni gère les tâches sans écrire de code (1.53.0)2026-09-29l'Analyste
ai-dev-tasksaucune étape de réalisation : gabarits de PRD et de liste de tâches, exécution laissée à l'utilisateur (dernier commit du 2025-11-05)2026-09-29l'Analyste

Table calculée, auto_collected calculé. Lecture datée du 2026-09-30.


Provenancemanual éditorial
Établie le2026-09-30
Version de méthodemethod-ranking-v1

Cet en-tête est saisi à la main, et il ne répond que de la part rédigée de cette page. Les blocs calculés qui suivent portent leurs propres dates, et ce sont elles qui font foi sur ce qu'ils publient.