Claude commited on
Commit
a44cd70
·
unverified ·
1 Parent(s): fb13ad8

docs(changelog): archive pre-v2 history, exclude archive from ratchet

Browse files

CHANGELOG.md à 4343 lignes brouillait la perception du repo : le poids
documentaire le plus visible (à la racine) était de l'historique
pré-rewrite (janvier 2025 → avril 2026, sprints 1-30 + pré-v2.0).
À v2.0 "release achevée", l'historique pré-2.0 doit être archivé,
pas exposé comme journal courant.

Découpage :
- CHANGELOG.md actif (567 lignes) : 4 sections [Unreleased] du
chantier mai 2026 + section [2.0.0] release v2.0 + pointeur final
vers l'archive. Couvre l'ère v2.0 et au-delà. Compatible avec
l'extraction du release.yml (qui cherche "## [version]").
- docs/archive/changelog-pre-v2.md : versions 0.1.0 → 1.x + chantier
vers 1.3.0 (BnF) + post-Sprint 97 + lots A-H pré-rewrite. Banner
"Archived document" en tête + lien vers CHANGELOG.md actif.

Conséquence pour le ratchet test_doc_paths.py :
Les 155 chemins cassés vers picarones/{core,measurements,engines,...}
qui vivaient dans CHANGELOG.md sont maintenant dans l'archive. Sans
exclusion, le ratchet les compterait toujours (changement d'identité
source-cible).

Ajout de EXCLUDED_PATH_PREFIXES = ("docs/archive/", "docs/archives/")
dans le test : les archives sont hors périmètre du ratchet par design
— elles existent précisément pour porter les références au code
supprimé, en les comptant on empêcherait la décroissance.

L'exclusion est documentée explicitement pour éviter qu'un mainteneur
futur la transforme en échappatoire silencieux pour la doc active.

Résultat : BROKEN_PATHS_BASELINE 164 → 41. Les 41 restants sont
presque tous dans docs/audits/*.md (à déplacer en archive lot D4) et
dans CHANGELOG actif (refs Sprint H.4/H.6 dans la section migration,
intouchables sans réécrire l'historique 2.0).

CHANGELOG.md CHANGED
The diff for this file is too large to render. See raw diff
 
docs/archive/changelog-pre-v2.md ADDED
The diff for this file is too large to render. See raw diff
 
tests/architecture/test_doc_paths.py CHANGED
@@ -148,7 +148,13 @@ REPO_ROOT = Path(__file__).resolve().parents[2]
148
  # Sprint H.4 du CHANGELOG qui mentionne le chemin de
149
  # ``benchmark_runner.py`` (module supprimé). La mention documente
150
  # l'historique du module et n'est pas corrigée volontairement.
151
- BROKEN_PATHS_BASELINE = 164
 
 
 
 
 
 
152
 
153
  #: Patrons de fichiers de documentation à scanner.
154
  DOC_GLOBS: tuple[str, ...] = (
@@ -159,6 +165,18 @@ DOC_GLOBS: tuple[str, ...] = (
159
  "docs/**/*.md",
160
  )
161
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  #: Pattern minimal d'un chemin Python dans le repo.
163
  PATH_PATTERN: re.Pattern[str] = re.compile(
164
  r"picarones/[a-z_][a-z_0-9]*(?:/[a-z_][a-z_0-9]*)*\.py"
@@ -179,7 +197,14 @@ def _doc_files() -> list[Path]:
179
  files: list[Path] = []
180
  for glob in DOC_GLOBS:
181
  files.extend(REPO_ROOT.glob(glob))
182
- return sorted({f for f in files if f.is_file()})
 
 
 
 
 
 
 
183
 
184
 
185
  def _broken_paths() -> list[tuple[str, str]]:
 
148
  # Sprint H.4 du CHANGELOG qui mentionne le chemin de
149
  # ``benchmark_runner.py`` (module supprimé). La mention documente
150
  # l'historique du module et n'est pas corrigée volontairement.
151
+ #: Phase 1 D3 (juin 2026) : 164 → 41. L'archivage du CHANGELOG
152
+ #: pré-v2.0 vers ``docs/archive/changelog-pre-v2.md`` retire 123
153
+ #: chemins cassés historiques du périmètre actif. Les 41 restants
154
+ #: sont presque tous dans ``docs/audits/*.md`` (à archiver en D4) et
155
+ #: ``CHANGELOG.md`` actif (refs Sprint H.4/H.6, intouchables sans
156
+ #: réécrire l'historique 2.0).
157
+ BROKEN_PATHS_BASELINE = 41
158
 
159
  #: Patrons de fichiers de documentation à scanner.
160
  DOC_GLOBS: tuple[str, ...] = (
 
165
  "docs/**/*.md",
166
  )
167
 
168
+ #: Sous-dossiers exclus du scan : les archives historiques peuvent
169
+ #: contenir des chemins vers du code supprimé (c'est précisément ce
170
+ #: pour quoi elles sont archivées). Compter ces chemins dans le
171
+ #: ratchet empêcherait la décroissance — toute migration ne ferait
172
+ #: que déplacer la dette, pas la résorber. L'exclusion est explicite
173
+ #: pour qu'un mainteneur futur sache que les archives ne sont PAS un
174
+ #: échappatoire silencieux pour la doc active.
175
+ EXCLUDED_PATH_PREFIXES: tuple[str, ...] = (
176
+ "docs/archive/", # nouveau (Phase 1 D3 / D4)
177
+ "docs/archives/", # ancien nom (sera consolidé en D4)
178
+ )
179
+
180
  #: Pattern minimal d'un chemin Python dans le repo.
181
  PATH_PATTERN: re.Pattern[str] = re.compile(
182
  r"picarones/[a-z_][a-z_0-9]*(?:/[a-z_][a-z_0-9]*)*\.py"
 
197
  files: list[Path] = []
198
  for glob in DOC_GLOBS:
199
  files.extend(REPO_ROOT.glob(glob))
200
+ return sorted({
201
+ f for f in files
202
+ if f.is_file()
203
+ and not any(
204
+ f.relative_to(REPO_ROOT).as_posix().startswith(prefix)
205
+ for prefix in EXCLUDED_PATH_PREFIXES
206
+ )
207
+ })
208
 
209
 
210
  def _broken_paths() -> list[tuple[str, str]]: