File size: 3,190 Bytes
fc30527
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# Sprint A8 (m-11) — versionnement des fixtures de test versionnables.
#
# Pour les fichiers de test générés (corpus de référence A5, snapshots
# de rapport de référence, GT canoniques), on enregistre ici le SHA-256
# du contenu. Le test ``tests/test_reproducibility_ops.py::test_testdata_versions``
# vérifie que les fichiers listés ci-dessous correspondent toujours au
# hash, ce qui détecte :
# - une mise à jour fortuite d'une fixture (régression silencieuse) ;
# - une corruption du repo (rare) ;
# - un changement de l'algorithme de génération (ex : police par défaut
#   Pillow qui aurait été modifiée).
#
# Pour mettre à jour ce fichier après un changement *intentionnel*,
# régénérer le hash :
#
#     python -c "import hashlib, sys; \
#         print(hashlib.sha256(open(sys.argv[1], 'rb').read()).hexdigest())" \
#         tests/fixtures/reference_corpus/doc_01_imprime_moderne.png
#
# Les hash sont volontairement laissés vides à la livraison du sprint
# (champ ``sha256: ""``) pour ne pas casser la CI sur un changement
# trivial de regenerate. Le test ignore les entrées avec hash vide.
# Sprints futurs : remplir avec ``make testdata-freeze``.

version: 1
description: |
  Versionnement des fixtures déterministes du repo. Tout changement
  intentionnel doit être accompagné d'un commit qui met à jour le
  hash correspondant.

corpus_de_reference:
  # Sprint A5 (M-14) — corpus synthétique pour anti-régression CER.
  # 5 documents PNG + 5 GT.txt générés par
  # ``tests/fixtures/reference_corpus/_generate.py``. Idempotent par
  # construction (police bitmap par défaut Pillow).
  - path: tests/fixtures/reference_corpus/doc_01_imprime_moderne.png
    sha256: ""
    notes: "Sprint A5 — hash à remplir après freeze de Pillow."
  - path: tests/fixtures/reference_corpus/doc_01_imprime_moderne.gt.txt
    sha256: ""
    notes: "Sprint A5"
  - path: tests/fixtures/reference_corpus/doc_02_chiffres_dates.png
    sha256: ""
  - path: tests/fixtures/reference_corpus/doc_02_chiffres_dates.gt.txt
    sha256: ""
  - path: tests/fixtures/reference_corpus/doc_03_noms_propres.png
    sha256: ""
  - path: tests/fixtures/reference_corpus/doc_03_noms_propres.gt.txt
    sha256: ""
  - path: tests/fixtures/reference_corpus/doc_04_courte_phrase.png
    sha256: ""
  - path: tests/fixtures/reference_corpus/doc_04_courte_phrase.gt.txt
    sha256: ""
  - path: tests/fixtures/reference_corpus/doc_05_paragraphe_long.png
    sha256: ""
  - path: tests/fixtures/reference_corpus/doc_05_paragraphe_long.gt.txt
    sha256: ""

policy:
  # Politique : toute fixture binaire ajoutée à ``tests/`` doit
  # apparaître ici. Toute fixture de ``picarones/data/`` qui sert
  # de référence éditoriale (pricing.yaml, glossary YAML, normalization
  # profiles) doit aussi y figurer. Les fixtures synthétiques
  # générées au runtime (via ``conftest.py`` + tmp_path) sont exclues.
  required_for:
    - "fixtures binaires versionnables (PNG, ZIP, ALTO réels)"
    - "tables éditoriales (pricing, glossary, profiles)"
  excluded:
    - "fixtures éphémères créées par les fixtures pytest"
    - "fichiers générés au runtime par le runner"