[DTP-Worker 20260812_160204] surface · D-09 · séparateur de milliers monétaire divergent entre les deux surfaces de rendu stakeholder (publiciste=espace · faisabilité=virgule) — arbitrage produit surfacé, NON un bug/fix worker

Chasse au défaut d'abord (pas un énième sweep stérile) : grep TODO/FIXME/stub =
RIEN ; axe format `:g`/`:,`/`:f` de prod = les 2 `:g` restants bornés+annotés
sûrs (commissions:86 percent 0-100 · bancable/finance:143 nb-unités borné) →
axe `:g` genuinement clos, 0 bug de correctness.

Vrai locus = arbitrage de PRÉSENTATION transverse, non un défaut :
- publiciste/lib/generator.py:34-39 → espace (`.replace(",", " ")`) : USD 8 560 000
- faisabilite/generator/genlib/renderer.py:28-37 + bancable/banclib/report.py:21-32
  → virgule US (`,.0f` sans replace) : USD 8,560,000
- signaux partiels sans règle dure : OTO_DESIGN_SYSTEM_v1.md:89-90 illustre
  l'espace (« dès 145 000 USD ») ↔ fixtures data_room écrivent en virgule
  (architecture.md:11 « USD 150,000 ») ; aucune directive ne tranche.

SURFACE, don't rewrite : ajout D-09 au OPEN_DECISIONS_REGISTER (+ note d'en-tête).
Choisir un séparateur = convention design/audience (arbitrage Michel), pas une
correction worker (#6). Les 2 rendeurs sont internes-cohérents+testés ; aucune
sortie formatée n'est un artefact commité (out/ = nombres bruts ; formatage au
runtime VPS #8) → aucun gate concerné. Pas de gate (#5) : classe D-01…D-08.

Vérif : run_ci 33 PASS · 0 FAIL · 0 SKIP (inchangé, doc éditorial). 0 code V18
(bloqué #6) · 0 module prod · 0 artefact reconstruit · 0 chiffre figé · NFC-clean.
Fichiers : M OPEN_DECISIONS_REGISTER.md · M 05_activity_log/2026-08-12.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-12 16:09:26 +00:00
parent 1cf0e18fba
commit 0f7a1d8f6f
2 changed files with 66 additions and 0 deletions
@@ -25,6 +25,11 @@
> commits `85cd625`/`1992ee6` ont décalé `_cond_validation_wag`) ; D-01 `legal/confotur/README.md:8-17
> → :32-33` (bannière de statut V18 préfixée). Sweep des autres citations = résolvent (snapshots
> V18/directives datés = stables).
>
> **Ajout** — 2026-08-12 · session `20260812_160204` : **D-09** (séparateur de milliers divergent
> entre surfaces de rendu monétaire publiciste / faisabilité). Arbitrage de présentation
> stakeholder ; ni un bug worker ni gaté (aucune sortie formatée n'est un artefact commité) —
> **surfacé, pas tranché**.
---
@@ -216,6 +221,46 @@ fine A1-A20, contenue dans la directive complète **non lisible** (§0 · #8). *
---
## D-09 · 🟠 Présentation : séparateur de milliers divergent entre les deux surfaces de rendu monétaire (publiciste = espace · faisabilité = virgule)
**Décision attendue** — Michel (ou le design system) doit **fixer la convention canonique** du
séparateur de milliers pour les montants **face au stakeholder**, puis harmoniser les deux
rendeurs sur ce choix. Options : (a) **espace** partout (`USD 8 560 000`), aligné sur l'exemple
public du design system ; (b) **virgule US** partout (`USD 8,560,000`), aligné sur la graphie des
`data_room` sources ; (c) convention **par audience** (espace pour le marketing public, virgule
pour le dossier technique/banquier) — statu quo assumé et documenté.
**Constat** — deux modules rendent le **même montant** différemment, tous deux face au stakeholder :
- **Publiciste** (HTML marketing public) → **espace** :
`05_deliverables_mvp/publiciste/lib/generator.py:34-39`
(`_fmt_usd`/`_fmt_dop` = `f"{value:,.0f}".replace(",", " ")`) ⟹ `USD 8 560 000`.
- **Faisabilité** (rapport de faisabilité + bancable) → **virgule** :
`05_deliverables_mvp/faisabilite/generator/genlib/renderer.py:28-37` (`_money`, docstring `:29`
« USD 250,000 ») et `05_deliverables_mvp/faisabilite/bancable/banclib/report.py:21-32`
(`_money`/`_int` = `,.0f` / `:,`, **sans** `replace`) ⟹ `USD 8,560,000`.
**Signaux partiels (pas de règle dure)** — le design system illustre le format public avec un
**espace** (`OTO_DESIGN_SYSTEM_v1.md:89-90`, « ### Séparateur privilégié » → ex. « dès 145 000 USD »),
ce que suit le publiciste ; mais les fixtures `data_room` sources écrivent en **virgule US**
(`publiciste/fixtures/data_room/P01/20_architecture/architecture.md:11` → « USD 150,000 »), ce que
suit la faisabilité. À noter aussi : l'exemple du design system place le **montant avant la devise**
(`145 000 USD`), alors que **les deux** modules mettent la devise **en tête** (`USD …`) — donc aucun
des deux ne calque l'exemple à la lettre. Aucune directive datée ne tranche le séparateur.
**Pourquoi worker n'édite pas** — Choisir un séparateur unique impose une **convention de présentation
transverse** (arbitrage design/audience), non une correction ponctuelle ; l'imposer unilatéralement
réécrirait implicitement une règle du design system ou la graphie des sources (#6). Les deux rendeurs
sont **internes-cohérents et testés** ; aucune sortie formatée n'est un **artefact commité** (les
`out/` des deux modules ne stockent que des nombres bruts — le formatage vit dans le HTML/rapport
généré au runtime VPS · #8), donc **aucun gate n'est concerné**.
**Sources / surface** — surfacé session `20260812_160204` (balayage des spécificateurs de format
`:g`/`:,`/`:f` de production, frère de l'arc « `:g` lossy » des commits `e7cc3c4`/`5af86e3`). Les deux
`:g` de production restants sont bornés + annotés sûrs (`crm/commissions/commlib/finance.py:86`
percent 0-100 · `faisabilite/bancable/banclib/finance.py:143` unités bornées) — hors périmètre de D-09.
---
## Rappel de discipline
- Ces items sont **surfacés, pas tranchés** : les éditer côté worker violerait #6 (invention) ou
réécrirait une source d'autorité (`CLAUDE.md`, une directive datée).