Skip to content

📖 docs: guide de contribution et 64 modèles validés#29

Merged
ronan-develop merged 3 commits into
mainfrom
docs/contributing
Jul 16, 2026
Merged

📖 docs: guide de contribution et 64 modèles validés#29
ronan-develop merged 3 commits into
mainfrom
docs/contributing

Conversation

@ronan-develop

Copy link
Copy Markdown
Owner

Trois choses : un guide de contribution, l'audit des quatre marques, et un fix de l'auditeur.

CONTRIBUTING.md

Documente les conventions telles qu'elles sont réellement appliquées — zéro dépendance runtime et ses corollaires, TDD strict, seuil de couverture, règles de parsing binaire, workflow issue → branche → PR.

Trois sections tirent les leçons des bugs de ce projet :

« Forged bytes prove less than you think » — les cinq bugs trouvés étaient tous invisibles à une suite verte :

Bug Pourquoi les tests l'ont raté
findUuid() cherchait à la racine Les tests y plaçaient l'UUID. Les vrais CR3 l'imbriquent sous moov.
La façade échouait sur un vrai CR2 Tous les tests utilisaient des mocks.
Le CR2 rendait 28 Mo de capteur Canon marque le JPEG lossless Compression = 6.
Le G12 levait sur un fichier valide Aucun test n'avait de candidat qui ment.

La couverture — avant d'ajouter un test pour couvrir une ligne, se demander si la ligne mérite d'exister. Ici, 83 % → 99 % surtout en supprimant du code mort.

Corrompu ≠ absent — un tag qui ment sur son contenu est courant dans les RAW. Inverser les deux fait rejeter des fichiers parfaitement lisibles.

Audit des 4 marques : 64/72

Marque Réussis
Sony 23/23 100 % — A290 (2010) à FX30
Nikon 20/22 90,9 %
Apple 5/6 83,3 %
Canon 16/21 76,2 % — tous les EOS passent

Les 8 échecs ont été vérifiés un par un et sont tous corrects : ces fichiers ne contiennent aucun JPEG (zéro FFD8 dans le fichier entier). D1H de 2001 → vignette RGB non compressée. DNG de compacts CHDK → idem. .CRW → format d'avant le CR2, hors périmètre.

Le taux réel sur les fichiers qui ont une preview est de 100 %.

La liste des 64 modèles est en annexe du README.

đź”§ Fix de l'auditeur

Quatre audits parallèles partageaient /tmp/rpe-audit : le premier qui finissait supprimait le dossier des autres, qui écrivaient dans le vide. Résultat : 15 % de réussite annoncée là où le même modèle passait à 76 % seul.

Un auditeur qui invente ses échecs est pire qu'inutile — il envoie enquêter sur des bugs qui n'existent pas. Dossier isolé par PID désormais.

OK (138 tests, 224 assertions)

Documente les conventions telles qu'elles sont réellement appliquées ici, pas
des généralités : zéro dépendance runtime et ses deux corollaires, TDD strict,
seuil de couverture, règles de parsing binaire, workflow issue → branche → PR.

Trois sections tirent les leçons des bugs de ce projet :

- « forged bytes prove less than you think » : les quatre bugs trouvés étaient
  tous invisibles à une suite verte, parce qu'un test écrit à partir d'une
  incompréhension reproduit l'incompréhension ;
- la couverture : avant d'ajouter un test pour couvrir une ligne, se demander
  si la ligne mérite d'exister — ici le passage de 83 % à 99 % s'est fait
  surtout en supprimant du code mort ;
- corrompu ≠ absent : un tag qui ment sur son contenu est courant dans les RAW,
  ce n'est pas une corruption. Inverser les deux fait rejeter des fichiers
  parfaitement lisibles.
Quatre audits lancés en parallèle partageaient /tmp/rpe-audit : le premier qui
finissait supprimait le dossier des autres, qui écrivaient alors dans le vide.

Résultat : 15 % de réussite annoncée là où le même modèle passait à 76 % seul.
Un auditeur qui invente ses échecs est pire qu'inutile — il envoie enquêter sur
des bugs qui n'existent pas.

Le nettoyage vide aussi le dossier avant de le supprimer : rmdir échoue sur un
dossier non vide, ce qu'un téléchargement interrompu peut laisser.
Audit des quatre marques du périmètre : 72 modèles testés, 64 réussis.
Sony 23/23, Nikon 20/22, Apple 5/6, Canon 16/21 — tous les boîtiers EOS passent.

Les 8 échecs ont été vérifiés un par un, et tous sont corrects : ces fichiers ne
contiennent aucun JPEG (zéro FFD8 dans le fichier entier). Un Nikon D1H de 2001
porte une vignette 160x120 RGB non compressée, les DNG de compacts générés par
CHDK font de même, et les .CRW précèdent le CR2. PreviewNotFoundException y est
la bonne réponse — le taux réel sur les fichiers qui ont une preview est 100 %.

La liste complète est en annexe, en bas de page, pour ne pas noyer le tableau
principal des 9 appareils validés à la main avec leurs dimensions.
@ronan-develop
ronan-develop merged commit bac4f93 into main Jul 16, 2026
6 checks passed
@ronan-develop
ronan-develop deleted the docs/contributing branch July 16, 2026 20:58
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