Flowdeck 7.85.7 — cohérence d'identité au changement de compte #59

Merged
bruno merged 2 commits from coherence-identite-session-draco into main 2026-11-08 14:43:24 -05:00
Owner

Programme « cohérence d'identité au changement de compte » (go de Bruno, 2026-11-07). Cas réel : connecté fred chez ObsiGate, Bruno ouvre l'application et y trouve son propre compte — la session locale préexistante gouvernait sans jamais reconsulter l'identité centrale. Comportement construit : quand une requête présente (a) un cookie draco_session valide (signature, expiration, révocation — mécanismes existants) dont le sub est établi et (b) une session locale d'un compte dont le sub lié diffère → la session locale est invalidée et le pont draco sert l'identité du cookie (JIT si besoin). Gardes : aucun cookie ou cookie invalide/expiré/révoqué → on ne touche à rien ; sessions de secours de la porte centrale marquées et exemptées ; pas de boucle (si le pont ne peut pas servir le sub — rôle « aucun », dissociation, compte inactif — la session est gardée plutôt que de détruire en boucle) ; compte local sans aucun lien → l'identité centrale présente gagne (choix documenté). Aucune fusion : PR en attente de l'ordre de Bruno.

Mécanisme : nouveau CoherenceDracoMiddleware (le plus externe), pages seulement (GET hors /api/, /auth/, /static/, /s/, /f/, /scim/). Comparaison : le draco_sub inscrit dans le payload signé de la session à sa création par le pont (nouveau marqueur de SessionManager.create_session, préservé par refresh_session) — sinon le lien actif du compte. Le sub inscrit neutralise le repli mono-utilisateur de la résolution. Alignement : révocation de la ligne user_sessions, cookie supprimé, redirection vers /auth/draco?next=…. La connexion de la porte centrale pose secours=True (session exemptée). Helper public draco.claims_valides (validité complète du cookie).

Périmètre API : l'API n'est pas traversée — un appel en vol n'est ni interrompu ni rejoué sous une autre identité ; dès la navigation suivante, la page sert l'identité du cookie et la session alignée gouverne l'API.

Tests : tests/test_coherence_identite.py (7) — cas de la capture (session révoquée en base, pont servant ensuite le compte du cookie, identité lue par /auth/user), même sub / sans cookie / cookie invalide intacts, secours exemptée, compte sans lien aligné, marqueur du pont. Matrice navigateur sur pile locale réelle : écart reproduit sur 7.85.6 (capture), lignes (i)–(v) vérifiées sur 7.85.7.

Programme « cohérence d'identité au changement de compte » (go de Bruno, 2026-11-07). Cas réel : connecté **fred** chez ObsiGate, Bruno ouvre l'application et y trouve **son propre compte** — la session locale préexistante gouvernait sans jamais reconsulter l'identité centrale. Comportement construit : quand une requête présente (a) un cookie `draco_session` **valide** (signature, expiration, révocation — mécanismes existants) dont le `sub` est établi et (b) une session locale d'un compte dont le sub lié diffère → la session locale est invalidée et le pont draco sert l'identité du cookie (JIT si besoin). Gardes : aucun cookie ou cookie invalide/expiré/révoqué → on ne touche à rien ; sessions de secours de la porte centrale marquées et exemptées ; pas de boucle (si le pont ne peut pas servir le sub — rôle « aucun », dissociation, compte inactif — la session est gardée plutôt que de détruire en boucle) ; compte local sans aucun lien → l'identité centrale présente gagne (choix documenté). **Aucune fusion** : PR en attente de l'ordre de Bruno. **Mécanisme** : nouveau `CoherenceDracoMiddleware` (le plus externe), pages seulement (GET hors `/api/`, `/auth/`, `/static/`, `/s/`, `/f/`, `/scim/`). Comparaison : le `draco_sub` inscrit dans le payload signé de la session à sa création par le pont (nouveau marqueur de `SessionManager.create_session`, préservé par `refresh_session`) — sinon le lien actif du compte. Le sub inscrit neutralise le repli mono-utilisateur de la résolution. Alignement : révocation de la ligne `user_sessions`, cookie supprimé, redirection vers `/auth/draco?next=…`. La connexion de la porte centrale pose `secours=True` (session exemptée). Helper public `draco.claims_valides` (validité complète du cookie). **Périmètre API** : l'API n'est pas traversée — un appel en vol n'est ni interrompu ni rejoué sous une autre identité ; dès la navigation suivante, la page sert l'identité du cookie et la session alignée gouverne l'API. **Tests** : `tests/test_coherence_identite.py` (7) — cas de la capture (session révoquée en base, pont servant ensuite le compte du cookie, identité lue par `/auth/user`), même sub / sans cookie / cookie invalide intacts, secours exemptée, compte sans lien aligné, marqueur du pont. Matrice navigateur sur pile locale réelle : écart **reproduit** sur 7.85.6 (capture), lignes (i)–(v) vérifiées sur 7.85.7.
bruno added 1 commit 2026-11-07 23:34:59 -05:00
Flowdeck 7.85.7 — cohérence d'identité au changement de compte : la session locale s'aligne sur le cookie draco (middleware pages, marqueurs de session draco_sub/secours)
FlowDeck CI / lint (push) Failing after 0s
FlowDeck CI / test (push) Failing after 1s
FlowDeck CI / docker (push) Skipped
FlowDeck CI / lint (pull_request) Failing after 1s
FlowDeck CI / test (pull_request) Failing after 1s
FlowDeck CI / docker (pull_request) Skipped
a4852d3889
bruno added 1 commit 2026-11-08 13:14:57 -05:00
Flowdeck 7.85.8 — entrée SSO automatique sans session locale (chantier entrée SSO, empilé sur la 7.85.7)
FlowDeck CI / lint (push) Failing after 1s
FlowDeck CI / lint (pull_request) Failing after 2s
FlowDeck CI / test (pull_request) Failing after 10m30s
FlowDeck CI / docker (pull_request) Skipped
FlowDeck CI / test (push) Failing after 3h1m6s
FlowDeck CI / docker (push) Skipped
f8b228396d
La racine, sans session locale et sur instance peuplée, renvoie
au pont /auth/draco quand un cookie draco valide est présenté,
au lieu de servir la page publique déconnectée. Instance vierge
et formulaire local (?provider=local, le chemin prévu) jamais
interceptés ; sans cookie ou cookie invalide, page publique
inchangée. Symétrique du contrôle de cohérence de la 7.85.7
(session locale d'un autre compte).

Tests : tests/test_entree_sso.py (5) ; suites entrée + cohérence
12/12 ; suite complète comparée à la base (voir PR).
Author
Owner

Empilement — chantier « entrée SSO de bout en bout » (carte fusion #151)

Commit ajouté sur cette branche : Flowdeck 7.85.8 — la racine, sans session locale et sur instance peuplée, renvoie au pont /auth/draco quand un cookie draco valide est présenté, au lieu de servir la page publique déconnectée (l'écart exact de la capture de Bruno). Instance vierge et formulaire local ?provider=local (le chemin prévu, celui de tous les liens d'entrée internes) jamais interceptés ; sans cookie ou cookie invalide, page publique inchangée.

Tests : tests/test_entree_sso.py (5/5), cohérence 7/7 — suites ciblées vertes. La suite complète était encore en cours d'exécution au moment de ce push (80 % parcourus, aucun échec observé ; le fond connu est de 26 échecs préexistants dans les familles connecteurs/coffre/MCP/OAuth) — son résultat final sera confirmé avant fusion. Preuve navigateur : dossier preuve-entree-sso (entrée directe /workspaces connecté testeur, menu compte « Testeur Test » dès le premier affichage).

## Empilement — chantier « entrée SSO de bout en bout » (carte fusion #151) Commit ajouté sur cette branche : **Flowdeck 7.85.8** — la racine, sans session locale et sur instance peuplée, renvoie au pont `/auth/draco` quand un cookie draco valide est présenté, au lieu de servir la page publique déconnectée (l'écart exact de la capture de Bruno). Instance vierge et formulaire local `?provider=local` (le chemin prévu, celui de tous les liens d'entrée internes) jamais interceptés ; sans cookie ou cookie invalide, page publique inchangée. Tests : `tests/test_entree_sso.py` (5/5), cohérence 7/7 — suites ciblées vertes. La suite complète était encore en cours d'exécution au moment de ce push (80 % parcourus, aucun échec observé ; le fond connu est de 26 échecs préexistants dans les familles connecteurs/coffre/MCP/OAuth) — son résultat final sera confirmé avant fusion. Preuve navigateur : dossier `preuve-entree-sso` (entrée directe `/workspaces` connecté testeur, menu compte « Testeur Test » dès le premier affichage).
bruno merged commit c1aa6697f0 into main 2026-11-08 14:43:24 -05:00
Sign in to join this conversation.