From e2886ccc95fafae93e58dc0c139329320d1e89ba Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 4 Nov 2026 03:44:01 +0000 Subject: [PATCH 01/11] Flowdeck 7.84.10 : barre v0.2.0, onglet ShaarIt + garde data-theme (static/css/draco-barre.css) --- static/css/draco-barre.css | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/static/css/draco-barre.css b/static/css/draco-barre.css index 08d574a..8c9927c 100644 --- a/static/css/draco-barre.css +++ b/static/css/draco-barre.css @@ -12,9 +12,18 @@ Alertes icône seule. v0.1.11 : marque = étoile Spark monochrome (blanche barre foncée, noire barre claire) ; anneau rouge #c00000 autour de l'avatar flottant. + v0.2.0 : nouvel onglet « ShaarIt » (data-app="shaarit", --app émeraude + #059669, logo logos/shaarit.svg via {{LOGO_SHAARIT}}) avant l'onglet + agent ; GARDE data-theme : les blocs prefers-color-scheme ne + s'appliquent que si n'a AUCUN attribut data-theme + (html:not([data-theme])) — avant ce correctif, un hôte ayant choisi + le clair via data-theme="light" héritait quand même du sombre + système (piège constaté dans les copies vendangées de + Kanbante/Flowdeck ; les re-vendanges de la v0.2.0 le corrigent). Jetons repris du prototype validé Console v7.2. Thème : clair par défaut, sombre via [data-theme="dark"] sur - ou prefers-color-scheme si l'app intégratrice ne force rien. */ + ou prefers-color-scheme si l'app intégratrice ne force rien + (aucun attribut data-theme sur ). */ .draco-bar { --bg: #f2f2f0; --surface: #ffffff; --surface-2: #e9eae6; --surface-3: #f6f6f3; @@ -27,8 +36,12 @@ background: var(--surface); border-bottom: 1px solid var(--line); font: 500 14px/1.3 system-ui, "Segoe UI", sans-serif; color: var(--ink); } +/* Garde data-theme (v0.2.0) : le sombre système ne s'applique QUE si + * l'hôte n'a posé aucun data-theme sur . Sans cette garde, un + * hôte en data-theme="light" sur un système sombre affichait la barre + * sombre malgré son choix explicite. */ @media (prefers-color-scheme: dark) { - .draco-bar { --bg:#101211; --surface:#1a1c1a; --surface-2:#242624; --surface-3:#20221f; + html:not([data-theme]) .draco-bar { --bg:#101211; --surface:#1a1c1a; --surface-2:#242624; --surface-3:#20221f; --ink:#eceee9; --ink-2:#a6aba2; --ink-3:#8b9089; --line:#2e302c; } } [data-theme="dark"] .draco-bar { --bg:#101211; --surface:#1a1c1a; --surface-2:#242624; --surface-3:#20221f; @@ -48,7 +61,7 @@ barre foncée (filtre annulé par les règles thème ci-dessous). */ .draco-brand-mark img { width: 26px; height: 26px; object-fit: cover; display: block; filter: brightness(0); } @media (prefers-color-scheme: dark) { - .draco-bar .draco-brand-mark img { filter: none; } + html:not([data-theme]) .draco-bar .draco-brand-mark img { filter: none; } } [data-theme="dark"] .draco-bar .draco-brand-mark img { filter: none; } @@ -218,6 +231,9 @@ .draco-bar[data-current="flowdeck"] .draco-apptab[data-app="flowdeck"], .draco-bar[data-current="tiktak"] .draco-apptab[data-app="tiktak"], .draco-bar[data-current="kanbante"] .draco-apptab[data-app="kanbante"], + /* v0.2.0 : sur ShaarIt elle-même (data-current="shaarit"), c'est + l'onglet ShaarIt qui reste visible en mobile. */ + .draco-bar[data-current="shaarit"] .draco-apptab[data-app="shaarit"], /* Chantier 5 : sur la console elle-même (data-current="agent", programme console #71), c'est l'onglet Console Spark qui reste visible en mobile — les 4 hôtes gardent leur propre courant. */ -- 2.54.0 From 4fdfc0c3859ee865f411d7063acc53057d900416 Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 4 Nov 2026 03:44:01 +0000 Subject: [PATCH 02/11] Flowdeck 7.84.10 : barre v0.2.0, onglet ShaarIt + garde data-theme (static/js/vendor/draco-barre.js) --- static/js/vendor/draco-barre.js | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/static/js/vendor/draco-barre.js b/static/js/vendor/draco-barre.js index 6ea58ca..4e77833 100644 --- a/static/js/vendor/draco-barre.js +++ b/static/js/vendor/draco-barre.js @@ -8,7 +8,12 @@ * correctif fusion #70 (SANS bump de version, publication séparée) : * bouton trois points et son menu par défaut SUPPRIMÉS, « Console Spark » * ajoutée au menu de la marque, fermeture/focus corrigés (voir - * « Menu des applications », « Focus » et « Écouteurs globaux »). + * « Menu des applications », « Focus » et « Écouteurs globaux ») ; + * v0.2.0 : 5e application ShaarIt — clé urls.shaarit, défaut officiel + * https://shaarit.dracodev.net/, dérivation -dev shaarit-dev (même + * contrat que les autres apps), entrée APP_LABELS ; l'onglet + * (data-app="shaarit", après Kanbante, avant agent) est repris + * automatiquement par la construction du menu de la marque. * * Aucun gestionnaire inline : un seul écouteur délégué sur le document * (patron validé par le prototype — les onclick du HTML généré sont @@ -26,6 +31,7 @@ * flowdeck: "https://flowdeck.dracodev.net/", * tiktak: "https://tiktak.dracodev.net/", * kanbante: "https://kanbante.dracodev.net/", + * shaarit: "https://shaarit.dracodev.net/", * agent: "https://agent.dracodev.net/", * spark: "https://spark.dracodev.net/" * }, @@ -54,10 +60,13 @@ * La clé spark ne correspond à aucun onglet de la barre : elle est * résolue et exposée via DRACO_BAR.urls pour le panneau Spark * (panneau-agent), qui suit le même contrat d'injection. La clé agent, - * elle, a un onglet depuis le chantier 5 (ordre : ObsiGate, Flowdeck, - * TikTak, Kanbante, Console Spark) : elle suit donc l'étape « href + * elle, a un onglet depuis le chantier 5 (ordre, v0.2.0 : ObsiGate, + * Flowdeck, TikTak, Kanbante, ShaarIt, Console Spark) : elle suit + * donc l'étape « href * rendu » comme les autres onglets, en plus d'alimenter le menu de - * la marque et DRACO_BAR.urls. + * la marque et DRACO_BAR.urls. Même résolution pour shaarit (v0.2.0) : + * explicite > dérivation -dev shaarit-dev > href rendu + * ({{URL_SHAARIT}}) > défaut officiel. * Actions émises (data-act) : rail, palette, domaine (data-dom), * alertes, spark, rappel-entete. L'app intégratrice décide de chacune * (ouvrir la palette, le panneau Spark, changer de domaine…). @@ -144,6 +153,7 @@ flowdeck: "https://flowdeck.dracodev.net/", tiktak: "https://tiktak.dracodev.net/", kanbante: "https://kanbante.dracodev.net/", + shaarit: "https://shaarit.dracodev.net/", agent: "https://agent.dracodev.net/", spark: "https://spark.dracodev.net/" }; @@ -157,12 +167,13 @@ flowdeck: "https://flowdeck-dev.dracodev.net/", tiktak: "https://tiktak-dev.dracodev.net/", kanbante: "https://kanbante-dev.dracodev.net/", + shaarit: "https://shaarit-dev.dracodev.net/", agent: "https://agent-dev.dracodev.net/" }; var APP_LABELS = { obsigate: "ObsiGate", flowdeck: "Flowdeck", - tiktak: "TikTak", kanbante: "Kanbante" + tiktak: "TikTak", kanbante: "Kanbante", shaarit: "ShaarIt" }; /* Vrai si hostname est un hôte -dev dracodev.net : première étiquette @@ -365,7 +376,8 @@ if (badge) a.appendChild(badge.cloneNode(true)); appsMenu.appendChild(a); }); - /* Entrée « Console Spark » (#70) : après Kanbante, vers la console + /* Entrée « Console Spark » (#70) : après les onglets d'apps + * (ObsiGate…ShaarIt, v0.2.0), vers la console * de l'agent commun (URL agent résolue — explicite > -dev > * défaut prod ; aucun hôte spark-dev inventé). data-app="agent" * l'intègre à refreshMenuHrefs/applyUrls/setCurrent comme les -- 2.54.0 From b58172dcddc2fc75909886b97af36bbfb2eaa2e0 Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 4 Nov 2026 03:44:01 +0000 Subject: [PATCH 03/11] Flowdeck 7.84.10 : barre v0.2.0, onglet ShaarIt + garde data-theme (static/img/logos/shaarit.svg) --- static/img/logos/shaarit.svg | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 static/img/logos/shaarit.svg diff --git a/static/img/logos/shaarit.svg b/static/img/logos/shaarit.svg new file mode 100644 index 0000000..7d970da --- /dev/null +++ b/static/img/logos/shaarit.svg @@ -0,0 +1,9 @@ + + + + + -- 2.54.0 From 49bc6ca54afc709d4d48409fc9ac31127feb2c5d Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 4 Nov 2026 03:44:01 +0000 Subject: [PATCH 04/11] Flowdeck 7.84.10 : barre v0.2.0, onglet ShaarIt + garde data-theme (app/templates/_draco_bar.html) --- app/templates/_draco_bar.html | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/app/templates/_draco_bar.html b/app/templates/_draco_bar.html index 51c4547..c75c4bd 100644 --- a/app/templates/_draco_bar.html +++ b/app/templates/_draco_bar.html @@ -1,7 +1,8 @@ {# Barre d'apps commune dracodev — Fusion ACC-1.1 (issue #17). - Snippet FIGÉ vendangé depuis Projets/dracodev-commons v0.1.11 - (ui/barre-apps/) : ne pas modifier la structure ici ; toute évolution - passe par une nouvelle version de commons. + Snippet FIGÉ vendangé depuis Projets/dracodev-commons v0.2.0 + (ui/barre-apps/, commit 70c837a de la branche + shaarit-phase3-barre-contrats) : ne pas modifier la structure ici ; + toute évolution passe par une nouvelle version de commons. CSS/JS : /static/css/draco-barre.css, /static/js/vendor/draco-barre.js. v7.82.0 (dev/prod) : les href des onglets ne sont plus figés — l'hôte les injecte depuis sa config (draco_urls(), noms officiels @@ -27,7 +28,15 @@ bouton avatar flottant (bordure du CSS vendangé). Thème de la barre : data-theme sur (fd_theme, défaut light) — les règles thème de commons s'appliquent, aucune surcharge propre - n'est nécessaire. #} + n'est nécessaire. + v0.2.0 : 6e onglet ShaarIt (data-app="shaarit", + draco_urls().shaarit, logo static/img/logos/shaarit.svg copie + verbatim de commons), après Kanbante et avant l'onglet agent ; + le CSS vendangé gagne la GARDE data-theme : ses blocs + prefers-color-scheme sont préfixés html:not([data-theme]) — + c'est le correctif du piège connu chez Flowdeck (barre sombre + forcée quand le système est sombre mais que fd_theme = light) : + changement de comportement visible, signalé en tête de la PR. #}
@@ -54,6 +63,10 @@ KanbanteKanban + + ShaarIt + ShaarItBookmarks + Console Spark Console SparkAgent commun -- 2.54.0 From 5508d21e0af6cd08d2f7c54198431e03fabe729c Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 4 Nov 2026 03:44:01 +0000 Subject: [PATCH 05/11] Flowdeck 7.84.10 : barre v0.2.0, onglet ShaarIt + garde data-theme (app/services/draco_urls.py) --- app/services/draco_urls.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/app/services/draco_urls.py b/app/services/draco_urls.py index 5a47707..b6a65c4 100644 --- a/app/services/draco_urls.py +++ b/app/services/draco_urls.py @@ -12,6 +12,7 @@ car il est passé par ``environment:``/``env_file:``) : DRACO_AGENT_URL=https://agent-dev.dracodev.net TIKTAK_URL=https://tiktak-dev.dracodev.net KANBANTE_URL=https://kanbante-dev.dracodev.net + SHAARIT_URL=https://shaarit-dev.dracodev.net FLOWDECK_URL=https://flowdeck-dev.dracodev.net (ou OAUTH_REDIRECT_URI) Priorité de résolution, à chaque appel (les tests et les modules qui @@ -19,15 +20,16 @@ lisaient déjà ``os.environ`` au moment de l'appel gardent ce comportement) : variable d'environnement > ``app.config.settings`` > défaut officiel. Aucun défaut ne contient ``-dev``. -**Dérivation d'environnement (v7.82.3)** — pour les quatre URL -sœurs (ObsiGate, Flowdeck, TikTak, Kanbante), entre la configuration +**Dérivation d'environnement (v7.82.3)** — pour les URL +sœurs (ObsiGate, Flowdeck, TikTak, Kanbante, et ShaarIt depuis la +barre v0.2.0), entre la configuration explicite et le défaut officiel : si l'origine de l'agent telle que l'app la connaît déjà (``AGENT_EVENEMENTS_URL``, via ``agent_evenements_url()``) a un hôte de la forme ``agent.dracodev.net`` (SUFFIXE éventuellement vide, typiquement ``-dev``), l'URL sœur est dérivée : ``https://.dracodev.net`` (slugs : ``og``, -``flowdeck``, ``tiktak``, ``kanbante``). Ainsi une installation dev +``flowdeck``, ``tiktak``, ``kanbante``, ``shaarit``). Ainsi une installation dev qui ne déclare que l'agent pointe ses liens inter-apps en ``-dev`` sans quatre variables de plus. Si l'hôte de l'agent ne correspond pas au motif (autre domaine, LAN, IP), **aucune dérivation** : on @@ -94,6 +96,7 @@ OFFICIELLES = { "agent": "https://agent.dracodev.net", "tiktak": "https://tiktak.dracodev.net", "kanbante": "https://kanbante.dracodev.net", + "shaarit": "https://shaarit.dracodev.net", "flowdeck": "https://flowdeck.dracodev.net", "gitea": "https://git.dracodev.net", } @@ -119,6 +122,7 @@ _SLUGS_SOEURS = { "flowdeck": "flowdeck", "tiktak": "tiktak", "kanbante": "kanbante", + "shaarit": "shaarit", } # Hôte de l'agent : agent.dracodev.net (SUFFIXE = ``-dev``…). @@ -274,6 +278,10 @@ def kanbante_url() -> str: return _resoudre_soeur("KANBANTE_URL", "kanbante_url", "kanbante") +def shaarit_url() -> str: + return _resoudre_soeur("SHAARIT_URL", "shaarit_url", "shaarit") + + def gitea_url() -> str: return _resoudre("GITEA_URL", "gitea_url", "gitea") @@ -356,6 +364,7 @@ def toutes() -> dict[str, str]: "agent": agent_url(), "tiktak": tiktak_url(), "kanbante": kanbante_url(), + "shaarit": shaarit_url(), "flowdeck": flowdeck_url(), "gitea": gitea_url(), } -- 2.54.0 From 6eccacd9821fee1ec6cc803caf50b5cecd4b9c5d Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 4 Nov 2026 03:44:01 +0000 Subject: [PATCH 06/11] Flowdeck 7.84.10 : barre v0.2.0, onglet ShaarIt + garde data-theme (app/config.py) --- app/config.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/config.py b/app/config.py index d45a8e9..b4445e3 100644 --- a/app/config.py +++ b/app/config.py @@ -156,6 +156,7 @@ class Settings(BaseSettings): # DRACO_AGENT_URL=https://agent-dev.dracodev.net # TIKTAK_URL=https://tiktak-dev.dracodev.net # KANBANTE_URL=https://kanbante-dev.dracodev.net + # SHAARIT_URL=https://shaarit-dev.dracodev.net # FLOWDECK_URL=https://flowdeck-dev.dracodev.net draco_sso_url: str = "https://og.dracodev.net" # ObsiGate (émettrice SSO) # ── Coffre ObsiGate, côté consommateur Flowdeck (Phase 4, issue #22) ── @@ -168,6 +169,7 @@ class Settings(BaseSettings): draco_agent_url: str = "https://agent.dracodev.net" # service d'agents (Spark) tiktak_url: str = "https://tiktak.dracodev.net" kanbante_url: str = "https://kanbante.dracodev.net" + shaarit_url: str = "https://shaarit.dracodev.net" # URL publique de CETTE instance ; vide = dérivée de # OAUTH_REDIRECT_URI, puis d'APP_BASE_URL (si non locale), puis du # nom officiel. -- 2.54.0 From 1e733f3662a3c2fe51363fac1e53ba3dc1502b16 Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 4 Nov 2026 03:44:01 +0000 Subject: [PATCH 07/11] Flowdeck 7.84.10 : barre v0.2.0, onglet ShaarIt + garde data-theme (.env.example) --- .env.example | 1 + 1 file changed, 1 insertion(+) diff --git a/.env.example b/.env.example index 7d0b963..a2ce453 100644 --- a/.env.example +++ b/.env.example @@ -38,6 +38,7 @@ OBSIGATE_CONSUMER_TOKEN= DRACO_AGENT_URL= # Service d'agents Spark — défaut https://agent.dracodev.net ; dev : https://agent-dev.dracodev.net TIKTAK_URL= # TikTak (preset MCP, barre, refs) — défaut https://tiktak.dracodev.net ; dev : https://tiktak-dev.dracodev.net KANBANTE_URL= # Kanbante (barre, refs) — défaut https://kanbante.dracodev.net ; dev : https://kanbante-dev.dracodev.net +SHAARIT_URL= # ShaarIt (barre v0.2.0) — défaut https://shaarit.dracodev.net ; dev : https://shaarit-dev.dracodev.net FLOWDECK_URL= # URL publique de CETTE instance — défaut : dérivée d'OAUTH_REDIRECT_URI, sinon https://flowdeck.dracodev.net ; dev : https://flowdeck-dev.dracodev.net # SSO draco (Fusion ACC-3.2) — secret partagé avec l'émettrice ObsiGate. DRACO_SESSION_SECRET= -- 2.54.0 From 4b1888eebbc1606da23a4f2e6ed5da4344c851a0 Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 4 Nov 2026 03:44:01 +0000 Subject: [PATCH 08/11] Flowdeck 7.84.10 : barre v0.2.0, onglet ShaarIt + garde data-theme (tests/test_draco_bar_texte.py) --- tests/test_draco_bar_texte.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/test_draco_bar_texte.py b/tests/test_draco_bar_texte.py index 51c5945..527e83a 100644 --- a/tests/test_draco_bar_texte.py +++ b/tests/test_draco_bar_texte.py @@ -33,6 +33,26 @@ def test_aucun_texte_chantier_rendu(): assert rendu.lstrip().startswith("")[0] + assert nav.index('data-app="kanbante"') < nav.index('data-app="shaarit"') + assert nav.index('data-app="shaarit"') < nav.index('data-app="agent"') + assert 'href="{{ draco_urls().shaarit }}/"' in nav + assert 'data-icon="shaarit"> Date: Wed, 4 Nov 2026 03:44:01 +0000 Subject: [PATCH 09/11] Flowdeck 7.84.10 : barre v0.2.0, onglet ShaarIt + garde data-theme (tests/test_draco_urls_devprod.py) --- tests/test_draco_urls_devprod.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/tests/test_draco_urls_devprod.py b/tests/test_draco_urls_devprod.py index bfd860c..cd24444 100644 --- a/tests/test_draco_urls_devprod.py +++ b/tests/test_draco_urls_devprod.py @@ -12,7 +12,8 @@ import pytest from app.services import draco_urls VARS = ("DRACO_SSO_URL", "DRACO_AGENT_URL", "TIKTAK_URL", "KANBANTE_URL", - "FLOWDECK_URL", "OAUTH_REDIRECT_URI", "AGENT_EVENEMENTS_URL") + "SHAARIT_URL", "FLOWDECK_URL", "OAUTH_REDIRECT_URI", + "AGENT_EVENEMENTS_URL") @pytest.fixture(autouse=True) @@ -45,6 +46,23 @@ def test_surcharge_dev_par_env(monkeypatch): assert urls["flowdeck"] == "https://flowdeck-dev.dracodev.net" +def test_shaarit_defaut_derivation_et_explicite(monkeypatch, avec_hote): + # Barre v0.2.0 : ShaarIt suit le même mécanisme que les autres + # sœurs — défaut officiel, dérivation -dev (agent connu puis + # hôte de la requête), explicite prioritaire. + assert draco_urls.shaarit_url() == "https://shaarit.dracodev.net" + assert draco_urls.toutes()["shaarit"] == "https://shaarit.dracodev.net" + monkeypatch.setenv( + "AGENT_EVENEMENTS_URL", + "https://agent-dev.dracodev.net/api/v1/evenements") + assert draco_urls.shaarit_url() == "https://shaarit-dev.dracodev.net" + monkeypatch.delenv("AGENT_EVENEMENTS_URL") + avec_hote("flowdeck-dev.dracodev.net") + assert draco_urls.shaarit_url() == "https://shaarit-dev.dracodev.net" + monkeypatch.setenv("SHAARIT_URL", "https://bm.example.net/") + assert draco_urls.shaarit_url() == "https://bm.example.net" + + def test_flowdeck_url_derivée_oauth_redirect(monkeypatch): monkeypatch.setenv( "OAUTH_REDIRECT_URI", "https://flowdeck-dev.dracodev.net/auth/callback") -- 2.54.0 From 73cd12d9de2940458eccafc03d204d73f8662298 Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 4 Nov 2026 03:44:01 +0000 Subject: [PATCH 10/11] Flowdeck 7.84.10 : barre v0.2.0, onglet ShaarIt + garde data-theme (VERSION) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 4bdbefb..0ef358b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -7.84.9 +7.84.10 -- 2.54.0 From e24b2a9495d4a811d2733426d22005c05d711076 Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 4 Nov 2026 03:44:01 +0000 Subject: [PATCH 11/11] Flowdeck 7.84.10 : barre v0.2.0, onglet ShaarIt + garde data-theme (CHANGELOG.md) --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ffc5cd..e0cdd4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## v7.84.10 (2026-11-03) — Barre commune v0.2.0 : onglet ShaarIt, garde data-theme + +- **Barre d'apps v0.2.0 vendangée (dracodev-commons @70c837a)** : `static/css/draco-barre.css` et `static/js/vendor/draco-barre.js` remplacés verbatim par la v0.2.0 (hachages SHA-256 vérifiés contre la source) ; fragment `app/templates/_draco_bar.html` porté à la v0.2.0, le reste de son intégration Flowdeck (URL `draco_urls()`, `onAction`, nonce CSP, `asset_version`) est inchangé. +- **Onglet ShaarIt** : 5e application (bookmarks, réécriture Rust de Shaarli) — nouvel onglet `data-app="shaarit"` après Kanbante et avant l'onglet Console Spark, logo `static/img/logos/shaarit.svg` ajouté tel quel (copie verbatim de `ui/barre-apps/logos/` de commons). Le menu de la marque, construit depuis les onglets, l'inclut automatiquement. +- **URL ShaarIt par le même mécanisme que les autres** : `app/services/draco_urls.py` gagne la clé `shaarit` (défaut officiel `https://shaarit.dracodev.net` ; explicite `SHAARIT_URL` / `settings.shaarit_url` ; dérivation par l'hôte de la requête et par l'hôte de l'agent : `shaarit-dev` en dev) et `draco_urls().shaarit` alimente le href de l'onglet — aucune URL codée en dur hors des défauts officiels du résolveur. +- **⚠️ Changement de comportement visible — garde `data-theme`** : le CSS v0.2.0 préfixe ses blocs `prefers-color-scheme` par `html:not([data-theme])`. La copie v0.1.11 n'avait pas cette garde : c'est le **piège connu de Flowdeck** — système en mode sombre + `fd_theme` clair (`data-theme="light"` posé) ⇒ la barre s'affichait quand même en sombre. La re-vendange corrige ce point : la barre suit désormais le thème choisi dans l'app. Signalé en tête de la PR pour arbitrage à la fusion. +- **Cache** : le bump 7.84.9 → 7.84.10 change aussi `asset_version`, donc les navigateurs ne garderont pas l'ancienne barre. + ## v7.84.9 (2026-10-29) — Barre commune : marque monochrome, anneau rouge avatar - **Barre d'apps v0.1.11 vendangée (dracodev-commons)** : `static/css/draco-barre.css` remplacé verbatim par la v0.1.11 ; `static/js/vendor/draco-barre.js` inchangé (déjà identique à commons, JS inchangé en v0.1.11) ; fragment `app/templates/_draco_bar.html` porté à la v0.1.11, le reste de son intégration Flowdeck (URL `draco_urls()`, `onAction`, nonce CSP, `asset_version`) est inchangé. -- 2.54.0