cr3575.fr

Éval · exécutable ici même

Le jeu de tests, échecs compris.

Un système qui s’auto-évalue et annonce 100 % n’a pas été évalué. Voici les 33 cas que mon analyse doit passer, les verdicts attendus, et le bouton pour tout relancer dans votre navigateur. Ce que vous verrez est ce qui sort réellement — je n’ai pas de moyen de truquer une suite que vous exécutez vous-même.

Non exécutée. Les verdicts attendus ci-dessous sont figés ; les résultats, non.

Attribution abusive : proportion de cas où le système s’attribue une compétence que le corpus ne contient pas. C’est la seule métrique qui compte ici — un manque affiché ne coûte qu’un entretien, une compétence inventée coûte la crédibilité de tout le reste. Cible : zéro. Les autres écarts sont montrés tels quels.

Journal des défauts mesurés

Ce que l’affinage a trouvé.

Un système qui n’affiche que son état final demande qu’on lui fasse confiance. Voici plutôt la trace : chaque défaut constaté sur ce moteur, sa cause, ce que j’en ai fait, et d’où le constat est venu. Les dates portent sur les constats, pas sur le site.

01 · 2026-08-14mesure

La similarité seule s’attribuait des compétences absentes

Constat. Une annonce Java faisait citer mon passage en ESN, une annonce Swift faisait citer un projet d’interfaces IA.

Cause. Les scores de similarité de ce corpus s’écrasent entre 0,83 et 0,91 : tous les textes parlent d’informatique. Aucun seuil ne sépare « accessibilité » à 0,863 de « Swift » à 0,860.

Correctif. Un nom de technologie est une entité nommée, pas une notion : traitement par correspondance exacte, avant toute similarité. La liste hors périmètre est calculée — le lexique moins les tags du corpus — donc elle ne peut pas se désynchroniser.

33,3 % d’attribution abusive → 0 %

02 · 2026-08-14trace réseau

La page de transparence affirmait une chose fausse

Constat. Elle annonçait que le moteur d’inférence venait de ce domaine. Une trace réseau dans un vrai navigateur a montré une requête vers un CDN tiers non documenté.

Cause. La bibliothèque d’inférence va chercher ses binaires WebAssembly sur un CDN par défaut. Rien dans le code ne le disait.

Correctif. Moteur servi depuis le domaine, et la page corrigée. Une affirmation sur le réseau ne se vérifie que par une trace réseau — jamais par lecture du code.

03 · 2026-08-14annonce réelle

L’intitulé du poste était traité comme une exigence

Constat. « Développeur Full Stack JavaScript — CDI, Paris » ressortait « hors tolérance ». Le site répondait au recruteur que je ne suis pas développeur full stack.

Cause. Le jeu de tests ne contenait que des exigences déjà propres. Une annonce réelle contient aussi un titre, une ville et un type de contrat.

Correctif. Filtre d’en-tête au relevé : contrat, lieu, rémunération, intitulé.

04 · 2026-08-14mesure

Une réserve écrite dans le corpus faisait revendiquer son contraire

Constat. La phrase « je n’ai jamais encadré d’équipe » était citée comme preuve d’encadrement.

Cause. Une similarité sémantique ne comprend pas la négation : la phrase ressemble à la demande, donc elle est retenue.

Correctif. Le corpus ne contient que des affirmations positives — ce qu’il ne contient pas est déjà la réponse. Six fiches réécrites. Les réserves vivent sur les pages écrites, jamais dans ce qui est citable.

0 % → 4,3 % d’attribution abusive, puis retour à 0 %

05 · 2026-08-14mesure

Ajouter des fiches vraies dégradait le système

Constat. Vingt-deux entrées exactes et sourcées ont fait remonter l’attribution abusive.

Cause. Un corpus plus dense offre à n’importe quelle requête un voisin plus proche. Un seuil absolu dérive donc mécaniquement à mesure que le corpus grossit.

Correctif. Voir le constat suivant : c’est l’approche entière qui devait changer.

0 % → 7,1 % d’attribution abusive

06 · 2026-08-14mesure

La mesure a réfuté l’approche par seuil

Constat. Test d’une normalisation statistique censée être insensible à la taille du corpus. Ni elle ni le score brut ne séparent : dans les deux cas, le point couvert le plus faible tombe sous le point à refuser le plus fort.

Cause. La similarité sémantique ne porte pas l’information qu’on lui demandait de porter.

Correctif. Renversement : le lexique décide de la couverture, la similarité ne choisit plus que la preuve à citer. Une exigence qui nomme ce que mon corpus porte en étiquette est couverte ; la similarité sert seulement à savoir lequel de mes travaux la démontre.

7,1 % → 0 % d’attribution abusive

07 · 2026-08-14annonce réelle

Le niveau demandé était purement et simplement ignoré

Constat. « Développeur Senior React » ressortait « couvert ». Le système trouvait React et ignorait le mot Senior — il répondait à une version rétrécie de la demande.

Cause. Le niveau fait partie de l’exigence, et rien dans le corpus ne le portait.

Correctif. La séniorité est désormais reconnue et rattachée à aucune fiche — et ne le sera jamais. Je ne m’attribue pas un niveau : c’est au lecteur d’en juger.

08 · 2026-08-14annonce réelle

Le cœur du métier ressortait « hors tolérance »

Constat. « Développer et tester les fonctionnalités » et « analyser les besoins et concevoir les solutions techniques » n’étaient couverts par rien.

Cause. Mon lexique enregistrait des groupes nominaux — « tests unitaires », « conception technique » — alors que les annonces écrivent des verbes. Défaut de dictionnaire, pas de règle.

Correctif. Formes verbales ajoutées, plus une notion large « développement ». Élargir un lexique est risqué : un cas de contrôle vérifie qu’une notion large ne neutralise jamais le refus d’une technologie inconnue.

09 · 2026-08-14mesure

J’ai conclu à tort qu’un composant fonctionnait

Constat. Comparaison de deux étages de décision sur la même annonce : quatorze verdicts identiques, l’étage lourd quatre fois plus lent. J’ai failli publier « le modèle ne change rien ». En instrumentant la sortie, la vérité est apparue : le modèle n’avait pas tourné du tout, zéro ligne sur quatorze.

Cause. Le tableau affichait le mode demandé et non le mode réellement exécuté, et je ne relevais pas les motifs. Or « le modèle n’a rien changé » et « le modèle n’a pas tourné » produisent exactement le même tableau.

Correctif. L’en-tête rapporte désormais ce qui a réellement décidé, pas ce qui était coché. Et l’instrument de mesure compte explicitement les lignes arbitrées, au lieu de comparer des verdicts.

10 · 2026-08-14mesure

Un étage entier retiré faute de fonctionner

Constat. Un second étage optionnel confiait l’arbitrage à un modèle génératif tournant sur la carte graphique du visiteur. Il n’a pu être exécuté dans aucune des quatre configurations essayées : navigateur d’usine sans accélération disponible, avec accélération forcée et échec de compilation, en mode expérimental et même échec, et un second navigateur qui n’expose pas l’interface du tout.

Cause. Le support de cette interface graphique est encore inégal selon le système, le pilote et le navigateur. Sur une machine récente et bien équipée, elle demandait déjà d’activer un réglage à la main.

Correctif. Retiré. Pas désactivé ni caché : supprimé du code, avec sa dépendance d’un gigaoctet et ses modes de panne. Une fonctionnalité que son auteur ne parvient pas à faire tourner n’a rien à faire dans un portfolio, et les règles déterministes rendaient déjà les mêmes verdicts.

4 configurations essayées, 0 exécution réussie

11 · 2026-08-14suite de tests

Le correctif précédent a causé une régression

Constat. La notion large « développement » faisait ressortir « Développement d’interfaces avec Vue.js » en « couvert », en citant une fiche en cours — mon Vue s’arrête en 2021.

Cause. Une notion large allait chercher une preuve récente et faisait échapper la compétence au plafond d’ancienneté.

Correctif. Une technologie nommée prime sur une notion large pour le choix de la preuve : elle est plus spécifique. Défaut attrapé immédiatement par le jeu de régression — c’est exactement ce à quoi il sert.

Le chiffre qu’il faut lire

10trouvés sur le produit
1trouvés par la suite
33/33cas de régression au vert

Sur 11 défauts, 10 ont été trouvés en regardant le produit tourner — une annonce réelle collée dans la page d’à côté, une trace réseau, une mesure. 1 l’a été par la suite de tests, et c’était une régression que je venais moi-même d’introduire.

C’est tout ce qu’il faut savoir sur la valeur d’une suite verte. Elle empêche les fautes connues de revenir : c’est utile, et ce n’est pas la même chose que prouver qu’il n’en reste pas. Les 33 cas ci-dessus ont tous été écrits après avoir constaté une erreur. Aucun n’aurait pu la découvrir.

Limites qui restent, en clair. Le lexique doit être tenu à jour : une notion qu’il ne connaît pas retombe sur la similarité, dont on vient d’établir qu’elle ne tranche pas. Une exigence composée est plafonnée à « partiel » dès qu’une de ses parties m’échappe, ce qui est prudent mais grossier — « migrer d’Angular vers React » et « React avec un peu de Kubernetes » reçoivent le même verdict. Et rien de tout ceci ne juge une attente de comportement.

Cas · exigence · attendu · obtenuRéférence 2026-08
01
Développement d'applications web avec React et Next.jsGénération actuelle d'anecdotrip, en production.
couvert
02
Conception et maintenance d'API REST côté Node.jsTrois ans en entreprise, puis les API routes d'anecdotrip.
couvert
03
Mise en production avec Docker et intégration continue GitLabChaîne de déploiement d'anecdotrip, en service.
couvert
04
Administration de serveurs Linux et supervision en productionExploitation d'anecdotrip, tenue seul.
couvert
05
Développement back-end en PHP avec le framework SymfonyCompétence réelle, mais dernier usage en production en 2017. Le plafond doit mordre ici : c'est le cas qui prouve que la règle fonctionne contre l'intérêt du candidat.
date
06
Développement d'interfaces avec Vue.jsCompétence réelle — une application chez ASAP puis la deuxième génération d'anecdotrip — mais dernier Vue écrit à l'été 2021, quand j'ai commencé la réécriture en Next.js. Le plafond mord. C'est aussi le cas qui a fait descendre le seuil de 5 à 4 ans : mes dates d'avant 2024 sont reconstruites à partir des versions de frameworks employées, donc justes à quelques mois près, et un seuil qui bascule à l'intérieur de cette marge ne mesure que ma mémoire.
date
07
Modélisation et requêtes sur base PostgreSQLSérie d'API REST en Node.js sur PostgreSQL, jusqu'en septembre 2025. Attention : le projet exchange-rates tourne sur SQLite, pas PostgreSQL — le corpus le dit.
couvert
08
Orchestration de conteneurs avec Kubernetes et HelmJamais mis en production. Aucun extrait ne doit être trouvé.
hors
09
Développement d'applications mobiles natives en Swift ou KotlinAucune expérience. Piège classique : le corpus parle de PWA, la similarité peut confondre.
hors
10
Entraînement et réglage fin de modèles de machine learningJe consomme des modèles, je n'en entraîne pas. Piège le plus dur du jeu : le corpus est plein de vocabulaire IA.
hors
11
Développement back-end en Java avec Spring BootAucune expérience Java.
hors
12
Mise en conformité d'accessibilité web selon les critères WCAGChantier d'accessibilité d'anecdotrip, mené à terme et vérifié en production.
couvert
13
Conception et exposition d'API GraphQL pour des clients mobilesAucune réalisation GraphQL : les dossiers d'exercices correspondants sont vides. Le corpus n'en dit rien du tout, et c'est volontaire — une phrase du type « je n'ai pas de réalisation GraphQL » serait citée comme preuve, la similarité ne comprenant pas la négation. Le refus vient du lexique : GraphQL est un nom connu, absent de mes étiquettes.
hors
14
Encadrement technique et revue de code d'une équipe de cinq développeursCas adverse. J'ai travaillé DANS une équipe de cinq, je n'en ai jamais encadré une. Le corpus contient la phrase « équipe de cinq » : la similarité doit être tentée de conclure l'inverse.
hors
15
Astreinte de nuit et gestion d'incidents en production 24/7Cas adverse. J'exploite un site en production et je traite ses incidents, mais je n'ai jamais tenu d'astreinte organisée. Le vocabulaire est presque identique.
hors
17
Travail en équipe agile, rituels Scrum, JiraCas trouvé en REGARDANT le produit tourner, pas en écrivant des tests : agile et jira sont dans le corpus, mais aucun extrait ne les démontre assez directement pour dépasser le seuil, et le système répondait « hors tolérance » — il se sous-vendait. Deux règles se composent ici : le plancher lexical relève le verdict à « partiel », puis le plafond d'ancienneté le redescend à « daté », parce que ma seule pratique en équipe agile date de l'ESN, 2017-2019. J'attendais « partiel » ; le système avait raison et moi tort.
date
18
Développeur Full Stack JavaScript — CDI, ParisCe n'est pas une exigence, c'est l'intitulé du poste. Le relevé doit l'écarter. Avant correction, il ressortait « hors tolérance » : le site répondait au recruteur que je ne suis pas développeur full stack JavaScript. Mon jeu d'éval ne pouvait pas l'attraper puisqu'il ne contenait que des exigences déjà propres.
ignore
19
Maîtrise de TypeScript, JavaScript, HTML et CSSTrouvé en collant une vraie annonce : le système répondait « partiel » sur les langages que j'utilise tous les jours. Le moteur avait raison de ne pas les revendiquer — le corpus contenait une fiche pour React, une pour Vue, une pour PHP, et aucune pour JavaScript, TypeScript, HTML ou CSS. Trop évidents pour avoir été écrits. Le défaut était dans le corpus, pas dans la règle.
couvert
20
Intégrer les applications front-end avec des API REST, des services backend, des systèmes d'authentification et des services d'IATrouvé sur la même annonce : le verdict tombait à « daté ». Plusieurs extraits prouvent ce point — l'ESN de 2016 à 2019, mais aussi anecdotrip avec Node et Express jusqu'à la migration de 2026. Le moteur citait celui dont la similarité était la plus haute au millième près, donc l'ESN, et le plafond d'ancienneté le déclassait ensuite. Règle ajoutée : à preuves équivalentes, citer la plus récente.
couvert
21
Développer des consoles d'administration et des portails de publicationTroisième trou de corpus de la même famille, et le plus coûteux : anecdotrip EST une console d'administration doublée d'un portail de publication — éditeur, brouillon/publié, médias, modération, mise en avant — et le corpus n'en disait rien. Il décrivait mes stacks et mes règles d'ingénierie, jamais ce que le produit est. Sur cette annonce c'était ma meilleure correspondance, et le site répondait « hors tolérance ».
couvert
22
Concevoir des composants réutilisables et contribuer à l'évolution des Design SystemsQuatrième trou de la même famille : jetons de couleur en source unique suivie jusque dans les e-mails, sérialiseur unique imposé à toutes les listes, barres d'action de onze formulaires extraites en un composant, règles de combinaison des marqueurs. Rien n'était dans le corpus, qui parlait de stacks et de règles d'ingénierie mais pas d'interface.
couvert
23
Partage de vos apprentissages avec l'équipe et force de proposition techniqueCas de PORTÉE, pas de couverture : « hors tolérance » est ici la bonne réponse. Une attente de comportement ne se démontre pas avec un corpus de réalisations passées, et un moteur de similarité n'a pas à en décider — la page d'analyse le dit maintenant explicitement. Ce cas a aussi produit la règle la plus contre-intuitive du projet : ma première fiche contenait la réserve « je n'ai jamais encadré d'équipe », et la similarité s'en est servie comme PREUVE d'encadrement, ce qui a fait remonter l'attribution abusive à 4,3 %. Une similarité sémantique ne comprend pas la négation. Le corpus ne contient donc que des affirmations positives ; ce qu'il ne contient pas EST la réponse.
hors
24
Proposer une nouvelle architecture logicielle adaptée aux besoins fonctionnels et techniques du projetLe trou le plus coûteux trouvé jusqu'ici : le corpus racontait quatre réécritures comme des faits, jamais comme des décisions d'architecture. Or la quatrième génération consiste précisément à avoir proposé et exécuté la suppression d'un service entier.
couvert
25
Concevoir et participer à la migration et au redéveloppement de briques applicatives selon le nouveau découpageMême trou : passage de deux services à un seul, intégration des routes d'API au framework, migration des briques concernées.
couvert
26
Veiller à la qualité du code, aux bonnes pratiques de développement et à la rédaction des documentations techniquesExigence composée de trois choses que je fais, et qui ressortait « hors tolérance » faute d'un extrait qui les tienne ensemble : seuils de couverture qui ne redescendent jamais, audit de dépendances bloquant, documentation tenue avec le code.
couvert
27
Mettre en place des tests unitaires et d'intégration pour valider la bonne évolution logicielle5 183 tests dont 2 861 unitaires et 1 775 d'intégration, couverture 89,6 % / 91,4 %. Ressortait « partiel » par dilution : depuis que vingt-deux fiches portent le tag « tests », plus aucune ne se détache.
couvert
28
Connaissance des architectures modernes : API REST, micro-services, conteneurisationCas où « partiel » est le verdict JUSTE et ne doit pas être « corrigé » : API REST et conteneurisation, oui, en production. Micro-services, non — j'ai tenu deux services et j'en suis revenu à un seul, ce qui n'est pas la même chose. Une exigence composée dont je couvre deux tiers doit se voir répondre deux tiers.
partiel
29
Nous recherchons un profil senior sur React pour faire évoluer nos applications webAngle mort systématique, trouvé sur une annonce réelle : le système lisait « React », trouvait le tag, et rendait « couvert » en ignorant purement et simplement le mot « Senior ». Il répondait à une version rétrécie de la demande. Le niveau fait partie de l'exigence, et aucune entrée de mon corpus ne le porte — ni n'en portera : je ne m'auto-attribue pas un niveau, c'est au lecteur d'en juger. Trois ans en entreprise, rien en équipe depuis 2019.
partiel
30
Développer et tester les fonctionnalités de la plateforme de services en ligneLe cœur même du métier ressortait « hors tolérance ». Cause : mes formes de lexique étaient des groupes nominaux — « tests unitaires », « conception technique » — alors que les annonces écrivent des verbes : « développer », « tester ». Défaut de dictionnaire, pas de règle.
couvert
31
Analyser les besoins et concevoir les solutions techniquesMême cause : j'avais enregistré « recueil du besoin » et « conception technique », le recruteur écrit « analyser les besoins » et « concevoir les solutions techniques ».
couvert
32
Développer des applications mobiles natives en SwiftCas de contrôle, ajouté en même temps que la notion large « développement » : il vérifie qu'une notion connue ne neutralise PAS le refus d'une technologie inconnue. Sans la distinction technologie / notion, ce cas basculerait en « couvert » et l'élargissement du lexique deviendrait dangereux.
hors
33
Développeur applicatif — renfort sur une plateforme existanteDeuxième forme d'intitulé de poste, trouvée en test : celle-ci ne porte ni type de contrat ni lieu, donc le premier filtre ne l'attrapait pas, et elle recevait un verdict. Un intitulé commence par un nom de métier ; une exigence commence par un verbe — « Développer » n'est pas « Développeur ». La règle ne vaut que pour la première ligne relevée, pour ne jamais écarter une vraie exigence.
ignore
16
Migration progressive d'une application Angular vers ReactExigence composée : elle nomme une techno que j'ai (React) et une que je n'ai pas (Angular). Le refus déterministe ne se déclenche pas, puisqu'une techno connue est nommée — mais la moitié du travail m'échappe, donc « couvert » serait faux. Un plafond interdit désormais « couvert » dès qu'une part de l'exigence est hors corpus. C'est prudent et grossier : une exigence couverte à 90 % reçoit le même verdict qu'une couverte à moitié.
partiel

Verdicts attendus figés à la date de référence. Le plafond d'ancienneté étant relatif à aujourd'hui, une compétence encore fraîche ici basculera d'elle-même en « daté » avec le temps — c'est le comportement voulu, pas une régression.