[Décision] Stratégie d'intégration des icônes Solaris (vendoring manuel) #1

Closed
opened 2026-08-27 10:30:29 +00:00 by srsk7896 · 1 comment
Owner

ISSUE_001 — [Décision] Stratégie d'intégration des icônes Solaris (vendoring manuel)

Problème

La charte Orange (Boosted Bootstrap) est synchronisée automatiquement dans le dépôt
via .forgejo/workflows/ressources-sync.yml. On voudrait le même confort pour les
icônes Solaris (jeu d'icônes officiel Orange, présenté sur l'icon-finder :
https://unified-design-system.orange.com/472794e18/p/03a2da-icon-finder).

Contrairement à Boosted, les icônes Solaris ne sont pas open-source et n'ont
aucune source publique de type paquet npm ou dépôt git. Il faut donc décider
et tracer comment on les intègre, en se plaçant hors réseau Orange (hypothèse
retenue : ni VPN, ni registre npm interne Orange, ni runner CI sur le réseau
Orange).

Contexte / éléments fournis

Vérifications initiales :

  • Aucun paquet npm public (@ouds/icons, solaris-icons, scope ouds… → introuvables).
  • Aucun dépôt GitHub dédié dans l'organisation Orange-OpenSource (uniquement les
    librairies de composants iOS / Android / Flutter / Web).
  • Le paquet npm boosted n'embarque aucune dépendance d'icônes.
  • Pas de CDN public (jsDelivr).
  • Le fichier boosted-sprite.svg du site de doc Boosted
    (https://boosted.orange.com/docs/5.3/assets/img/boosted-sprite.svg, ~12 Ko)
    n'est qu'un sous-ensemble curaté pour la documentation, généré au build, absent
    du dépôt git — inutilisable comme source.
  • Doc Boosted, section icônes : « They are not open-source though and should only
    be used for Orange projects. »

Élément nouveau (27/08/2026) — l'app de l'icon-finder expose deux endpoints publics :

  • GET /icons — le catalogue complet (catégories, sous-catégories, mots-clés).
  • GET /assets/svg/{slug}.svg — une icône, déjà au format du sprite officiel
    (mêmes chemins, fill="currentColor").
  • L'app est une iframe servie depuis Cloud Run :
    https://solaris-icon-finder-production-701563482613.europe-west1.run.app/
    (URL susceptible de changer quand Orange redéploie).

Ces deux endpoints suffisent à reconstruire le sprite officiel sans le réseau
Orange ni authentification. Un script Python le fait :
.ressources/orange-solaris-icons/telecharger-icones-solaris.py (télécharge les
1610 icônes en parallèle, remplace <svg> par <symbol>, normalise les
couleurs figées en currentColor, et compare au sprite précédent — identifiants
apparus / disparus).

Contrainte : hors réseau Orange — seuls les endpoints publics de l'icon-finder
sont exploitables.

Proposition / solution / réponse / action — DÉCIDÉE

Renoncer à un sync automatique de type Boosted (pas de source npm/git). Adopter un
vendoring délibéré du jeu complet, régénérable par script :

  1. Dossier .ressources/orange-solaris-icons/ contenant :
    • solaris-icons-sprite.svg : sprite SVG, jeu complet (1610 symboles, ~2,1 Mo).
      C'est le fichier utilisé par le code applicatif.
    • icones.json : catalogue complet (slug, titre, catégorie, sous-catégorie,
      style, mots-clés FR + EN) — source de vérité pour retrouver le nom d'une icône.
    • svg/ : les 1610 SVG individuels rangés par sous-catégorie (33 dossiers).
    • telecharger-icones-solaris.py : script de (re)génération.
    • README.md : licence, date d'export, méthode, identifiant d'un symbole,
      usage <use href=…#id>, procédure de mise à jour.
  2. .gitattributes : .ressources/orange-solaris-icons/** -text (verbatim, pas
    de conversion CRLF).
  3. .gitignore : aucune règle n'exclut ce dossier — rappel explicite ajouté en
    commentaire.
  4. .forgejo/workflows/README.md : section expliquant pourquoi les icônes
    échappent au sync automatique alors que Boosted en bénéficie (source non
    publique), et que le sprite est régénéré manuellement par le script.
  5. Usage dans le code applicatif :
    <svg aria-hidden="true"><use href="/…/solaris-icons-sprite.svg#navigation-arrow-left"/></svg>.
    Identifiant d'un symbole : <sous-catégorie>-<slug> en minuscules, espaces →
    traits d'union ; slug seul si la sous-catégorie est vide.
  6. Procédure de mise à jour : relancer le script (--dossier .ressources/orange-solaris-icons), qui réutilise les SVG déjà présents et
    liste les identifiants apparus / disparus. Actualiser la date d'export du
    README.md. Si le script ne répond plus : relever la nouvelle URL de l'iframe
    dans l'onglet Réseau du finder, la passer en --base.

Écart avec la version initiale de l'issue

La première rédaction retenait un sous-ensemble limité aux icônes réellement
utilisées, généré à la main depuis l'UI de l'icon-finder, sans script. Décision
révisée le 27/08/2026 : le script rend l'export complet trivial et
reproductible, ce qui évite de régénérer le sprite à chaque nouvelle icône
nécessaire. Le coût (~2,1 Mo servis via <use>) est jugé acceptable.

Le choix du mécanisme de rendu (sprite vs SVG individuels) reste à confirmer dans
_projet/ux-ui.md via l'agent .forgejo/agents/2-interface-utilisateur.md quand
ce document sera ouvert. Le jeu complet étant vendoré, aucune liste d'icônes n'est
à arbitrer.

Options identifiées

Option Faisable hors réseau Orange Confort de sync Retenue
Sync auto type Boosted (npm/git public) Non (pas de source publique) — Non
Registre npm interne Orange + runner sur réseau Orange Non (hypothèse : hors réseau) Élevé Non
Sous-ensemble SVG vendoré, généré à la main depuis l'UI Oui Manuel, à refaire à chaque icône Non (abandonnée)
Jeu complet vendoré, régénérable par script (endpoints publics de l'icon-finder) Oui Manuel mais scripté, rare Oui
CDN public Non (inexistant) — Non

Recommandation

Option « jeu complet vendoré, régénérable par script ». Seule compatible avec la
contrainte hors réseau Orange, coût faible, et le script supprime le travail
manuel répétitif de la version initiale.

Conséquences de la décision

  • Les icônes ne bénéficient pas de mises à jour automatiques : une évolution du
    jeu Solaris n'est répercutée que sur exécution manuelle du script.
  • Le dépôt reste utilisable par une personne non-Orange (le sprite est committé).
  • Rappel de licence à maintenir visible : usage réservé aux projets Orange.
  • Dépendance à l'URL de l'app Cloud Run de l'icon-finder, non contractuelle :
    elle peut changer sans préavis (procédure de récupération documentée).
  • ~2,1 Mo ajoutés au dépôt pour le sprite, + ~11 Mo pour les SVG individuels et
    le catalogue.
  • Un workflow solaris-icons-sync.yml calqué sur ressources-sync.yml devient
    envisageable (le script n'utilise que des endpoints publics) — non fait,
    candidat séparé.

Critères d'acceptation

  • Dossier .ressources/orange-solaris-icons/ créé avec solaris-icons-sprite.svg et README.md.
  • README.md du dossier : date d'export, méthode, mention de licence, procédure de mise à jour.
  • .gitattributes couvre .ressources/orange-solaris-icons/** en -text.
  • Le sprite est versionné (présent dans git ls-tree de la branche) — après commit.
  • .forgejo/workflows/README.md explique pourquoi les icônes ne sont pas synchronisées.
  • La décision (mécanisme de rendu) est reportée dans _projet/ux-ui.md lors de son ouverture.

Priorité proposée

Basse — aucun blocage tant qu'aucune interface n'est en cours de
construction. L'intégration technique est faite ; reste le commit et le report
dans _projet/ux-ui.md.

Périmètre estimé

  • Zone concernée : infrastructure (ressources vendorées) / documentation / interface
  • Impact attendu : localisé

Questions ouvertes

  • Faut-il créer le workflow solaris-icons-sync.yml maintenant, ou attendre que
    le besoin d'icônes soit réel ?
  • Le mécanisme de rendu (sprite <use> vs SVG inline vs composant) sera tranché
    dans _projet/ux-ui.md — laissé ouvert ici.

Labels proposés

  • type:decision
  • priority:low
  • area:infra
  • area:docs
  • area:ui
# ISSUE_001 — [Décision] Stratégie d'intégration des icônes Solaris (vendoring manuel) ## Problème La charte Orange (Boosted Bootstrap) est synchronisée automatiquement dans le dépôt via `.forgejo/workflows/ressources-sync.yml`. On voudrait le même confort pour les **icônes Solaris** (jeu d'icônes officiel Orange, présenté sur l'icon-finder : <https://unified-design-system.orange.com/472794e18/p/03a2da-icon-finder>). Contrairement à Boosted, les icônes Solaris **ne sont pas open-source** et n'ont **aucune source publique de type paquet npm ou dépôt git**. Il faut donc décider et tracer comment on les intègre, en se plaçant **hors réseau Orange** (hypothèse retenue : ni VPN, ni registre npm interne Orange, ni runner CI sur le réseau Orange). ## Contexte / éléments fournis Vérifications initiales : - Aucun paquet npm public (`@ouds/icons`, `solaris-icons`, scope `ouds`… → introuvables). - Aucun dépôt GitHub dédié dans l'organisation `Orange-OpenSource` (uniquement les librairies de composants iOS / Android / Flutter / Web). - Le paquet npm `boosted` n'embarque aucune dépendance d'icônes. - Pas de CDN public (jsDelivr). - Le fichier `boosted-sprite.svg` du site de doc Boosted (`https://boosted.orange.com/docs/5.3/assets/img/boosted-sprite.svg`, ~12 Ko) n'est qu'un sous-ensemble curaté pour la documentation, généré au build, absent du dépôt git — inutilisable comme source. - Doc Boosted, section icônes : *« They are not open-source though and should only be used for Orange projects. »* **Élément nouveau (27/08/2026) — l'app de l'icon-finder expose deux endpoints publics :** - `GET /icons` — le catalogue complet (catégories, sous-catégories, mots-clés). - `GET /assets/svg/{slug}.svg` — une icône, déjà au format du sprite officiel (mêmes chemins, `fill="currentColor"`). - L'app est une iframe servie depuis Cloud Run : `https://solaris-icon-finder-production-701563482613.europe-west1.run.app/` (URL susceptible de changer quand Orange redéploie). Ces deux endpoints suffisent à reconstruire le sprite officiel sans le réseau Orange ni authentification. Un script Python le fait : `.ressources/orange-solaris-icons/telecharger-icones-solaris.py` (télécharge les 1610 icônes en parallèle, remplace `<svg>` par `<symbol>`, normalise les couleurs figées en `currentColor`, et compare au sprite précédent — identifiants apparus / disparus). Contrainte : **hors réseau Orange** — seuls les endpoints publics de l'icon-finder sont exploitables. ## Proposition / solution / réponse / action — DÉCIDÉE Renoncer à un sync automatique de type Boosted (pas de source npm/git). Adopter un **vendoring délibéré du jeu complet, régénérable par script** : 1. Dossier `.ressources/orange-solaris-icons/` contenant : - `solaris-icons-sprite.svg` : sprite SVG, **jeu complet (1610 symboles, ~2,1 Mo)**. C'est le fichier utilisé par le code applicatif. - `icones.json` : catalogue complet (slug, titre, catégorie, sous-catégorie, style, mots-clés FR + EN) — source de vérité pour retrouver le nom d'une icône. - `svg/` : les 1610 SVG individuels rangés par sous-catégorie (33 dossiers). - `telecharger-icones-solaris.py` : script de (re)génération. - `README.md` : licence, date d'export, méthode, identifiant d'un symbole, usage `<use href=…#id>`, procédure de mise à jour. 2. `.gitattributes` : `.ressources/orange-solaris-icons/** -text` (verbatim, pas de conversion CRLF). 3. `.gitignore` : aucune règle n'exclut ce dossier — rappel explicite ajouté en commentaire. 4. `.forgejo/workflows/README.md` : section expliquant pourquoi les icônes échappent au sync automatique alors que Boosted en bénéficie (source non publique), et que le sprite est régénéré manuellement par le script. 5. Usage dans le code applicatif : `<svg aria-hidden="true"><use href="/…/solaris-icons-sprite.svg#navigation-arrow-left"/></svg>`. Identifiant d'un symbole : `<sous-catégorie>-<slug>` en minuscules, espaces → traits d'union ; `slug` seul si la sous-catégorie est vide. 6. Procédure de mise à jour : relancer le script (`--dossier .ressources/orange-solaris-icons`), qui réutilise les SVG déjà présents et liste les identifiants apparus / disparus. Actualiser la date d'export du `README.md`. Si le script ne répond plus : relever la nouvelle URL de l'iframe dans l'onglet Réseau du finder, la passer en `--base`. ### Écart avec la version initiale de l'issue La première rédaction retenait un **sous-ensemble** limité aux icônes réellement utilisées, généré à la main depuis l'UI de l'icon-finder, sans script. Décision révisée le 27/08/2026 : le script rend l'export **complet** trivial et reproductible, ce qui évite de régénérer le sprite à chaque nouvelle icône nécessaire. Le coût (~2,1 Mo servis via `<use>`) est jugé acceptable. Le choix du mécanisme de rendu (sprite vs SVG individuels) reste à confirmer dans `_projet/ux-ui.md` via l'agent `.forgejo/agents/2-interface-utilisateur.md` quand ce document sera ouvert. Le jeu complet étant vendoré, aucune liste d'icônes n'est à arbitrer. ## Options identifiées | Option | Faisable hors réseau Orange | Confort de sync | Retenue | |---|---|---|---| | Sync auto type Boosted (npm/git public) | Non (pas de source publique) | — | Non | | Registre npm interne Orange + runner sur réseau Orange | Non (hypothèse : hors réseau) | Élevé | Non | | Sous-ensemble SVG vendoré, généré à la main depuis l'UI | Oui | Manuel, à refaire à chaque icône | Non (abandonnée) | | **Jeu complet vendoré, régénérable par script (endpoints publics de l'icon-finder)** | Oui | Manuel mais scripté, rare | **Oui** | | CDN public | Non (inexistant) | — | Non | ## Recommandation Option « jeu complet vendoré, régénérable par script ». Seule compatible avec la contrainte hors réseau Orange, coût faible, et le script supprime le travail manuel répétitif de la version initiale. ## Conséquences de la décision - Les icônes ne bénéficient pas de mises à jour automatiques : une évolution du jeu Solaris n'est répercutée que sur exécution manuelle du script. - Le dépôt reste utilisable par une personne non-Orange (le sprite est committé). - Rappel de licence à maintenir visible : usage réservé aux projets Orange. - Dépendance à l'URL de l'app Cloud Run de l'icon-finder, non contractuelle : elle peut changer sans préavis (procédure de récupération documentée). - ~2,1 Mo ajoutés au dépôt pour le sprite, + ~11 Mo pour les SVG individuels et le catalogue. - Un workflow `solaris-icons-sync.yml` calqué sur `ressources-sync.yml` devient envisageable (le script n'utilise que des endpoints publics) — non fait, candidat séparé. ## Critères d'acceptation - [x] Dossier `.ressources/orange-solaris-icons/` créé avec `solaris-icons-sprite.svg` et `README.md`. - [x] `README.md` du dossier : date d'export, méthode, mention de licence, procédure de mise à jour. - [x] `.gitattributes` couvre `.ressources/orange-solaris-icons/**` en `-text`. - [ ] Le sprite est versionné (présent dans `git ls-tree` de la branche) — après commit. - [x] `.forgejo/workflows/README.md` explique pourquoi les icônes ne sont pas synchronisées. - [ ] La décision (mécanisme de rendu) est reportée dans `_projet/ux-ui.md` lors de son ouverture. ## Priorité proposée **Basse** — aucun blocage tant qu'aucune interface n'est en cours de construction. L'intégration technique est faite ; reste le commit et le report dans `_projet/ux-ui.md`. ## Périmètre estimé - Zone concernée : infrastructure (ressources vendorées) / documentation / interface - Impact attendu : localisé ## Questions ouvertes - Faut-il créer le workflow `solaris-icons-sync.yml` maintenant, ou attendre que le besoin d'icônes soit réel ? - Le mécanisme de rendu (sprite `<use>` vs SVG inline vs composant) sera tranché dans `_projet/ux-ui.md` — laissé ouvert ici. ## Labels proposés - `type:decision` - `priority:low` - `area:infra` - `area:docs` - `area:ui`
srsk7896 changed title from [Décision] Stratégie d'intégration des icônes Solaris (vendoring manuel) to [Décision] Stratégie d'intégration des icônes Solaris (vendoring manuel) 2026-08-27 10:31:38 +00:00
Author
Owner

Resolue. Integration technique poussee sur main dans le commit 88d9170.

  • .ressources/orange-solaris-icons/ : jeu complet (1610 symboles), sprite SVG, catalogue icones.json, 1610 SVG unitaires, script telecharger-icones-solaris.py
  • .gitattributes : dossier en -text
  • .gitignore : rappel explicite (aucune regle ne l'exclut)
  • .forgejo/workflows/README.md : section expliquant l'absence de sync auto (pas de source npm/git publique)

Decision revisee vs version initiale : jeu complet regenerable par script au lieu d'un sous-ensemble genere a la main.

Suivi restant, hors de cette issue : reporter le choix du mecanisme de rendu dans _projet/ux-ui.md via l'agent 2-interface-utilisateur.md quand ce document sera ouvert ; workflow solaris-icons-sync.yml optionnel a evaluer.

Resolue. Integration technique poussee sur main dans le commit 88d9170. - .ressources/orange-solaris-icons/ : jeu complet (1610 symboles), sprite SVG, catalogue icones.json, 1610 SVG unitaires, script telecharger-icones-solaris.py - .gitattributes : dossier en -text - .gitignore : rappel explicite (aucune regle ne l'exclut) - .forgejo/workflows/README.md : section expliquant l'absence de sync auto (pas de source npm/git publique) Decision revisee vs version initiale : jeu complet regenerable par script au lieu d'un sous-ensemble genere a la main. Suivi restant, hors de cette issue : reporter le choix du mecanisme de rendu dans _projet/ux-ui.md via l'agent 2-interface-utilisateur.md quand ce document sera ouvert ; workflow solaris-icons-sync.yml optionnel a evaluer.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
srsk7896/pipeline-vibecoding#1
No description provided.