⚠ CHANGEMENT DE COMPORTEMENT VISIBLE — garde data-theme (arbitrage de Bruno à la fusion)
Avant cette PR : le CSS de barre vendangé chez Kanbante (v0.1.11) n'avait aucune garde — dès que le système était en mode sombre, @media (prefers-color-scheme: dark) forçait la barre sombre, même si l'app était en thème clair explicite (html[data-theme="light"]). Barre sombre sur app claire.
Après cette PR : la barre commons v0.2.0 garde ses deux blocs prefers-color-scheme par html:not([data-theme]) — le sombre système ne s'applique que si <html> n'a aucundata-theme. Kanbante posant toujours html[data-theme] (sombre par défaut, bascule mémorisée kanbante-theme), sa barre suivra désormais toujours le thème choisi dans l'app. C'est le correctif du piège documenté (déjà corrigé localement chez TikTak en 0.61.12 ; ici il arrive par la re-vendange, sans aucune surcharge style.css). À valider visuellement à la fusion : poste en système sombre + Kanbante en thème clair → la barre doit être claire.
Re-vendange de la barre d'apps dracodev-commons v0.2.0 (source : branche shaarit-phase3-barre-contrats, commit 70c837a1734939b76d35a9679708e88456726f52, PR commons #7) dans Kanbante, qui vendangeait la v0.1.11 (0.45.3). Aucune fusion, aucune release — la fusion reste l'acte de Bruno.
Verbatim — preuve par hachages SHA-256 (source @70c837a vs copie vendangée)
Le fragment HTML n'est pas une copie verbatim — comme pour toutes les vendanges Kanbante précédentes, l'hôte adapte le fragment : les jetons {{URL_…}} / {{LOGO_…}} de commons sont remplacés par le mécanisme en place (Jinja draco_urls / agent_url depuis app.config, draco_avatar, bloc DRACO_BAR_CONFIG et onAction Kanbante complet). La structure passe exactement à la v0.2.0 (onglet ShaarIt aux mêmes place, couleur et libellés). Les hachages des trois assets sont aussi assertés par tests/test_barre_v020.py.
Onglet ShaarIt et dérivation de l'URL — aucun nom codé en dur
Nouvel onglet data-app="shaarit", après Kanbante, avant Console Spark, couleur émeraude #059669, logo shaarit.svg ; le menu de la marque l'inclut automatiquement. Le palier mobile du CSS gagne la règle data-current="shaarit" (sans effet chez Kanbante, hôte kanbante).
app/config.py gagne le champ shaarit_url (Settings + UrlsDraco), résolu par le même mécanisme que les autres apps : 1) explicite DRACO_SHAARIT_URL ; 2) hôte public de la requête (motif fermé étendu : shaarit ajouté au motif (og|flowdeck|tiktak|kanbante|shaarit|agent)<SUFFIXE>.dracodev.net, donc shaarit-dev.dracodev.net reconnu comme hôte et comme sœur) ; 3) dérivation depuis les adresses de l'agent connues (_url_soeur_draco, suffixe de AGENT_EVENEMENTS_URL / AGENT_URL) ; 4) défaut officiel https://shaarit.dracodev.net (dev dérivée : https://shaarit-dev.dracodev.net). app/main.py expose draco_urls.shaarit au gabarit ; .env.example documente la variable (prod + exemple dev). Le JS vendangé résout en plus urls.shaarit côté client.
Garde data-theme — avant / après (preuve)
Bloc @media (prefers-color-scheme: dark)
Avant (v0.1.11 vendangée)
Après (v0.2.0 vendangée)
Variables .draco-bar
.draco-bar { … } — non gardé
html:not([data-theme]) .draco-bar { … } — gardé
Marque .draco-brand-mark img
.draco-bar .draco-brand-mark img { filter: none; } — non gardé
Asserté par tests/test_barre_v020.py::test_garde_data_theme_apportee_par_la_v020.
Version et tests
0.45.5 → 0.45.6 selon la convention du dépôt : APP_VERSION dans app/config.py + entrée CHANGELOG.md (le pyproject.toml, resté à 0.37.1, n'est pas le fichier de version suivi — inchangé, comme lors des re-vendanges précédentes).
Suite complète : 377/377 (python -m pytest tests/ -q), dont tests/test_barre_v020.py (nouveau, 8 tests : verbatim, garde, défaut/dérivation/explicite/hôte de requête, onglet dans le rendu) et tests/test_draco_barre.py (21 tests, inchangé, vert — ses énumérations d'URL restent vraies par présence).
Écarts / notes
La base de cette branche est main @1cd66fd (0.45.5 fusionnée, PR #77) — revérifiée juste avant le push, aucun commit parallèle à réintégrer.
Rien d'autre n'est touché : ni draco-alertes.*, ni draco-panneau.*, ni les surcharges style.css de Kanbante.
Rappel de contexte (hors périmètre de cette PR) : le redéploiement du conteneur Kanbante restait à faire pour la 0.45.5 ; cette re-vendange n'ajoute aucun changement de configuration — à la fusion, un seul redéploiement suffira pour 0.45.5 + 0.45.6.
## ⚠ CHANGEMENT DE COMPORTEMENT VISIBLE — garde `data-theme` (arbitrage de Bruno à la fusion)
**Avant cette PR** : le CSS de barre vendangé chez Kanbante (v0.1.11) n'avait **aucune garde** — dès que le **système** était en mode sombre, `@media (prefers-color-scheme: dark)` forçait la barre sombre, **même si l'app était en thème clair explicite** (`html[data-theme="light"]`). Barre sombre sur app claire.
**Après cette PR** : la barre commons **v0.2.0** garde ses deux blocs `prefers-color-scheme` par `html:not([data-theme])` — le sombre système ne s'applique que si `<html>` n'a **aucun** `data-theme`. Kanbante posant toujours `html[data-theme]` (sombre par défaut, bascule mémorisée `kanbante-theme`), **sa barre suivra désormais toujours le thème choisi dans l'app**. C'est le correctif du piège documenté (déjà corrigé localement chez TikTak en 0.61.12 ; ici il arrive par la re-vendange, sans aucune surcharge `style.css`). **À valider visuellement à la fusion** : poste en système sombre + Kanbante en thème clair → la barre doit être claire.
---
## Kanbante 0.45.6 — Barre commune v0.2.0 : onglet ShaarIt (phase 3 ShaarIt, vague 3b)
Re-vendange de la barre d'apps **dracodev-commons v0.2.0** (source : branche `shaarit-phase3-barre-contrats`, commit **`70c837a1734939b76d35a9679708e88456726f52`**, PR commons #7) dans Kanbante, qui vendangeait la **v0.1.11** (0.45.3). **Aucune fusion, aucune release** — la fusion reste l'acte de Bruno.
### Verbatim — preuve par hachages SHA-256 (source @70c837a vs copie vendangée)
| Fichier commons (source) | SHA-256 source | Copie Kanbante | SHA-256 copie |
|---|---|---|---|
| `ui/barre-apps/barre-apps.css` | `abc0c3b2a282566013bd121b0c46b133700f20be78cf44128bebdf19b7e05fab` | `static/css/draco-barre.css` | `abc0c3b2a282566013bd121b0c46b133700f20be78cf44128bebdf19b7e05fab` ✅ |
| `ui/barre-apps/barre-apps.js` | `24efe399823eed21add535c081ea153ae97afe128744aed9b628cf855e6b50e1` | `static/js/draco-barre.js` | `24efe399823eed21add535c081ea153ae97afe128744aed9b628cf855e6b50e1` ✅ |
| `ui/barre-apps/logos/shaarit.svg` | `faf0c8a17e7cb82d0884f598eadf2c4fee7a603bfdc3a2ecfdac1e750316db34` | `static/img/logos/shaarit.svg` (nouveau) | `faf0c8a17e7cb82d0884f598eadf2c4fee7a603bfdc3a2ecfdac1e750316db34` ✅ |
| `ui/barre-apps/barre-apps.html` | `d41854870ea9974a0b74dc86a61386bec11c3a21ed70aaffc0d51d83a4dbe45d` | `app/templates/_draco_bar.html` | *adapté (voir ci-dessous)* |
Le fragment HTML n'est **pas** une copie verbatim — comme pour toutes les vendanges Kanbante précédentes, l'hôte adapte le fragment : les jetons `{{URL_…}}` / `{{LOGO_…}}` de commons sont remplacés par le mécanisme en place (Jinja `draco_urls` / `agent_url` depuis `app.config`, `draco_avatar`, bloc `DRACO_BAR_CONFIG` et `onAction` Kanbante complet). La structure passe exactement à la v0.2.0 (onglet ShaarIt aux mêmes place, couleur et libellés). Les hachages des trois assets sont aussi assertés par `tests/test_barre_v020.py`.
### Onglet ShaarIt et dérivation de l'URL — aucun nom codé en dur
- Nouvel onglet `data-app="shaarit"`, **après Kanbante, avant Console Spark**, couleur émeraude `#059669`, logo `shaarit.svg` ; le menu de la marque l'inclut automatiquement. Le palier mobile du CSS gagne la règle `data-current="shaarit"` (sans effet chez Kanbante, hôte `kanbante`).
- `app/config.py` gagne le champ **`shaarit_url`** (`Settings` + `UrlsDraco`), résolu par **le même mécanisme que les autres apps** : 1) explicite `DRACO_SHAARIT_URL` ; 2) hôte public de la requête (motif fermé étendu : `shaarit` ajouté au motif `(og|flowdeck|tiktak|kanbante|shaarit|agent)<SUFFIXE>.dracodev.net`, donc `shaarit-dev.dracodev.net` reconnu comme hôte et comme sœur) ; 3) dérivation depuis les adresses de l'agent connues (`_url_soeur_draco`, suffixe de `AGENT_EVENEMENTS_URL` / `AGENT_URL`) ; 4) défaut officiel **`https://shaarit.dracodev.net`** (dev dérivée : **`https://shaarit-dev.dracodev.net`**). `app/main.py` expose `draco_urls.shaarit` au gabarit ; `.env.example` documente la variable (prod + exemple dev). Le JS vendangé résout en plus `urls.shaarit` côté client.
### Garde `data-theme` — avant / après (preuve)
| Bloc `@media (prefers-color-scheme: dark)` | Avant (v0.1.11 vendangée) | Après (v0.2.0 vendangée) |
|---|---|---|
| Variables `.draco-bar` | `.draco-bar { … }` — **non gardé** | `html:not([data-theme]) .draco-bar { … }` — **gardé** |
| Marque `.draco-brand-mark img` | `.draco-bar .draco-brand-mark img { filter: none; }` — **non gardé** | `html:not([data-theme]) .draco-bar .draco-brand-mark img { filter: none; }` — **gardé** |
| Sombre forcé `[data-theme="dark"]` | présent | présent, inchangé |
Asserté par `tests/test_barre_v020.py::test_garde_data_theme_apportee_par_la_v020`.
### Version et tests
- **0.45.5 → 0.45.6** selon la convention du dépôt : `APP_VERSION` dans `app/config.py` + entrée `CHANGELOG.md` (le `pyproject.toml`, resté à 0.37.1, n'est pas le fichier de version suivi — inchangé, comme lors des re-vendanges précédentes).
- Suite complète : **377/377** (`python -m pytest tests/ -q`), dont `tests/test_barre_v020.py` (nouveau, 8 tests : verbatim, garde, défaut/dérivation/explicite/hôte de requête, onglet dans le rendu) et `tests/test_draco_barre.py` (21 tests, inchangé, vert — ses énumérations d'URL restent vraies par présence).
### Écarts / notes
- La base de cette branche est `main` @`1cd66fd` (0.45.5 fusionnée, PR #77) — revérifiée juste avant le push, aucun commit parallèle à réintégrer.
- Rien d'autre n'est touché : ni `draco-alertes.*`, ni `draco-panneau.*`, ni les surcharges `style.css` de Kanbante.
- Rappel de contexte (hors périmètre de cette PR) : le redéploiement du conteneur Kanbante restait à faire pour la 0.45.5 ; cette re-vendange n'ajoute aucun changement de configuration — à la fusion, un seul redéploiement suffira pour 0.45.5 + 0.45.6.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
⚠ CHANGEMENT DE COMPORTEMENT VISIBLE — garde
data-theme(arbitrage de Bruno à la fusion)Avant cette PR : le CSS de barre vendangé chez Kanbante (v0.1.11) n'avait aucune garde — dès que le système était en mode sombre,
@media (prefers-color-scheme: dark)forçait la barre sombre, même si l'app était en thème clair explicite (html[data-theme="light"]). Barre sombre sur app claire.Après cette PR : la barre commons v0.2.0 garde ses deux blocs
prefers-color-schemeparhtml:not([data-theme])— le sombre système ne s'applique que si<html>n'a aucundata-theme. Kanbante posant toujourshtml[data-theme](sombre par défaut, bascule mémoriséekanbante-theme), sa barre suivra désormais toujours le thème choisi dans l'app. C'est le correctif du piège documenté (déjà corrigé localement chez TikTak en 0.61.12 ; ici il arrive par la re-vendange, sans aucune surchargestyle.css). À valider visuellement à la fusion : poste en système sombre + Kanbante en thème clair → la barre doit être claire.Kanbante 0.45.6 — Barre commune v0.2.0 : onglet ShaarIt (phase 3 ShaarIt, vague 3b)
Re-vendange de la barre d'apps dracodev-commons v0.2.0 (source : branche
shaarit-phase3-barre-contrats, commit70c837a1734939b76d35a9679708e88456726f52, PR commons #7) dans Kanbante, qui vendangeait la v0.1.11 (0.45.3). Aucune fusion, aucune release — la fusion reste l'acte de Bruno.Verbatim — preuve par hachages SHA-256 (source @70c837a vs copie vendangée)
ui/barre-apps/barre-apps.cssabc0c3b2a282566013bd121b0c46b133700f20be78cf44128bebdf19b7e05fabstatic/css/draco-barre.cssabc0c3b2a282566013bd121b0c46b133700f20be78cf44128bebdf19b7e05fab✅ui/barre-apps/barre-apps.js24efe399823eed21add535c081ea153ae97afe128744aed9b628cf855e6b50e1static/js/draco-barre.js24efe399823eed21add535c081ea153ae97afe128744aed9b628cf855e6b50e1✅ui/barre-apps/logos/shaarit.svgfaf0c8a17e7cb82d0884f598eadf2c4fee7a603bfdc3a2ecfdac1e750316db34static/img/logos/shaarit.svg(nouveau)faf0c8a17e7cb82d0884f598eadf2c4fee7a603bfdc3a2ecfdac1e750316db34✅ui/barre-apps/barre-apps.htmld41854870ea9974a0b74dc86a61386bec11c3a21ed70aaffc0d51d83a4dbe45dapp/templates/_draco_bar.htmlLe fragment HTML n'est pas une copie verbatim — comme pour toutes les vendanges Kanbante précédentes, l'hôte adapte le fragment : les jetons
{{URL_…}}/{{LOGO_…}}de commons sont remplacés par le mécanisme en place (Jinjadraco_urls/agent_urldepuisapp.config,draco_avatar, blocDRACO_BAR_CONFIGetonActionKanbante complet). La structure passe exactement à la v0.2.0 (onglet ShaarIt aux mêmes place, couleur et libellés). Les hachages des trois assets sont aussi assertés partests/test_barre_v020.py.Onglet ShaarIt et dérivation de l'URL — aucun nom codé en dur
data-app="shaarit", après Kanbante, avant Console Spark, couleur émeraude#059669, logoshaarit.svg; le menu de la marque l'inclut automatiquement. Le palier mobile du CSS gagne la règledata-current="shaarit"(sans effet chez Kanbante, hôtekanbante).app/config.pygagne le champshaarit_url(Settings+UrlsDraco), résolu par le même mécanisme que les autres apps : 1) expliciteDRACO_SHAARIT_URL; 2) hôte public de la requête (motif fermé étendu :shaaritajouté au motif(og|flowdeck|tiktak|kanbante|shaarit|agent)<SUFFIXE>.dracodev.net, doncshaarit-dev.dracodev.netreconnu comme hôte et comme sœur) ; 3) dérivation depuis les adresses de l'agent connues (_url_soeur_draco, suffixe deAGENT_EVENEMENTS_URL/AGENT_URL) ; 4) défaut officielhttps://shaarit.dracodev.net(dev dérivée :https://shaarit-dev.dracodev.net).app/main.pyexposedraco_urls.shaaritau gabarit ;.env.exampledocumente la variable (prod + exemple dev). Le JS vendangé résout en plusurls.shaaritcôté client.Garde
data-theme— avant / après (preuve)@media (prefers-color-scheme: dark).draco-bar.draco-bar { … }— non gardéhtml:not([data-theme]) .draco-bar { … }— gardé.draco-brand-mark img.draco-bar .draco-brand-mark img { filter: none; }— non gardéhtml:not([data-theme]) .draco-bar .draco-brand-mark img { filter: none; }— gardé[data-theme="dark"]Asserté par
tests/test_barre_v020.py::test_garde_data_theme_apportee_par_la_v020.Version et tests
APP_VERSIONdansapp/config.py+ entréeCHANGELOG.md(lepyproject.toml, resté à 0.37.1, n'est pas le fichier de version suivi — inchangé, comme lors des re-vendanges précédentes).python -m pytest tests/ -q), donttests/test_barre_v020.py(nouveau, 8 tests : verbatim, garde, défaut/dérivation/explicite/hôte de requête, onglet dans le rendu) ettests/test_draco_barre.py(21 tests, inchangé, vert — ses énumérations d'URL restent vraies par présence).Écarts / notes
main@1cd66fd(0.45.5 fusionnée, PR #77) — revérifiée juste avant le push, aucun commit parallèle à réintégrer.draco-alertes.*, nidraco-panneau.*, ni les surchargesstyle.cssde Kanbante.