Skip to content

Élévation bpm.* au standard « jugement » — interpret() + 26 composants + showcase /components#12

Merged
remigit55 merged 32 commits into
masterfrom
claude/elevate-bpm-components-18r36d
Jun 11, 2026
Merged

Élévation bpm.* au standard « jugement » — interpret() + 26 composants + showcase /components#12
remigit55 merged 32 commits into
masterfrom
claude/elevate-bpm-components-18r36d

Conversation

@remigit55

Copy link
Copy Markdown
Collaborator

Rapport d'élévation des composants bpm.* — run du 2026-06-10

Branche : claude/elevate-bpm-components-18r36d · Gate final : VERT (232 tests) · Aucun rendu existant modifié (additif strict, asserté par tests).

Ce qui a été fait

Phase 0 — Classification

154 clés du barrel packages/core/src/bpm.tsx classées dans docs/elevation-ledger.json :
25 INSTRUMENT · 47 DATA · 47 STRUCTURAL · 35 INTERACTIF. Le ledger est la source de vérité reprenable (statuts done / todo, checkpoints de prise de recul consignés).

Phase 1 — Socle partagé

  • components/bpm/interpret.ts : primitive pure interpret(value, context) → Judgment
    • value : scalaire ou trajectoire [{t, v}] (t numérique ou Date, tri interne) ;
    • level : gap orienté par direction (zone neutre paramétrable neutralBand, défaut ±2 %) ;
    • trend : pente par moindres carrés, orientée (improving / flat / worsening) ;
    • anomaly : > 2σ du comparisonFrame ;
    • severity ∈ [0,1] : 0.5×écart-défavorable-normalisé + 0.25×worsening + 0.25×abnormal ;
    • aides partagées : judgmentColor, trendArrow, judgmentLabel, lastValue.
    • 15 tests d'assertion dans packages/core/gate/interpret.test.ts (toutes les exigences de la note technique).
  • Showcase : registre components/showcase/registry.tsx + rendu ElevationShowcase ajouté en fin de page /components existante (page historique intacte).

Phase 2 — Élévation (26 composants au standard)

Composant Classe Avant Après (additif)
metric INSTRUMENT affiche valeur + delta manuel value accepte v(t) ; context → bordure jugée, ligne écart/tendance/anomalie (role=status), sparkline de mouvement
progressRing INSTRUMENT anneau accent anneau coloré par verdict, flèche de tendance au centre, <title> + aria
progress INSTRUMENT barre accent barre colorée par verdict, ligne de verdict, v(t) accepté
liveGauge INSTRUMENT zones seuil manuelles valeur colorée par verdict + flèche + ligne de verdict, v(t) accepté
sparkline INSTRUMENT couleur pilotée à la main (trend) couleur jugée par interpret, ligne de repère pointillée, points v(t), role=img + aria-label
statusBox INSTRUMENT statut catégoriel value+context → verdict à côté du libellé, bordure jugée
highlightBox INSTRUMENT bloc éditorial measure+context → barre latérale jugée + ligne de verdict
labelValue INSTRUMENT paire label/valeur valeur colorée + suffixe ▲/▼/↗/↘/⚠, trajectory, jamais de faux jugement sur valeur non numérique
anomalyAlert INSTRUMENT gravité manuelle gravité dérivée de interpret().severity, verdict + % sévérité, history v(t)
machineStatus INSTRUMENT LED catégorielle value+context → verdict mesuré pouvant diverger de la LED
lineChart INSTRUMENT trace neutre série jugée comme v(t) : repère pointillé, couleur verdict, aria descriptif
areaChart INSTRUMENT idem idem lineChart (aire)
barChart INSTRUMENT barres uniformes chaque barre jugée individuellement + repère + verdict global
scatterChart INSTRUMENT points uniformes points jugés, anomalies > 2σ cerclées (data-abnormal), repère
liveChart INSTRUMENT seuils manuels fenêtre glissante jugée : courbe verdict, repère, ligne de verdict
rating INSTRUMENT étoiles accent étoiles colorées vs note cible, écart + tendance (history)
loadingBar INSTRUMENT barre de chargement avancement déterminé (iso) jugé vs repère attendu
sensorGrid INSTRUMENT statuts catégoriels context par capteur : bordure jugée, verdict, history v(t)
predictiveChart INSTRUMENT prévision neutre la trajectoire prédite est jugée (verdict sur le futur projeté)
comparison INSTRUMENT highlightBest contexts par dimension : chaque cellule jugée vs repère
heatmap INSTRUMENT dégradé de valeur chaque cellule jugée : liseré verdict, anomalies soulignées, infobulle enrichie
waterfall INSTRUMENT cascade neutre cumul final jugé, verdict sous la cascade
funnelChart INSTRUMENT entonnoir neutre conversion globale jugée vs cible %, verdict sous l'entonnoir
treemap INSTRUMENT tuiles tuiles jugées (contour) + verdict global sur le total
radarChart INSTRUMENT polygone accent anneau de repère pointillé, polygone coloré par verdict de la moyenne
table DATA tri + empty hook d'interprétation par colonne (column.context), états loading/error, densité compact, aria-sort

Conventions communes : prop optionnelle context (ou contexts par dimension/capteur/colonne), data-judgment sur l'élément jugé, role=status ou role=img+aria-label, helpers partagés, repère pointillé pour les représentations spatiales. Appel inchangé → rendu inchangé, asserté par packages/core/gate/elevated.test.tsx.

Prises de recul (consignées dans le ledger)

  • Après 10 : duplication du calcul « dernier point de trajectoire » → helper partagé lastValue() ; convention de nommage de la prop trajectoire consignée.
  • Après 25 : pattern stable ; les représentations multi-valeurs jugent par élément (barre, point, cellule, capteur, tuile, colonne).

Phase 3 — Surface de test

  • Route /components : section « Élévation — jugement & états » en fin de page, pilotée par le registre. Chaque composant traité rendu en défaut / déviant / trajectoire. Vérifié en local : GET /components 200, 26 sections #elevated-* rendues côté serveur.
  • Gate final VERT : tsc, vite build, doc-sync, 232 tests vitest (156 historiques + 15 interpret + 61 élévation).

FAILURES

Aucun composant marqué failed : tous les composants traités ont passé le gate avant chaque commit ; aucun commit sur gate rouge.

RESTE À FAIRE (rapport honnête)

128 composants todo dans le ledger : 46 DATA (hors table), 47 STRUCTURAL, 35 INTERACTIF. La consigne « instruments d'abord » a été suivie : le cœur de la note (porter un jugement) est fait à 100 % (25/25 instruments). table sert de composant de référence pour la rubrique DATA. Reprise idempotente depuis le ledger (ordre DATA → STRUCTURAL → INTERACTIF).

Écarts de process assumés

Deux commits groupés au lieu d'un par composant : progressRing + progress (paire jumelle) et waterfall + funnelChart + treemap + radarChart (quatuor de clôture) — fichiers registre/tests partagés, gate vert sur chaque groupe. Tous les autres : un commit chacun.

AUTO-CRITIQUE — composants où je suis le moins sûr que l'élévation respecte l'intention de design

  1. funnelChart : juger la seule conversion globale est réducteur (écart par étape plus fidèle) ; en horizontal, verdict révélé seulement en title/aria.
  2. treemap / radarChart : le jugement global (total / moyenne) est une agrégation que la note ne prescrit pas ; un contexts[] par axe serait plus fidèle pour le radar.
  3. loadingBar : la classification INSTRUMENT est discutable (indicateur de chargement) ; jugement limité au variant déterminé iso.
  4. highlightBox : composant éditorial — la prop measure greffe un usage KPI qui n'était peut-être pas l'intention d'origine.
  5. anomalyAlert : seuils de dérivation de gravité (0.15 / 0.5) arbitraires, à calibrer par le design.
  6. metric : le mini-sparkline dans la ligne de verdict peut densifier les grilles compactes (n'apparaît que si trajectoire fournie).

Route de test

npm run devhttp://localhost:3000/components — section « Élévation — jugement & états » en bas de page.

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m


Generated by Claude Code

claude added 30 commits June 10, 2026 20:43
…T, 47 DATA, 47 STRUCTURAL, 35 INTERACTIF)

Ledger docs/elevation-ledger.json is the resumable source of truth for the
elevation run: one entry per bpm barrel key with class and status (todo/done/failed).
Elevation order: INSTRUMENT -> DATA -> STRUCTURAL -> INTERACTIF.

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
- components/bpm/interpret.ts : primitive pure interpret(value, context) -> Judgment
  (niveau/gap oriente, tendance par regression v(t), anomalie 2-sigma sur
  comparisonFrame, severite combinee [0,1]) + aides visuelles partagees
  (judgmentColor, trendArrow, judgmentLabel). SSR-safe, sans dependance React.
- Exports additifs depuis components/bpm/index.ts et packages/core/src/bpm.tsx.
- 15 tests d'assertion dans packages/core/gate/interpret.test.ts (gate: 171/171 vert).
- Scaffold showcase : components/showcase/registry.tsx (registre d'exemples) +
  ElevationShowcase rendu en fin de page /components existante (section vide
  tant qu'aucun composant n'est eleve — rendu actuel inchange).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : value accepte une trajectoire v(t) [{t,v}] (affiche le dernier
point) ; nouvelle prop optionnelle context {reference, direction,
comparisonFrame?} -> interpret() revele le jugement (bordure d'accent
coloree, ligne ecart/tendance/anomalie role=status, sparkline de mouvement
si trajectoire). Sans context : rendu strictement inchange (asserte par
gate/elevated.test.tsx). Docs regenerees, snapshot props mis a jour.

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Paire d'instruments de progression, elevee avec la meme semantique :
- prop optionnelle context {reference, direction, comparisonFrame?} ->
  interpret() colore le remplissage (anneau / barre) selon le jugement ;
- value accepte une trajectoire v(t) [{t,v}] (dernier point affiche) ;
- progressRing revele la tendance par fleche centrale, progress par une
  ligne ecart/tendance role=status sous la barre ; data-judgment pose.
Sans context : rendu strictement inchange (asserte). Gate 179/179 VERT.
NB: commit groupe pour cette paire jumelle (registre/tests partages) —
le reste du run repasse a un commit par composant.

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : value accepte une trajectoire v(t) (aiguille sur le dernier
point) ; prop optionnelle context -> interpret() colore la valeur,
ajoute fleche de tendance et ligne ecart/anomalie role=status sous la
jauge ; data-judgment pose. Sans context : rendu inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : prop points [{t,v}] (trajectoire explicite, t irregulier) ;
prop context -> la couleur suit la tendance JUGEE par interpret (et non
plus seulement la prop trend), ligne de repere pointillee tracee,
role=img + aria-label descriptif (plus aria-hidden), data-judgment.
Sans context : rendu strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : props optionnelles value (scalaire ou trajectoire v(t)) et
context -> interpret() revele un verdict ecart/tendance/anomalie a cote
du libelle (role=status) et colore la bordure gauche ; data-judgment.
Sans context : rendu strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : props optionnelles measure (scalaire ou trajectoire v(t)) et
context -> interpret() colore la barre laterale selon le verdict (sauf
barColor explicite) et revele une ligne ecart/tendance role=status ;
data-judgment pose. Sans context : rendu strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : props optionnelles trajectory [{t,v}] et context ->
interpret() colore la valeur selon le verdict et ajoute un suffixe
compact (fleche niveau + tendance + anomalie) role=status avec
aria-label complet ; data-judgment. Les valeurs string numeriques sont
jugees aussi ; valeurs non numeriques -> jamais de faux jugement.
Sans context : rendu strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : props optionnelles history (trajectoire v(t)) et context ->
gravite auto-derivee de interpret().severity (>=0.5 critical, >0.15
warning, sinon info) quand severity n'est pas explicite ; verdict
ecart/tendance/anomalie + % de severite revele sous l'ecart
attendu/mesure ; data-judgment. Sans context : rendu inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : props optionnelles value (cadence/TRS, scalaire ou trajectoire
v(t)) et context -> interpret() revele un verdict ecart/tendance sous
l'etat (role=status) et colore la bordure gauche — la LED categorique
(running/fault) reste inchangee ; le jugement peut diverger d'elle
(ex. LED verte mais cadence en chute). data-judgment pose.
Sans context : rendu strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Revue de coherence des 10 premiers instruments eleves (consignee dans
le ledger). Correction de pattern pour la suite : helper pur
lastValue(InterpretValue) ajoute a interpret.ts (deduplique le calcul
trier-trajectoire-et-prendre-le-dernier-point).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : prop optionnelle context -> la serie {x,y} est lue comme
trajectoire v(t) et jugee par interpret() : repere trace en pointille
(inclus dans l'echelle Y), couleur de ligne selon le verdict,
role=img + aria-label descriptif, data-judgment.
Sans context : rendu strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : prop optionnelle context -> serie {x,y} jugee comme
trajectoire v(t) par interpret() : repere pointille inclus dans
l'echelle, couleur d'aire selon le verdict, role=img + aria-label,
data-judgment. Sans context : rendu strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : prop optionnelle context -> chaque barre est jugee
individuellement par interpret(d.y, context) (couleur par ecart au
repere : la representation reagit au type d'ecart), repere pointille
inclus dans l'echelle, verdict global de la serie en aria-label +
data-judgment. Sans context : rendu strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : prop optionnelle context -> chaque point juge (couleur par
ecart au repere), anomalies >2sigma (comparisonFrame ou nuage lui-meme)
cerclees et agrandies (data-abnormal), repere pointille, verdict global
serie en aria-label + data-judgment. La representation reagit au type
d'ecart : niveau->couleur, anomalie->cercle. Sans context : rendu
strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : prop optionnelle context -> la fenetre glissante courante est
jugee comme trajectoire v(t) par interpret() : courbe coloree par le
verdict, repere pointille (inclus dans l'echelle comme les seuils),
verdict ecart/tendance role=status sous le graphique, role=img +
aria-label + data-judgment. Sans context : rendu inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : props optionnelles history (v(t)) et context (note cible) ->
etoiles pleines colorees par le verdict interpret(), suffixe
ecart-vs-cible + tendance role=status, aria-label enrichi,
data-judgment. Sans context : rendu strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : prop optionnelle context -> sur la barre determinee (variant
iso + value), l'avancement est juge vs le repere attendu : remplissage
colore par le verdict, aria-label enrichi du jugement, data-judgment.
Variants indetermines : rien a juger, jamais de jugement. Sans
context : rendu strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : chaque SensorReading accepte context et history (v(t)) ->
jugement PAR CAPTEUR via interpret() : bordure gauche coloree par le
verdict (prioritaire sur le statut categoriel), ligne ecart/tendance
role=status dans la carte, data-judgment par carte. Sans context :
rendu strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : prop optionnelle context -> c'est la trajectoire PREDITE qui
est jugee par interpret() (le verdict porte sur le futur projete) :
ligne de prevision coloree par le verdict, repere pointille inclus
dans l'echelle, aria-label enrichi, data-judgment.
Sans context : rendu strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : prop optionnelle contexts (Record<dimension, InterpretContext>)
-> chaque cellule numerique est jugee par interpret(n, contexts[dim]) :
valeur coloree par le verdict, ecart au repere en title, data-judgment
par cellule. Compose avec highlightBest sans le remplacer.
Sans contexts : rendu strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Additif : prop optionnelle context -> chaque cellule est jugee par
interpret(v, context) : lisere colore par le verdict hors zone neutre,
anomalies >2sigma (comparisonFrame ou matrice entiere) soulignees
(data-abnormal), infobulle enrichie du verdict, data-judgment par
cellule. Sans context : rendu strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Quatuor de cloture des instruments (commit groupe, registre/tests
partages ; meme pattern additif context -> interpret) :
- waterfall : cumul FINAL juge vs repere, verdict role=status sous la
  cascade (racine svg inchangee sans context) ;
- funnelChart : taux de conversion derniere/premiere etape juge vs
  reference (en %), verdict sous l'entonnoir (vertical) ou title/aria ;
- treemap : chaque tuile jugee (contour colore hors zone neutre) +
  verdict global sur le total (aria, data-judgment racine) ;
- radarChart : anneau de repere pointille au niveau reference, polygone
  colore par le verdict de la moyenne des axes, aria enrichi.
Sans context : rendus strictement inchanges (assertes). 25/25
instruments du ledger traites.

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Rubrique DATA appliquee additivement :
- hook d'interpretation par colonne : TableColumn.context ->
  chaque cellule numerique jugee par interpret (couleur verdict,
  ecart en title, data-judgment) ;
- etats : loading (3 lignes squelettes + aria-busy) et error
  (ligne role=alert, prioritaire) en plus de l'empty existant ;
- densite : density=compact (padding reduit) ;
- a11y : aria-sort sur l'en-tete trie.
Sans nouvelles props : rendu strictement inchange (asserte).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
- docs/elevation-report.md : tableau avant/apres des 26 composants
  eleves, conventions communes, prises de recul, restes a faire
  honnetes (128 todo), auto-critique explicite.
- /components verifie en local (GET 200, 26 sections elevated-* SSR).

https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
…verdict

Une barre de progression ne porte pas de jugement. Retrait du prop context,
de l'import interpret/judgmentColor/judgmentLabel, du remplissage coloré par
le verdict et de l'aria-label de verdict. Le rendu (iso déterminé / sweep
indéterminé) et la sémantique progressbar/status sont inchangés.
…interpret

Bloc éditorial de mise en valeur, pas un instrument. Retrait des props measure
et context, de la barre colorée par le verdict et de la ligne d'écart/tendance.
La barre latérale reste pilotée par barColor; sections RTB/Cible inchangées.
Un taux de conversion unique sur l'entonnoir n'est pas un verdict fiable.
Retrait du prop context, du verdict sous l'entonnoir (vertical) et des
attributs title/aria/data-judgment (horizontal). Le chart est conservé tel
quel; un jugement par étape reste à définir.
…nneau de repère

Un polygone unique sur N axes hétérogènes n'a pas de couleur de jugement
unique. Retrait du verdict moyen (interpret sur la moyenne des axes), de la
couleur du polygone et de l'aria-label/data-judgment agrégés. L'anneau de
repère pointillé par axe est conservé (désormais tracé dès qu'un context est
fourni, indépendamment d'un verdict).
claude added 2 commits June 11, 2026 06:13
Le total d'un treemap (somme de tuiles hétérogènes) n'a pas de verdict unique.
Retrait du jugement global (data-judgment racine + aria-label « total »).
Chaque tuile reste jugée individuellement vs le repère (contour coloré par le
verdict hors zone neutre).
- elevated.test.tsx : loadingBar/highlightBox → tests « pas de jugement » ;
  funnelChart → assert verdict agrégé absent ; treemap → assert pas de verdict
  racine mais jugement par tuile ; radarChart → assert anneau conservé sans
  data-judgment.
- props.test.ts.snap : régénéré (retrait de context sur loadingBar/funnelChart,
  measure+context sur highlightBox).
- elevation-ledger.json : loadingBar & highlightBox → STRUCTURAL ; reason
  documentée pour funnel/radar/treemap.
- registry.tsx (showcase) : exemples des 5 mis à jour (plus de context déviant
  sur les déclassés/agrégés).
- public/llms*.txt : régénérés (prop-surface).

Gate : VERT (230 tests).
@remigit55
remigit55 marked this pull request as ready for review June 11, 2026 06:24
@remigit55
remigit55 merged commit 4f110b6 into master Jun 11, 2026
1 check passed
remigit55 pushed a commit that referenced this pull request Jun 11, 2026
Merge de origin/master (qui contient #12 : élévation des 21 instruments +
corrections des 5) dans la branche de couverture JSDoc.

Résolution : la vérité est le code post-#12 de master. Pour les 26 composants
modifiés par #12, les interfaces et le code de master sont conservés tels quels
(props de jugement context/interpret sur les 21 élevés ; context conservé sur
treemap/radar ; context/measure absents sur loadingBar/highlightBox/funnelChart
après déclassement). Les blocs JSDoc @component de #13 (position requise par le
générateur, avant l'interface Props) sont conservés par-dessus ces signatures.
Aucune prop retirée par #12 n'est ressuscitée.

Les ~125 autres composants conservent le JSDoc de #13 inchangé.
Doc dérivée régénérée dans le commit suivant.
remigit55 pushed a commit that referenced this pull request Jun 11, 2026
Régénération via scripts/generate-llms-txt.py + generate-bpm-components-json.py
depuis l'arbre réconcilié (interfaces post-#12 + JSDoc). Les props de jugement
(context/interpret) des 21 instruments élevés apparaissent ; context/measure
absents des 3 déclassés (loadingBar, highlightBox, funnelChart). Fichiers générés
non hand-edités.
remigit55 added a commit that referenced this pull request Jun 11, 2026
* docs: plan de refonte du site public (audit, IA cible, i18n, design)

Phase 0 de la refonte : inventaire des pages, écarts factuels relevés
(pas d'API interpret() dans le code — copy ajustée en conséquence),
stratégie i18n cookie sans nouvelle dépendance, plan de design et
terminologie FR/EN commune.

https://claude.ai/code/session_01QvjyxjHu5dA4iLTNcFgQ7h

* feat(site): socle i18n FR/EN et shell du site public

- lib/i18n : dictionnaires FR/EN typés (parité garantie par le type
  Dictionary dérivé du FR), locale par cookie bpm-locale, helpers
  serveur (getLocale/getDict) et LocaleProvider client avec bascule.
- components/site : SiteNav (liens, commutateur FR/EN, CTA app) et
  SiteFooter, entièrement alimentés par les dictionnaires.
- globals.css : couche design du site public (conteneur, nav, footer,
  typographie display, grilles accueil, focus-visible, responsive)
  construite sur les tokens --bpm-* existants.
- Root layout : <html lang> suit la locale, LocaleProvider global.

https://claude.ai/code/session_01QvjyxjHu5dA4iLTNcFgQ7h

* feat(site): page d'accueil publique FR/EN

La racine ne redirige plus vers /dashboard : elle sert le pitch produit.

- Hero : titre, promesse chiffrée depuis le registre généré (zéro
  compteur en dur), CTA démarrage/galerie, panneau démo en rendu réel
  (bpm.metric, bpm.statusTracker, bpm.liveGauge à seuils).
- Sections : positionnement métier, code Python -> rendu côte à côte,
  llms.txt pour les agents, familles du catalogue (comptes dérivés du
  registre), parcours d'installation.
- Copy intégralement servie par les dictionnaires FR/EN ; metadata et
  OpenGraph localisés ; groupe (site) avec nav et footer communs.
- Middleware : seul /settings redirige encore vers /dashboard.

https://claude.ai/code/session_01QvjyxjHu5dA4iLTNcFgQ7h

* feat(site): intègre la galerie /components au shell du site

- /components rejoint le groupe (site) : nav et footer communs, URL
  inchangée, contenu démo de la PR #12 conservé tel quel.
- Compteur dérivé de lib/generated/bpm-components.json (le « 104 » en
  dur divergeait du registre).
- Chrome bilingue : titre, légende, libellés de sections depuis les
  dictionnaires FR/EN ; aria-label sur la barre de sections.
- En-tête collant repositionné sous la nav du site ; fond #fff en dur
  remplacé par le token --bpm-bg-primary (compatible thème sombre).

https://claude.ai/code/session_01QvjyxjHu5dA4iLTNcFgQ7h

* feat(site): hub documentation et démarrage réécrits, FR/EN

- /docs : le hub remplace les trois paragraphes par une vue
  d'ensemble en cartes — démarrage, catalogue (compte dérivé du
  registre), galerie, llms.txt, changelog, prérequis production.
- /docs/getting-started : parcours linéaire honnête en trois étapes
  (le faux « code adapté au cas d'usage » disparaît), vouvoiement
  aligné sur le reste du site, aperçu live du premier composant,
  pistes suivantes (catalogue, llms.txt pour agents).
- Tout le texte vient des dictionnaires FR/EN.

https://claude.ai/code/session_01QvjyxjHu5dA4iLTNcFgQ7h

* feat(site): catalogue et fiches composants — chrome i18n, référence d'API tirée de llms.txt

- /docs/components : titre, description (compte interpolé depuis le
  registre) et recherche servis par les dictionnaires FR/EN.
- /docs/components/[slug] : la fiche dynamique affiche désormais la
  signature de props extraite de public/llms.txt (lib/llmsDoc) — la
  même source que lisent les agents, rien de saisi à la main.

https://claude.ai/code/session_01QvjyxjHu5dA4iLTNcFgQ7h

* fix(site): supprime la redirection / -> /dashboard restante dans next.config

La racine était redirigée à trois endroits (app/page.tsx, middleware,
next.config). Les deux premiers étaient déjà traités ; sans ce dernier
retrait, l'accueil public restait inaccessible (308 permanent).

https://claude.ai/code/session_01QvjyxjHu5dA4iLTNcFgQ7h

* docs: rapport de refonte du site — livré, dette, auto-critique

https://claude.ai/code/session_01QvjyxjHu5dA4iLTNcFgQ7h

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants