diff --git a/CHANGELOG.md b/CHANGELOG.md index 91b0b43..810a192 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## 0.45.9 — 2026-11-04 — Barre commune v0.3.0 : liens Hub du menu compte (HUB-1) + +- **⚠ CHANGEMENT DE COMPORTEMENT VISIBLE — « Profil » du menu compte ne mène plus à `/profile`** : Kanbante était le seul hôte à traiter l'action relayée `profil` (vers sa page `/profile` propre). La barre v0.3.0 fait de Profil un **lien vers le Hub** (`/profil`) — décision du plan Hub : un seul Profil, celui du Hub. La branche `onAction("profil")` du gabarit `_draco_bar.html` est donc **retirée**. La page `/profile` elle-même **continue d'exister** (jetons API, réglages du compte Kanbante) et reste joignable par son URL ; « Déconnexion » reste relayée vers `/logout`, inchangée. Signalé explicitement pour arbitrage à la fusion. +- **Barre d'apps v0.3.0 vendangée (dracodev-commons, branche `hub-menu-compte-v0-3-0`, PR commons #9)** : `static/css/draco-barre.css` et `static/js/draco-barre.js` remplacés **verbatim** — SHA-256 CSS `4ac2ed2e…9475b0`, JS `9d84617b…6c74da5` (preuve dans `tests/test_barre_v030.py`). Fragment `_draco_bar.html` porté selon le mécanisme d'adaptation Kanbante existant. +- **Menu compte** : liens **Télécharger**, **À Propos**, **Aides** et **Profil** construits par le JS vendangé depuis la base Hub résolue. Le Hub n'a pas d'onglet. +- **URL Hub par le même mécanisme que les autres apps** (`app.config` : champ `hub_url` dans `Settings` et `UrlsDraco`) : explicite `DRACO_HUB_URL` > hôte public de la requête (motif fermé étendu à `hub.dracodev.net`) > dérivation depuis les adresses de l'agent connues > défaut officiel `https://hub.dracodev.net` (dev : `https://hub-dev.dracodev.net`). `app/main.py` expose `draco_urls.hub` au gabarit, passé en `urls.hub`. +- **Cache** : le bump 0.45.8 → 0.45.9 resynchronise `APP_VERSION` (restée à 0.45.7 dans le code après le correctif 0.45.8, qui n'avait bumpé que le fichier `VERSION`) et change le `?v=` des CSS/JS de la barre. +- Tests : `tests/test_barre_v030.py` (verbatim v0.3.0, résolution Hub, gabarit sans branche `profil`, `/profile` toujours routée) ; le test d'empreinte v0.2.0 de `tests/test_barre_v020.py` devient une preuve de supersession. + ## 0.45.7 — 2026-11-04 — Recherche fédérée : ShaarIt, 5e source de « Rechercher partout » - **`recherche.js` re-vendangé depuis dracodev-commons v0.2.1** (source canonique `ui/recherche/`) : ShaarIt devient une source de la page `/recherche` comme les autres — bases prod/dev, onglet, normaliseur (lien profond canonique `{base}shaare/`, contexte « Bookmark · privé · tags », repli recherche native `/?q=`). Le fichier reste **strictement identique** chez les cinq hôtes. diff --git a/app/config.py b/app/config.py index 3bd3090..675557b 100644 --- a/app/config.py +++ b/app/config.py @@ -237,7 +237,7 @@ def _env_wip_limits(name: str) -> dict[str, int]: # du service (élargie en 0.32.2) ; 4) défaut officiel. _MOTIF_HOTE_AGENT = re.compile(r"agent([a-z0-9-]*)\.dracodev\.net") _MOTIF_HOTE_PUBLIC = re.compile( - r"(?:og|flowdeck|tiktak|kanbante|shaarit|agent)([a-z0-9-]*)\.dracodev\.net" + r"(?:og|flowdeck|tiktak|kanbante|shaarit|agent|hub)([a-z0-9-]*)\.dracodev\.net" ) @@ -312,6 +312,7 @@ class UrlsDraco: flowdeck_url: str tiktak_url: str shaarit_url: str # ShaarIt (barre v0.2.0 ; explicite = DRACO_SHAARIT_URL) + hub_url: str # Hub (barre v0.3.0 ; explicite = DRACO_HUB_URL) public_url: str # Kanbante elle-même (KANBANTE_PUBLIC_URL) agent_url: str # base du service d'agents (panneau + CSP) @@ -353,6 +354,7 @@ def resoudre_urls_draco( shaarit_url=resoudre( "DRACO_SHAARIT_URL", "shaarit", base.shaarit_url ), + hub_url=resoudre("DRACO_HUB_URL", "hub", base.hub_url), public_url=resoudre( "KANBANTE_PUBLIC_URL", "kanbante", base.public_url ), @@ -403,6 +405,7 @@ class Settings: flowdeck_url: str = "https://flowdeck.dracodev.net" tiktak_url: str = "https://tiktak.dracodev.net" shaarit_url: str = "https://shaarit.dracodev.net" + hub_url: str = "https://hub.dracodev.net" agent_url: str = "https://agent.dracodev.net" archive_suggest_days: int = 180 agent_evenements_url: str = "https://agent.dracodev.net/api/v1/evenements" @@ -513,6 +516,12 @@ def _env_settings() -> Settings: "https://shaarit.dracodev.net", suffixe_agent, ), + hub_url=_url_soeur_draco( + "DRACO_HUB_URL", + "hub", + "https://hub.dracodev.net", + suffixe_agent, + ), agent_url=agent_url, archive_suggest_days=_env_int("KANBANTE_ARCHIVE_SUGGEST_DAYS", 180), agent_evenements_url=agent_evenements_url, diff --git a/app/main.py b/app/main.py index 1b894dc..57d47c0 100644 --- a/app/main.py +++ b/app/main.py @@ -2251,6 +2251,7 @@ def render( "tiktak": _urls.tiktak_url, "kanbante": _urls.public_url, "shaarit": _urls.shaarit_url, + "hub": _urls.hub_url, }, ) context.setdefault("agent_url", _urls.agent_url) diff --git a/app/templates/_draco_bar.html b/app/templates/_draco_bar.html index 706c3f2..842396a 100644 --- a/app/templates/_draco_bar.html +++ b/app/templates/_draco_bar.html @@ -1,13 +1,19 @@ {# Barre d'apps commune dracodev — Fusion ACC-1 (issue kanbante#28). - Snippet vendangé depuis Projets/dracodev-commons v0.2.0 - (ui/barre-apps/ @70c837a, PR commons #7) : structure du fragment + Snippet vendangé depuis Projets/dracodev-commons v0.3.0 + (ui/barre-apps/, branche hub-menu-compte-v0-3-0 de la PR commons + #9 — HUB-1, fusion #115) : v0.3.0 = menu compte à liens Hub + (Télécharger, À Propos, Aides, Profil-lien ; base + draco_urls.hub en urls.hub ci-dessous) et branche « profil » + de onAction RETIRÉE (voir le commentaire dans la configuration — + la page /profile de Kanbante existe toujours, elle n'est plus + la cible du menu compte). Structure du fragment commons portée ici ; seule adaptation locale (0.32.0, dev/prod) = les URL des apps et l'adresse du service d'agents sont INJECTÉES par l'hôte depuis app.config (draco_urls / agent_url, défauts = noms officiels) — aucun nom public codé en dur dans ce gabarit ni dans draco-panneau.js. Le CSS et le JS, eux, sont vendangés VERBATIM (static/css/draco-barre.css, - static/js/draco-barre.js — voir CHANGELOG 0.45.6). + static/js/draco-barre.js — voir CHANGELOG 0.45.9). v0.2.0 (phase 3 ShaarIt) : nouvel onglet ShaarIt (data-app="shaarit", draco_urls.shaarit), APRÈS Kanbante et AVANT l'onglet agent ; couleur émeraude #059669, logo @@ -112,6 +118,12 @@ recherche partout : page /recherche (Fusion #68). */ window.DRACO_BAR_CONFIG = { current: "kanbante", + /* Barre v0.3.0 (HUB-1) : base du Hub résolue par l'hôte + (draco_urls.hub — DRACO_HUB_URL explicite, hôte de la + requête, dérivation par l'agent, défaut officiel) ; + le Hub n'a pas d'onglet, urls.hub alimente les liens + du menu compte. */ + urls: { hub: "{{ draco_urls.hub }}/" }, /* v0.1.6 : user = initiale auth_user ou K (draco_avatar). Sans cfg.user, le nouveau JS dériverait l'initiale du title ("Opérateur Kanbante" → "O"), qui est un libellé de rôle et @@ -132,12 +144,15 @@ }; if (act === "domaine") { try { localStorage.setItem("draco_domain", el.dataset.dom); } catch (e) { } return; } if (act === "rail") { var b = document.getElementById("side-collapse"); if (b) b.click(); return; } - /* Menu compte (image 2) : ces deux actions étaient relayées - par draco-barre.js mais jamais prises en charge ici — - le menu se fermait sans rien faire. En mobile, c'est le - seul accès au profil et à la déconnexion (le pied de - sidebar était masqué). */ - if (act === "profil") { location.href = "/profile"; return; } + /* Menu compte — barre v0.3.0 (HUB-1) : « Profil » n'est + PLUS relayé par la barre : c'est un vrai lien vers + /profil (un seul Profil, celui du Hub — décision + du plan Hub). L'ancienne branche onAction("profil") + qui menait à la page /profile propre à Kanbante est + donc RETIRÉE : la page /profile elle-même continue + d'exister (jetons API, réglages du compte Kanbante), + mais elle n'est plus la cible du menu compte de la + barre. « Déconnexion » reste relayée, inchangée. */ if (act === "deconnexion") { location.href = "/logout"; return; } if (act === "palette") { location.href = "/recherche"; return; } if (act === "alertes") { if (window.DRACO_ALERTES) { window.DRACO_ALERTES.open(); } else { location.href = "/activity"; } return; } diff --git a/static/css/draco-barre.css b/static/css/draco-barre.css index 8c9927c..c01145f 100644 --- a/static/css/draco-barre.css +++ b/static/css/draco-barre.css @@ -20,6 +20,10 @@ 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). + v0.3.0 (HUB-1) : aucun style nouveau — les liens du Hub du menu + compte (Télécharger, À Propos, Aides, Profil) réutilisent + .draco-menu-item (déjà ancre-compatible : text-decoration none) + et le séparateur .draco-menu-sep du menu des applications. 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 diff --git a/static/js/draco-barre.js b/static/js/draco-barre.js index 4e77833..3de0f03 100644 --- a/static/js/draco-barre.js +++ b/static/js/draco-barre.js @@ -14,6 +14,21 @@ * 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. + * v0.3.0 (carte HUB-1, fusion #115) : le Hub, point central de la + * suite — nouvelle clé d'URL « hub » (jeton {{URL_HUB}} côté hôte, + * DRACO_BAR_CONFIG.urls.hub), défaut officiel + * https://hub.dracodev.net/, dérivation -dev hub-dev comme les + * sœurs. Le menu compte gagne trois vrais liens (patron + * buildAppsMenu : , classe draco-menu-item) — Télécharger + * → /telecharger, À Propos → /a-propos, Aides → + * /aide — et « Profil » devient lui aussi un lien, vers + * /profil (il n'est plus relayé aux hôtes : un seul Profil, + * celui du Hub). « Déconnexion » reste l'action relayée + * (data-compte-act="deconnexion" / onAction), inchangée. + * refreshMenuHrefs() resynchronise aussi les liens du Hub à + * l'ouverture des menus. Le Hub n'a pas d'onglet dans la barre : + * comme spark, sa clé est résolue et exposée via DRACO_BAR.urls, + * sans étape « href rendu » (voir « URL » ci-dessous). * * 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 @@ -33,7 +48,8 @@ * kanbante: "https://kanbante.dracodev.net/", * shaarit: "https://shaarit.dracodev.net/", * agent: "https://agent.dracodev.net/", - * spark: "https://spark.dracodev.net/" + * spark: "https://spark.dracodev.net/", + * hub: "https://hub.dracodev.net/" * }, * onAction: function (act, el) { … } // l'app relaie les actions * } // qu'elle ne connaît pas @@ -67,6 +83,12 @@ * 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. + * Cas hub (v0.3.0) : PAS d'onglet, donc pas d'étape « href rendu » — + * explicite (DRACO_BAR_CONFIG.urls.hub, alimenté par le jeton + * {{URL_HUB}} remplacé côté serveur par l'hôte) > dérivation -dev + * hub-dev sur hôte -dev > défaut officiel + * https://hub.dracodev.net/. La base résolue sert les quatre liens + * du menu compte (telecharger, a-propos, aide, profil). * 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…). @@ -141,6 +163,14 @@ * mais le menu affiche l'identité même sans gestionnaire hôte. * Accessibilité : vrais