Spaces:
Running
docs(changelog): archive pre-v2 history, exclude archive from ratchet
Browse filesCHANGELOG.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 +0 -0
- docs/archive/changelog-pre-v2.md +0 -0
- tests/architecture/test_doc_paths.py +27 -2
|
The diff for this file is too large to render.
See raw diff
|
|
|
|
The diff for this file is too large to render.
See raw diff
|
|
|
|
@@ -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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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({
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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]]:
|