Kanbante 0.46.6 — Porte centrale unique : réglage administrateur, écran SSO seul et porte de secours discrète (phase 2, basée sur la 0.46.5) #92

Merged
bruno merged 1 commits from porte-unique-phase2-centrale into main 2026-11-07 10:31:20 -05:00
Owner

Porte centrale unique — phase 2 du programme « compte partout »

Version 0.46.6 (série 0.46.x). Base : la branche de la phase 1 (porte-unique-phase1-amorcage, PR #91, 0.46.5) — cette PR est distincte et son diff ne contient que la phase 2 ; elle se rebasera sur main après la fusion de la phase 1. La PR #87 (0.47.0) n'est pas touchée. Aucune fusion — sur l'ordre de Bruno. Désactivée par défaut à la livraison.

Le réglage

porte_centrale (booléen, app/config.py) : amorçable par KANBANTE_PORTE_CENTRALE=1, surchargeable dans Administration → Paramètres (patron « l'environnement amorce, le panneau gouverne »). Correctif au passage : la conversion booléenne à l'enregistrement du panneau est désormais explicite — bool("false") valait True, un booléen du panneau ne pouvait donc pas se désactiver en saisissant false (vaut aussi pour sync_* et briefing_include_standup).

Mode actif

  • GET /login ne présente que l'entrée centrale : « Se connecter avec ObsiGate (SSO) » bien visible + l'explication qu'un compte de la suite n'a pas de mot de passe local. Aucun champ local rendu.
  • POST /login refuse (403) toute tentative — identifiants de base comme repli d'environnement.
  • Sessions déjà établies : aucun impact (contrôle de session inchangé ; testé). Non touchés : Basic d'environnement (scripts), jetons kbt_, pont draco, /api/search.

Porte de secours administrateur

  • Chemin discret : /login/secours (GET + POST) — jamais proposé ni lié sur l'écran principal (testé : absent du HTML de /login en mode actif comme inactif) ; sans configuration, 404 sans explication.
  • UN compte désigné, par l'environnement uniquement : KANBANTE_PORTE_SECOURS_USER / KANBANTE_PORTE_SECOURS_PASSWORD (secrets : jamais en base, jamais au panneau, jamais en dur). Le mot de passe de secours est dédié (comparaison en temps constant, journalisation login.porte_secours).
  • Gardes : le compte désigné doit être un administrateur local actif (ou l'opérateur d'environnement) ; un membre désigné par erreur est refusé.

Documentation : docs/porte-centrale.md (mécanisme + fiche d'activation opérateur), .env.example, tableau des variables du README.

Tests

Nouveau tests/test_porte_centrale.py (7, verts) : mode inactif par défaut = comportement actuel ; activation et désactivation par le panneau ; mode actif (écran central seul, formulaire refusé pour un membre comme pour l'amorçage, session préexistante intacte) ; secours (chemin discret en plein mode central, mauvais mot de passe refusé, membre refusé, membre désigné refusé, 404 sans configuration) ; amorçage par variable d'environnement + surcharge panneau. Périmètre combiné phases 1+2 : 89 réussis. Suite complète comparée à l'arbre vierge dans le rapport du chantier.

Chevauchement signalé

Comme la phase 1 : VERSION / CHANGELOG.md / app/main.py sont aussi touchés par la PR #88 ouverte (HUB-21) — conflits de fusion possibles sur ces fichiers ; aucun fichier métier en commun.

## Porte centrale unique — phase 2 du programme « compte partout » Version **0.46.6** (série 0.46.x). **Base : la branche de la phase 1** (`porte-unique-phase1-amorcage`, PR #91, 0.46.5) — cette PR est distincte et son diff ne contient que la phase 2 ; elle se rebasera sur `main` après la fusion de la phase 1. La PR #87 (0.47.0) n'est pas touchée. **Aucune fusion** — sur l'ordre de Bruno. **Désactivée par défaut à la livraison.** ### Le réglage `porte_centrale` (booléen, `app/config.py`) : amorçable par `KANBANTE_PORTE_CENTRALE=1`, surchargeable dans **Administration → Paramètres** (patron « l'environnement amorce, le panneau gouverne »). Correctif au passage : la conversion booléenne à l'enregistrement du panneau est désormais explicite — `bool("false")` valait `True`, un booléen du panneau ne pouvait donc pas se désactiver en saisissant `false` (vaut aussi pour `sync_*` et `briefing_include_standup`). ### Mode actif - `GET /login` ne présente **que l'entrée centrale** : « Se connecter avec ObsiGate (SSO) » bien visible + l'explication qu'un compte de la suite n'a pas de mot de passe local. Aucun champ local rendu. - `POST /login` **refuse (403)** toute tentative — identifiants de base comme repli d'environnement. - **Sessions déjà établies : aucun impact** (contrôle de session inchangé ; testé). Non touchés : Basic d'environnement (scripts), jetons `kbt_`, pont draco, `/api/search`. ### Porte de secours administrateur - **Chemin discret** : `/login/secours` (GET + POST) — jamais proposé ni lié sur l'écran principal (testé : absent du HTML de `/login` en mode actif comme inactif) ; sans configuration, 404 sans explication. - **UN compte désigné, par l'environnement uniquement** : `KANBANTE_PORTE_SECOURS_USER` / `KANBANTE_PORTE_SECOURS_PASSWORD` (secrets : jamais en base, jamais au panneau, jamais en dur). Le mot de passe de secours est dédié (comparaison en temps constant, journalisation `login.porte_secours`). - **Gardes** : le compte désigné doit être un administrateur local **actif** (ou l'opérateur d'environnement) ; un membre désigné par erreur est refusé. Documentation : `docs/porte-centrale.md` (mécanisme + fiche d'activation opérateur), `.env.example`, tableau des variables du README. ### Tests Nouveau `tests/test_porte_centrale.py` (7, verts) : mode inactif par défaut = comportement actuel ; activation **et** désactivation par le panneau ; mode actif (écran central seul, formulaire refusé pour un membre comme pour l'amorçage, session préexistante intacte) ; secours (chemin discret en plein mode central, mauvais mot de passe refusé, membre refusé, membre désigné refusé, 404 sans configuration) ; amorçage par variable d'environnement + surcharge panneau. Périmètre combiné phases 1+2 : **89 réussis**. Suite complète comparée à l'arbre vierge dans le rapport du chantier. ### Chevauchement signalé Comme la phase 1 : `VERSION` / `CHANGELOG.md` / `app/main.py` sont aussi touchés par la PR #88 ouverte (HUB-21) — conflits de fusion possibles sur ces fichiers ; aucun fichier métier en commun.
bruno changed target branch from porte-unique-phase1-amorcage to main 2026-11-07 10:31:12 -05:00
bruno added 1 commit 2026-11-07 10:31:12 -05:00
bruno merged commit b7145e398d into main 2026-11-07 10:31:20 -05:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Projets/kanbante#92