Skip to content

Add a sixth cold review, using different methods - #65

Merged
74nu5 merged 1 commit into
mainfrom
docs/cold-review-6
Jul 19, 2026
Merged

Add a sixth cold review, using different methods#65
74nu5 merged 1 commit into
mainfrom
docs/cold-review-6

Conversation

@74nu5

@74nu5 74nu5 commented Jul 19, 2026

Copy link
Copy Markdown
Owner

La cinquième revue soutenait qu'une liste vide mesure l'épuisement d'une méthode, pas l'absence de défauts. Les revues 4 et 5 ont trouvé chacune exactement cinq défauts élevés, la quatrième s'étant pourtant fermée liste vide : le taux de découverte n'avait pas décliné. Une sixième lecture adverse en aurait probablement produit cinq de plus sans rien apprendre de neuf.

Celle-ci ne lit donc pas le code. Elle compile des configurations et donne la sortie à un vrai ConfigurationBuilder ; et elle mute le code de production pour mesurer ce que les 381 tests protègent réellement.

Le défaut critique

settings { Foo = "one"
           foo = "two" }

Settex : ✓ Successfully compiled   0 avertissement
.NET   : FormatException: A duplicate key 'foo' was found.
         → l'application ne démarre pas

Settex est incohérent avec lui-même : :=, le contrôle de dérive et la validation de type sont tous insensibles à la casse — trois campagnes y ont veillé — mais l'affectation simple construit un magasin sensible à la casse. Le déclencheur réaliste n'est pas une faute de frappe : ce sont deux includes.

Les autres constats élevés

  • Une clé contenant un point est inexprimable : Microsoft.AspNetCore = "Warning" devient un objet imbriqué, le filtre de journalisation est silencieusement ignoré, et les clés entre guillemets sont refusées. L'exemple ASP.NET Core du README embarque le défaut.
  • Le mode fusionné produit lui aussi un fichier illisible quand base et env diffèrent par la casse.
  • env "Dev" / env "dev" fusionnent sans avertir — c'est une régression de mon correctif de la campagne précédente, qui a échangé une perte de données contre une disparition silencieuse sur Linux.
  • Trois invariants de valeur (culture invariante, encodeur JSON, casse de l'égalité de chaînes) survivent à la mutation sans faire échouer un seul test.
  • Deux tests de régression ne peuvent pas échouer, dont un écrit pendant la campagne précédente.

Ce qui tient

À dire aussi nettement : 34 mutations sur 44 tuées, dont tous les invariants centraux. La détection des fuites de tableaux n'a produit aucun faux négatif sur quinze formes. Ce n'est pas un logiciel fragile — c'est un logiciel dont les zones vérifiées sont solides et dont les zones jamais interrogées ne l'avaient jamais été.

Note : 7,0 (−1,2), parce qu'un défaut empêche une application de démarrer.

🤖 Generated with Claude Code

The fifth review argued that an empty findings list measures the exhaustion of an
inspection method rather than the absence of defects. Reviews four and five each
found exactly five high defects, the fourth having closed with an empty list, so
the discovery rate had not declined. A sixth adversarial code read would most
likely have produced five more without saying anything new.

This one therefore does not read the code. It compiles configurations and feeds
the output to a real ConfigurationBuilder, comparing what merged mode claims, what
.NET actually produces, and what Settex warned about; and it mutates the
production code to measure what the 381 tests really protect.

Both lenses found things that were structurally invisible to reading. Settex can
emit an appsettings.json that .NET refuses to load outright — two sibling keys
differing only in case — reporting success with zero warnings, so the application
does not start. A dotted key cannot be expressed at all, which means the README's
own ASP.NET Core example produces a logging filter that is silently discarded, and
there is no workaround since quoted keys are rejected. Three value invariants —
invariant culture, the JSON encoder, string equality case-sensitivity — survive
mutation untouched by any test. Two regression tests cannot fail, one of them
written during the previous campaign.

The counterpart is recorded just as plainly: where earlier campaigns worked, the
work holds. Array-leak detection produced no false negative across fifteen shapes,
and 34 of 44 mutations were killed, including every core invariant. The score
falls to 7.0 because one defect stops an application from starting, not because
the software is generally fragile.

Two findings are worth carrying forward beyond their severity: one high is a
regression from a fix made last campaign, which traded one silent failure for
another, and one concerns a test written in that same campaign. Fixing under
pressure produces fixes that move the failure and tests that reassure without
checking.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@74nu5
74nu5 merged commit a7a6ad6 into main Jul 19, 2026
3 checks passed
@74nu5
74nu5 deleted the docs/cold-review-6 branch July 19, 2026 19:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant