Élévation bpm.* au standard « jugement » — interpret() + 26 composants + showcase /components#12
Merged
Merged
Conversation
…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).
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
marked this pull request as ready for review
June 11, 2026 06:24
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.tsxclassées dansdocs/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 pureinterpret(value, context) → Judgmentvalue: scalaire ou trajectoire[{t, v}](t numérique ou Date, tri interne) ;level: gap orienté pardirection(zone neutre paramétrableneutralBand, défaut ±2 %) ;trend: pente par moindres carrés, orientée (improving / flat / worsening) ;anomaly: > 2σ ducomparisonFrame;severity∈ [0,1] : 0.5×écart-défavorable-normalisé + 0.25×worsening + 0.25×abnormal ;judgmentColor,trendArrow,judgmentLabel,lastValue.packages/core/gate/interpret.test.ts(toutes les exigences de la note technique).components/showcase/registry.tsx+ renduElevationShowcaseajouté en fin de page/componentsexistante (page historique intacte).Phase 2 — Élévation (26 composants au standard)
valueaccepte v(t) ;context→ bordure jugée, ligne écart/tendance/anomalie (role=status), sparkline de mouvement<title>+ ariatrend)pointsv(t), role=img + aria-labelvalue+context→ verdict à côté du libellé, bordure jugéemeasure+context→ barre latérale jugée + ligne de verdicttrajectory, jamais de faux jugement sur valeur non numériqueinterpret().severity, verdict + % sévérité,historyv(t)value+context→ verdict mesuré pouvant diverger de la LEDhistory)historyv(t)column.context), états loading/error, densitécompact, aria-sortConventions communes : prop optionnelle
context(oucontextspar dimension/capteur/colonne),data-judgmentsur l'élément jugé,role=statusourole=img+aria-label, helpers partagés, repère pointillé pour les représentations spatiales. Appel inchangé → rendu inchangé, asserté parpackages/core/gate/elevated.test.tsx.Prises de recul (consignées dans le ledger)
lastValue(); convention de nommage de la prop trajectoire consignée.Phase 3 — Surface de test
/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.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
tododans 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).tablesert 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) etwaterfall + 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
contexts[]par axe serait plus fidèle pour le radar.iso.measuregreffe un usage KPI qui n'était peut-être pas l'intention d'origine.Route de test
npm run dev→ http://localhost:3000/components — section « Élévation — jugement & états » en bas de page.https://claude.ai/code/session_01VBK2MA3C4gotUr2x5Mtw2m
Generated by Claude Code