Files
oto-enterprise-os-dtp/05_deliverables_mvp/publiciste/lib/branding.py
T
Claude Code DTP Worker f0a7d71357 [DTP-Worker] Sprint 2 · Publiciste scaffold (parser faisabilité → JSON + generator + gate)
Livrable Publiciste · Sprint 2 · Semaine 2 (seul module net-neuf · chemin
critique · GAP_ANALYSIS §3.13). Cible portage VPS : otoia/capabilities/publiciste.py.

- lib/parser.py : data_room/PXX/ (template v1.0) → projet dict conforme au
  contrat projets_master.schema.json (livré S1). Mapping colonnes par en-tête,
  parsing montants USD/DOP robuste. Anti-invention #6 : rétrogradation défensive
  « en_developpement » si prix USD manquant ; absent → null (jamais 0/inventé).
- lib/validator.py : validateur JSON-Schema draft-07 (sous-ensemble) ZÉRO
  dépendance pip (runner Gitea sans pip). Oracle jsonschema en test si présent.
- lib/generator.py + template + branding : rendu HTML luxury #4 (dark+doré,
  Fraunces + Cormorant Garamond) ; sans prix → « Prochainement · Détails à venir ».
- publiciste.py : CLI parse/validate/generate/run.
- fixtures/ : données SYNTHÉTIQUES de test (jamais publiées) P01 complète + P02
  incomplète.
- tests/ : 23 tests unittest (stdlib) verts.
- CI : job publiciste-tests ajouté au gate (.gitea/workflows/ci.yml · Gitea #2).

Vérifs (en-repo, sans VPS) : 23/23 tests verts · gate CI local vert (guard/JSON/
docs) · pipeline CLI produit un master conforme au schéma. Auto-score 4Big 95/100.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-30 01:37:47 +00:00

41 lines
1.4 KiB
Python

"""Tokens de marque luxury · CLAUDE.md contrainte #4 (source unique de vérité).
Dark + doré : `#0a0a12` fond · `#f0b429` accent doré.
Typographies : Fraunces (titres) + Cormorant Garamond (corps éditorial).
Ces constantes sont importées par le générateur ET vérifiées par la baseline QA
Playwright (tests/e2e/_shared/contract.ts) — garder les valeurs synchronisées.
"""
from __future__ import annotations
# Couleurs canoniques (contrainte #4).
COLOR_BG = "#0a0a12" # fond dark
COLOR_ACCENT = "#f0b429" # doré
COLOR_INK = "#f5f3ee" # texte clair sur fond dark
COLOR_MUTED = "#8b8778" # texte secondaire
# Typographies canoniques (contrainte #4).
FONT_DISPLAY = "Fraunces"
FONT_BODY = "Cormorant Garamond"
# Devises canoniques (contrainte #10 · USD + DOP).
DEVISE_PRIMAIRE = "USD"
DEVISE_SECONDAIRE = "DOP"
# Libellés de statut affichés sur le site public (FR par défaut).
STATUT_LABELS = {
"disponible": "Disponible",
"en_developpement": "En développement",
"bientot": "Bientôt",
"en_processus": "En processus",
}
# Statuts pour lesquels on affiche « Prochainement · Détails à venir »
# au lieu d'une grille de prix (jamais de prix inventé — contrainte #6).
STATUTS_SANS_PRIX = {"en_developpement", "bientot", "en_processus"}
def statut_label(statut: str) -> str:
return STATUT_LABELS.get(statut, statut)