technova69/spip-check | 2 commits
Par Gilles Vincent, le 25 août 2026 à 16h36min :
Merge branch ‹ fix/immutable-missing-and-prescan › into ‹ main ›
feat: vérifier l’archive dans une phase à part entière
See merge request technova69/spip-check!6
Ajouté
tests/unit/ReferenceVerifierTest.php
Modifié
README.md
lang/spip_check_ar.php
lang/spip_check_ast.php
lang/spip_check_ca.php
lang/spip_check_cs.php
lang/spip_check_de.php
lang/spip_check_en.php
lang/spip_check_eo.php
lang/spip_check_es.php
lang/spip_check_eu.php
lang/spip_check_fa.php
lang/spip_check_fr.php
lang/spip_check_fr_tu.php
lang/spip_check_gl.php
lang/spip_check_hr.php
lang/spip_check_id.php
lang/spip_check_it.php
lang/spip_check_km.php
lang/spip_check_lb.php
lang/spip_check_nl.php
lang/spip_check_oc_lnc.php
lang/spip_check_oc_ni.php
lang/spip_check_pt.php
lang/spip_check_pt_br.php
lang/spip_check_ro.php
lang/spip_check_ru.php
lang/spip_check_sk.php
lang/spip_check_sv.php
lang/spip_check_tr.php
lang/spip_check_zh_tw.php
spip-check.php
src/SpipCheck.php
templates/spip-check.php.tpl
tests/unit/IndexedScannerTest.php
tests/unit/ProgressTest.php
tests/unit/RunStoreTest.php
==============================
Par gilles, le 25 août 2026 à 14h08min :
feat: vérifier l’archive dans une phase à part entière
La comparaison avec l’archive officielle vivait dans scanBatch(), sous
un if ($afterId === 0) : ~950 sommes SHA-1 calculées hors budget de
temps, dans une seule requête, et intégralement recommencées à chaque
tentative en cas d’expiration. Elle ne couvrait par ailleurs que
ecrire/ et prive/, ignorait les fichiers supprimés — is_file()
écartait silencieusement les absents — et missingImmutableFindings()
n’était appelée que par les tests : la règle immutable_missing
n’existait pas en production.
La vérification devient une phase à part entière, verifier-spip,
entre le contrôle de signature et l’indexation, portée par
ReferenceVerifier. Elle avance par lots bornés — 300 fichiers ou une
seconde — avec un curseur dans l’état du contrôle, et apparaît dans le
tableau d’avancement au-dessus de l’indexation. Le périmètre devient
celui de Scanner::isDistributedPath(), désormais l’unique définition
du « cœur distribué » : config/spip/, ecrire/, prive/,
plugins-dist/, squelettes-dist/ et vendor/. Les fichiers absents
donnent enfin immutable_missing, quelle que soit leur extension —
l’indexeur ne voit que les fichiers PHP, une page .html de prive/
supprimée échappait à tout.
Mesuré sur l’archive 4.4.21 : 4 544 fichiers distribués vérifiés en
16 lots et 1,4 s, là où l’ancien pré-scan concentrait tout dans la
première requête d’analyse.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Ajouté
tests/unit/ReferenceVerifierTest.php
Modifié
README.md
lang/spip_check_ar.php
lang/spip_check_ast.php
lang/spip_check_ca.php
lang/spip_check_cs.php
lang/spip_check_de.php
lang/spip_check_en.php
lang/spip_check_eo.php
lang/spip_check_es.php
lang/spip_check_eu.php
lang/spip_check_fa.php
lang/spip_check_fr.php
lang/spip_check_fr_tu.php
lang/spip_check_gl.php
lang/spip_check_hr.php
lang/spip_check_id.php
lang/spip_check_it.php
lang/spip_check_km.php
lang/spip_check_lb.php
lang/spip_check_nl.php
lang/spip_check_oc_lnc.php
lang/spip_check_oc_ni.php
lang/spip_check_pt.php
lang/spip_check_pt_br.php
lang/spip_check_ro.php
lang/spip_check_ru.php
lang/spip_check_sk.php
lang/spip_check_sv.php
lang/spip_check_tr.php
lang/spip_check_zh_tw.php
spip-check.php
src/SpipCheck.php
templates/spip-check.php.tpl
tests/unit/IndexedScannerTest.php
tests/unit/ProgressTest.php
tests/unit/RunStoreTest.php