diff --git a/05_activity_log/2026-08-05.md b/05_activity_log/2026-08-05.md index fa31a12..4a60daf 100644 --- a/05_activity_log/2026-08-05.md +++ b/05_activity_log/2026-08-05.md @@ -1,5 +1,54 @@ # Activity Log · 2026-08-05 · Claude Code DTP Worker +## Session 184329 · CURRENCY canal stakeholder — **baseline régression corrigée** (607/17-skip) + 2ᵉ incident RED consigné · 0 édition de production + +**Choix de tâche.** `./run_ci.sh` au démarrage = **33 PASS · 0 FAIL · 0 SKIP**, arbre propre, +roadmap `ROADMAP_8_WEEKS_OR_LESS.md` **intégralement livrée/gatée in-repo** (0 checkbox ouverte ; +15/15 `acceptance_matrix` `status=in_repo`). Plutôt qu'une énième sonde de dérive (surfaces usuelles +saturées · #5), j'ai vérifié la **currency du canal stakeholder** `daily_reports/2026-08-05.md` +(hors merge-gate : `check_docs`+`check_readme_claims` l'excluent explicitement) contre les artefacts +**courants** — dernière mise à jour du rapport = session `144304` (HEAD `f311a1b`), **5 commits +plus tôt**. Deux écarts **matériels** trouvés. + +**Écart 1 — baseline régression : faux-vert `jsonschema` neutralisé (matériel).** Recompute +indépendant `python3` de `regression_run.json.totals` : **624 ran · 607 passed · 17 skipped · 0/0**, +verdict `PASS` — mais le rapport publiait « **624 passés · 0 skip** ». Cause : le refactor `9d30939` +lance chaque suite sous `python -S` (sans `site-packages`) reproduisant le runner Gitea pip-less → +l'oracle **optionnel** `jsonschema` (17 tests `skipUnless`, ~1/module) est **neutralisé partout**. +AVANT : `jsonschema` présent en local → `skipped=0` ; absent sur runner → `skipped=17` ⇒ +`regression_run.json` commité = **FAUX-VERT** (vert local, ROUGE runner). APRÈS `-S` : matrice +**byte-déterministe** cross-environnement, baseline ancrée sur la couverture garantie (stdlib + +validateurs maison). Verdict inchangé `PASS`. La ligne « Régression » du canal se lit désormais +**607 passés · 17 skip (oracles optionnels)** ; les « 624 passés · 0 skip » antérieurs = snapshots +datés vrais à l'époque (*historical-repro = KEEP*). + +**Écart 2 — 2ᵉ tree commité RED, capté le jour même.** Le refactor `-S` (`9d30939`) éditait +`regression/README.md` (+11 l) **sans rebuild** de `quality_report.json` (l'audit 4Big score le +contenu doc → champ `evidence` byte-count) → `check-artifacts` **ROUGE** (32 PASS · 1 FAIL). Rattrapé +sous ~17 min par `9fa464d` (rebuild → 1 ligne, verdict `PASS` 24/24 inchangé). Même classe +`rebuild-after-doc-edits` que l'incident du matin (`127ef6f`→`1321983`). Le rapport n'en consignait +qu'**un** ; ce 2ᵉ était absent → honnêteté du canal rétablie (cf. [[audit4big-rebuild-after-doc-edits]], +[[two-logging-channels]]). + +**Fix.** Ajout d'une section « Mise à jour fin de journée · `184329` » au `daily_reports/2026-08-05.md` : +(1) tableau avant/après `-S` + reformulation de la ligne Régression ; (2) tableau du 2ᵉ incident ; +(3) veille lecture-seule depuis `f311a1b` (docstring helpers `db91a6b` CLEAN · gate constant-anchor +`1441693` · invariant INV-C `PYTHONUTF8` `1a44dfe` — **pas un nouveau job**, 33 inchangé) ; +(4) ré-attestation HEAD `1a44dfe`. Tables du matin **laissées intactes** (snapshots datés), réconciliées +explicitement par la nouvelle section (même convention que l'évolution 32→33 jobs). + +**Ré-attestation (recompute `python3` indépendant, HEAD `1a44dfe`).** 4Big : **24 modules · tous == 100** · +`coverage.ok=true` · `PASS`. Régression : **624 ran · 607 passed · 17 skipped · 0 fail / 0 err** · `PASS`. +Recette : **15/15 `in_repo`** · `ci_job` ×36 · `True`. Structure : `run_ci` **33 PASS** = 8 gates statiques +(`ls ci/*.sh` hors `lib.sh` = 8) + 25 suites. + +**Portée / anti-churn.** **0 fichier de production édité**, **0 artefact reconstruit**, **0 gate +ajouté/modifié** (#5), **0 chiffre saisi à la main** (#6 — 24/607/17/33/36 recomputés des artefacts + +`run_ci.sh`), **aucune commande VPS** (#8 — 100 % local, lecture-seule sur les artefacts). Seules +éditions : le rapport stakeholder + ce journal. + +**Vérif.** `./run_ci.sh` → **33 PASS · 0 FAIL · 0 SKIP** (aucun fichier gaté touché). + ## Session 181325 · FIX RÉEL défaut locale-runner : le gate est ROUGE en silence sous locale ASCII → **VERROUILLÉ UTF-8** **Choix de tâche.** `./run_ci.sh` au démarrage = **33 PASS**, arbre propre, roadmap diff --git a/05_deliverables_mvp/daily_reports/2026-08-05.md b/05_deliverables_mvp/daily_reports/2026-08-05.md index 7a7b36d..485c666 100644 --- a/05_deliverables_mvp/daily_reports/2026-08-05.md +++ b/05_deliverables_mvp/daily_reports/2026-08-05.md @@ -136,3 +136,71 @@ tables ci-dessus **recomputent à l'identique ce jour** (recompute `python3` ind **Portée / anti-churn.** **0 fichier de production édité**, **0 artefact reconstruit**, **0 gate ajouté** (#5), **0 chiffre saisi à la main** (#6 — 24/624/33 dérivés des artefacts et de `run_ci.sh`), **aucune commande VPS** (#8). Seule édition : ce rapport + le journal. + +--- + +## Mise à jour fin de journée · session `20260805_184329` — **baseline régression corrigée (faux-vert neutralisé)** + 2ᵉ incident d'intégrité consigné + +Ce rapport s'arrêtait à la session `144304` (HEAD `f311a1b`). **Cinq commits** ont suivi. +**Deux sont matériels pour le stakeholder** : (1) la **baseline régression a changé de forme** +— un faux-vert latent a été neutralisé, la matrice publiée passe de « 0 skip » à +« **17 oracles optionnels ignorés** » (verdict inchangé `PASS`) ; (2) un **2ᵉ tree commité +momentanément RED**, capté et corrigé le jour même (même classe que l'incident du matin). +Le reste est veille d'intégrité en lecture seule. HEAD courant : `1a44dfe`. + +### (1) Baseline régression durcie — faux-vert `jsonschema` neutralisé (matériel) + +Le refactor `9d30939` lance désormais **chaque suite sous `python -S`** (interpréteur sans +`site` → aucun `site-packages` sur `sys.path`), reproduisant fidèlement le runner Gitea +pip-less. L'**unique paquet tiers** du corpus — l'oracle **optionnel** `jsonschema`, toujours +gardé par `skipUnless`/`try…except ImportError` — est ainsi **neutralisé partout**. + +| Avant `-S` | Après `-S` (baseline courante) | +|---|---| +| `jsonschema` **présent** en local → `skipped=0` · `passed=624` | `-S` → oracle **absent partout** → `skipped=17` · `passed=607` | +| `jsonschema` **absent** sur le runner Gitea → `skipped=17` | matrice **byte-identique** quel que soit ce qui est `pip install`é | +| ⇒ `regression_run.json` commité = **FAUX-VERT** (vert en local, **ROUGE** sur le runner) | ⇒ `check_regression` **byte-déterministe** cross-environnement | + +> **Ce que ça garantit au stakeholder.** La baseline publiée était vraie sur un poste où +> `jsonschema` était installé, mais **aurait fait rougir la CI** le jour où elle tournerait +> sur le runner pip-less réel. Le refactor ancre la baseline sur la **couverture garantie** +> (stdlib + validateurs maison) ; les 17 tests neutralisés ne sont que des **doublures de +> validation** de schéma, leurs contrats restent couverts par les validateurs maison. Le +> verdict reste `PASS` — **aucune** suite rouge, **0 fail / 0 err**. La ligne « Régression » +> des tables ci-dessus se lit désormais **624 ran · 607 passés · 17 skip (oracles optionnels) · 0/0 · `PASS`** +> (les « 624 passés · 0 skip » des sections antérieures sont des **snapshots datés** vrais à +> l'époque, classe *historical-repro = KEEP*). + +### (2) 2ᵉ incident d'intégrité (capté + corrigé le jour même) + +| Événement | Commit | État du tree commité | Résolution | +|---|---|---|---| +| Le refactor `-S` (ci-dessus) éditait `regression/README.md` (+11 l) **sans rebuild** de `quality_report.json` → l'audit 4Big score le contenu des docs (champ `evidence` byte-count) → `check-artifacts` **ROUGE** | `9d30939` (`161319`) | **RED** (32 PASS · 1 FAIL) | — | +| Rebuild `audit_4big` → **1 ligne** modifiée (byte-count), verdict **inchangé** `PASS` 24/24 · `coverage.ok` → tree revenu VERT | `9fa464d` (`164319`) | **VERT** (33 PASS · 0 FAIL) | ✅ rattrapé sous ~17 min | + +> Même classe que l'incident du matin (`rebuild-after-doc-edits`) : éditer une doc **scorée +> par audit_4big** sans régénérer `quality_report.json` en dernier laisse `check-artifacts` +> dériver. La discipline de gate a **remordu sur le tree commité lui-même** ; le canal +> l'enregistre plutôt que de laisser croire à une journée VERTE ininterrompue. + +### Veille d'intégrité en lecture seule / hors merge-gate (0 édition de production) + +| Travail | Commit | Portée | Résultat | +|---|---|---|---| +| Sweep docstring-vs-code **étendu aux helpers `*lib/`** (surface qu'un scope `*_gen.py` rate) | `db91a6b` (`171321`) | 9 helpers `seolib/…/genlib` (directions A+B) | **CLEAN** · 1 faux-positif réfuté (`finlib/gate.py` illustre les valeurs spec, pas un hardcode) | +| **Gate neuf** classe `claude-md-constant-anchor` : prose #9 (3 %/8.5 %/52 %) des modules `bancable`+`commissions` **ancrée sur `CLAUDE.md`** | `1441693` (`174324`) | 4 copies périmées **en silence** dans 2 modules distincts, chacune se réclamant « (#9) » | **teeth-prouvé** (8.5 %→9 % mord les 4 · 52 %→55 % mord 2 · Cardnet→Azul mord l'énum) | +| **Invariant neuf** INV-C dans le gate `check_ci_integrity` **existant** : le workflow doit forcer `env: PYTHONUTF8: "1"` | `1a44dfe` (`181325`) | ancre l'I/O UTF-8 top-level → pas de `UnicodeEncodeError` silencieux sur runner locale-ASCII (`print ✅` en fin de build) | ancré ; **pas un nouveau job** (invariant interne · 33 jobs inchangé) | + +### Ré-attestation du point courant (recompute `python3` indépendant ce jour, HEAD `1a44dfe`) + +| Dimension | Recompute `python3` vs artefact commité | = attendu ? | +|---|---|---| +| Qualité 4Big | `quality_report.json` : **24 modules · tous == 100** · `coverage.ok=true` · verdict `PASS` | ✅ | +| Régression (run) | `regression_run.json.totals` : **suites 24 · ran 624 · passed 607 · skipped 17 · 0 fail / 0 err** · verdict `PASS` | ✅ (nouvelle baseline) | +| Recette roadmap | `acceptance_matrix.json` : **15/15 `status=in_repo`** · verdict `True` · **`ci_job` ×36** | ✅ | +| Structure CI | `run_ci.sh` → **33 PASS · 0 FAIL · 0 SKIP** = **8 gates statiques** (`ls ci/*.sh` hors `lib.sh` = 8) **+ 25 suites** | ✅ concordant | + +**Portée / anti-churn.** **0 fichier de production édité** cette session, **0 artefact +reconstruit**, **0 gate ajouté** (#5), **0 chiffre saisi à la main** (#6 — 24/607/17/33 +recomputés des artefacts + `run_ci.sh`), **aucune commande VPS** (#8). Seule édition : +ce rapport + le journal `05_activity_log/`.