[DTP-Worker 20260806_211659] VÉRIF axe NEUF « fidélité numérique JS JSON.parse : entiers > 2^53 (corruption SILENCIEUSE) + magnitude hors plage double → Infinity » → CLEAN 0/114 · max tracké 18.88M (~8 ordres sous 2^53) · 3e sommet trilogie JSON.parse après NaN/Infinity · teeth 8/8 + bout-en-bout (inject 2^53+7 flagué) · rejouable · NON gate (#5 occurrence-zéro) · 0 édition de prod

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-06 21:21:03 +00:00
parent b88b7051e0
commit 52e8e81799
+14
View File
@@ -1,5 +1,19 @@
# Activity Log · 2026-08-06 · Claude Code DTP Worker
## Session `20260806_211659` — VÉRIF · axe NEUF « fidélité NUMÉRIQUE côté JS `JSON.parse` : entiers > 2^53 (corruption SILENCIEUSE) + magnitudes hors plage double (→ `Infinity`) » → CLEAN 0/114 · 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 (prod VPS / builds EAS / dépôts ONAPI hors périmètre worker · #8), `OPEN_DECISIONS_REGISTER.md` = arbitrages produit de Michel (non éditables). Objectif : un **axe teeth encore jamais balayé**.
**Axe NEUF (absent de la mémoire) — le 3e sommet de la trilogie « fidélité `JSON.parse` navigateur ».** Le sweep de ce matin (`20260806_181623`) couvre les sentinelles `NaN`/`Infinity` **non-strictes** : elles lèvent une `SyntaxError` **bruyante** dans le `JSON.parse` de la Console Helios. Restait le sibling **SILENCIEUX**, invisible à toute la chaîne Python : (a) un **entier `abs > Number.MAX_SAFE_INTEGER` (2^531 ≈ 9.007e15)** — Python conserve la précision arbitraire et **ne prévient jamais**, mais JS le mappe au double IEEE-754 le plus proche = **valeur silencieusement fausse, sans erreur** ; (b) une **magnitude > `Number.MAX_VALUE` (~1.8e308)** → JS parse en `Infinity`, silencieux. Un id/montant-en-cents/numéro sérialisé en nombre JSON franchissant 2^53 **passe tous les gates** (`validate_json` vert car Python tolère, byte-repro identique) tout en corrompant l'affichage navigateur. Distinct de la FORME scalaire (type int/float) et des sentinelles NaN (valeurs illégales) : ici c'est la **plage sûre du `Number` JS**, jamais éprouvée.
**Détecteur (stdlib pur, rejouable).** Reparse chaque `.json` avec `json.loads(text, parse_int=hook, parse_float=hook)` : flag si `abs(int) > 2^531` ou `math.isinf(float(litéral))`. Les numériques-**chaîne** (`"999…"`, légitimes, non affectés par `JSON.parse`) sont épargnés.
**Dents prouvées (8/8 + bout-en-bout).** Épargnés : `18880000`, `2^531` exact (MAX_SAFE), `18296296385` (numéro type-téléphone), `"99999999999999999999"` (chaîne), `0.085` (flottant). MORDENT : `2^53`, `2^53+1`, `1e400``Infinity`. Bout-en-bout sur `…/faisabilite/bancable/fixtures/brief_bancable.json` : baseline = 0 non-sûr ; injection `_probe = 2^53+7`**correctement flaguée** `int>2^53` (9007199254740999).
**Résultat.** Sur **114 fichiers JSON** suivis : **0 nombre non-sûr**. Le plus grand entier tracké = **18 880 000** (`brief_bancable.json`) — ~8 ordres de grandeur sous la limite. **CLEAN** — tous les artefacts sont consommables sans perte de précision par le `Number` JS.
**Conformité.** 0 édition de production (sweep read-only). `./run_ci.sh` inchangé = **33 PASS · 0 FAIL · 0 SKIP**. Fichiers : ce journal + 1 entrée mémoire (`js-number-fidelity-sweep`). Sweep **rejouable****NON promu en gate** (#5, occurrence-zéro ; note résiduelle : `validate_json` reste int-safe-tolérant par design Python, à durcir seulement si un générateur commence à émettre de grands ids/montants numériques).
## Session `20260806_181623` — VÉRIF · axe NEUF « conformité JSON STRICTE (ECMA-404 / JS `JSON.parse`) : aucun `NaN`/`Infinity` non-strict » → CLEAN · 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 (prod VPS / builds EAS / dépôts ONAPI hors périmètre worker · #8), `OPEN_DECISIONS_REGISTER.md` = arbitrages produit de Michel (non éditables). Objectif : un **axe teeth encore jamais balayé**.