Claude commited on
Commit
afc88ab
·
unverified ·
1 Parent(s): 2b116bb

test(chantier2): ratchet-down absolu sur le total narration sprint

Browse files

Ferme le seul trou réel du garde-fou A/B : une nouvelle narration
sous forme R (tag fusionné mid-phrase, ``# pattern Sprint 78``)
passerait #1 silencieusement. Compteur total = 483 désormais
verrouillé en décroissance stricte (pattern doc_paths) :

- ``total <= BASELINE`` : tout ajout (même R-style) échoue
- ``total >= BASELINE`` : toute résorption oblige à resserrer
BASELINE dans le même commit (verrou du progrès)

Résultat : la dette de narration ne peut plus jamais croître ; toute
revue R-bucket future est automatiquement capitalisée.

https://claude.ai/code/session_01EmLiMPJJuB44QHEFzDWUvF

tests/architecture/test_no_sprint_narrative_in_code.py CHANGED
@@ -8,15 +8,18 @@ le tag est *fusionné* à une phrase porteuse d'invariant ou en
8
  docstring multi-ligne — retrait mécanique = mutilation, donc
9
  laissés à une revue humaine ultérieure (hors périmètre auto).
10
 
11
- Ce test verrouille l'invariant **A == 0 et B == 0** via le même
12
- classifieur que l'outil de triage : tout nouveau commentaire
13
- sprint *proprement dé-tagable* (préfixe propre / tag seul) qui
14
- réapparaîtrait est catégorie A ou B échec CI. L'auteur doit
15
- nommer/commenter par intention, pas par épisode de chantier
16
- (l'historique vit dans git + CHANGELOG). Le résidu R n'est PAS
17
- compté ici (il est légitime tant qu'il porte un invariant) sa
18
- résorption éventuelle est un chantier de revue dédié, pas un
19
- ratchet automatique.
 
 
 
20
  """
21
 
22
  from __future__ import annotations
@@ -38,6 +41,13 @@ def _load_triage():
38
  return mod
39
 
40
 
 
 
 
 
 
 
 
41
  def test_no_auto_cleanable_sprint_narrative() -> None:
42
  triage = _load_triage()
43
  rows = triage.scan()
@@ -53,3 +63,32 @@ def test_no_auto_cleanable_sprint_narrative() -> None:
53
  "`python scripts/triage_sprint_comments.py --check` :\n "
54
  + "\n ".join(offenders)
55
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  docstring multi-ligne — retrait mécanique = mutilation, donc
9
  laissés à une revue humaine ultérieure (hors périmètre auto).
10
 
11
+ Ce test verrouille **deux** invariants :
12
+
13
+ 1. **A == 0 et B == 0** via le classifieur de triage : toute
14
+ narration sprint *proprement dé-tagable* (préfixe propre / tag
15
+ seul) qui réapparaîtrait échec CI. L'auteur doit commenter
16
+ par intention, pas par sprint.
17
+ 2. **Compteur TOTAL baseline** (ratchet-down absolu) : ferme le
18
+ *seul* trou réel du test #1 une narration sous forme R
19
+ (tag fusionné mid-phrase, ``# pattern Sprint 78``) passerait #1
20
+ silencieusement. Le total ne peut désormais que DÉCROÎTRE ;
21
+ tout ajout de narration (même R-style) échoue, et toute
22
+ résorption oblige à resserrer le baseline (pattern doc_paths).
23
  """
24
 
25
  from __future__ import annotations
 
41
  return mod
42
 
43
 
44
+ #: Compteur total de narrations sprint dans ``picarones/`` à la
45
+ #: clôture du Chantier 2 (A=0, B=0, R=483). Ratchet-down absolu :
46
+ #: si on descend en dessous (revue humaine de R, reformulation),
47
+ #: BAISSER cette valeur dans le même commit. Ne JAMAIS augmenter.
48
+ BASELINE = 483
49
+
50
+
51
  def test_no_auto_cleanable_sprint_narrative() -> None:
52
  triage = _load_triage()
53
  rows = triage.scan()
 
63
  "`python scripts/triage_sprint_comments.py --check` :\n "
64
  + "\n ".join(offenders)
65
  )
66
+
67
+
68
+ def test_total_sprint_narrative_at_or_below_baseline() -> None:
69
+ """Ratchet-down absolu : toute narration sprint ajoutée (même
70
+ forme R fusionnée) fait dépasser le baseline → échec. Ferme le
71
+ *seul* trou réel du test #1."""
72
+ triage = _load_triage()
73
+ total = len(triage.scan())
74
+ assert total <= BASELINE, (
75
+ f"Narration sprint en hausse : {total} > baseline {BASELINE}. "
76
+ "Le ratchet est strictement décroissant — toute nouvelle "
77
+ "mention Sprint/Phase/Audit dans picarones/ doit être "
78
+ "reformulée par intention (l'historique vit dans CHANGELOG). "
79
+ "Lancer ``python scripts/triage_sprint_comments.py --check``."
80
+ )
81
+
82
+
83
+ def test_baseline_must_be_tightened_when_progress_made() -> None:
84
+ """Pattern miroir (cf. ``test_doc_paths``) : si le total est
85
+ descendu sous le baseline, c'est qu'une revue R a porté ses
86
+ fruits — BAISSER :data:`BASELINE` dans le même commit pour
87
+ verrouiller le gain."""
88
+ triage = _load_triage()
89
+ total = len(triage.scan())
90
+ assert total >= BASELINE, (
91
+ f"Excellent : {total} narrations < baseline {BASELINE}. "
92
+ f"Resserrer ``BASELINE = {total}`` dans ce fichier pour "
93
+ "verrouiller le progrès."
94
+ )