Commit 46859113 authored by Jordan Grossemy's avatar Jordan Grossemy
Browse files

Six exigences trouvent la section où on les chercherait

Le cahier des charges compte douze sections et douze plages d'identifiants,
EF-1xx à EF-12xx. Les exigences nées de ces derniers lots n'y étaient pas, et
les placer demandait de régler un désordre que j'avais signalé sans le traiter :
la continuité d'activité n'a aucune section, et ses garanties utilisaient
EF-1201 à EF-1203 — qui appartiennent à « Clôture et restitution ».

J'ai d'abord voulu écrire la section manquante. C'était le mauvais réflexe :
la plage 13xx est prise par la veille externe, elle-même non documentée, et
créer une section 6.14 aurait laissé un trou de numérotation sans l'expliquer.
Inventer deux sections de spécification pour documenter six exigences est un
remède pire que le mal.

Or chacune appartient à une section qui existe déjà, et c'est même là qu'un
lecteur irait la chercher :

  EF-201a  les registres du dossier se complètent depuis la crise
  EF-207a  le déroulement des fiches réflexes est tracé
  EF-301a  la première heure
  EF-301b  la prise de connaissance recueillie au déclenchement
  EF-302a  une cellule s'ouvre pendant la crise
  EF-303a  les types de crise appartiennent à l'organisation

EF-303 parlait déjà des « modèles de crise préconfigurés — rançongiciel, fuite
de données, indisponibilité majeure » : les types y étaient, fermés. Ils y
restent, ouverts.

Les étiquettes du code sont réalignées en conséquence. Aucune ne se trouve plus
dans la plage d'une autre section.

Chaque exigence dit aussi ce qu'elle coûte ou ce qu'elle n'ouvre pas : le geste
depuis la crise écarte l'observateur, le code d'un type ne se change pas, la
première heure ne rallonge pas les quatre champs du déclenchement.

Ce qui reste à faire, et que je n'ai pas fait : la veille externe et la
continuité d'activité sont construites, éprouvées, et absentes du cahier. Ce
sont deux sections à écrire, et le choix de leur numérotation revient à
l'équipe.

Co-Authored-By: Claude (RCA)
parent bd0250ca
Loading
Loading
Loading
Loading
Loading
+70 −1
Changes for README.md: 70 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@ l'enregistre intégralement — de manière à pouvoir la rembobiner.
| **L0** | Socle, conteneurisation, authentification, console root | 🟢 fait |
| **L1** | Noyau de persistance, main courante, rembobinage | 🟡 en cours — noyau, lecture à date, filtres et routes faits ; reste l'export PDF paginé de la main courante (EF-410) et la vue frise, qui suppose une interface |
| **L2** | Dossier de préparation (annuaire, tiers, fiches réflexes, kit) | 🟢 fait — plus les étiquettes, les destinataires de diffusion, les modèles de message, le dépôt d'annuaire depuis un SIRH et le détecteur de trous d'astreinte, qui dit *quand* personne n'est joignable au lieu de se contenter de dire qui l'est |
| **L3** | Décisions, actions, points de situation, cockpit | 🟢 fait |
| **L3** | Décisions, actions, points de situation, cockpit | 🟢 fait — plus le cockpit composable par cellule et recomposable en pleine crise, l'écran de la première heure qui lit le dossier gelé au lieu de le faire chercher, l'ouverture d'une cellule pendant la crise, et les types de crise tenus par l'organisation |
| **L4** | Chat de crise, flux temps réel | 🟢 fait — plus les messages directs, les groupes hors journal et les canaux privés |
| **L5** | Gestion documentaire, stockage objet | 🟢 fait — indexation des PDF à venir avec l'aperçu |
| **L6** | Visioconférence, enregistrement, rétention | 🟢 fait côté serveur — les fonctions d'appel (partage d'écran, panneau flottant, repli audio) vivent dans le client ; une salle peut s'adosser à un canal et en prendre les droits |
@@ -354,6 +354,55 @@ Un message sans texte mais avec une pièce reçoit pour texte le nom du fichier
le journal se relit trois mois plus tard, et « (sans texte) » n'y apprendrait
rien à personne.

## Ouvrir une crise, puis la première heure

Le déclenchement garde **quatre champs et vise soixante secondes** : c'est un
acquis qu'on ne défait pas. Mettre un assistant en plusieurs étapes devant
l'ouverture ralentirait le seul geste qui ne doit jamais ralentir — et chaque
étape est une occasion d'abandonner, où abandonner signifie « pas de crise
ouverte ».

Deux corrections seulement à l'écran lui-même. **Les types et les cellules
viennent du dossier** au lieu d'être écrits en dur : les cellules cochées
d'emblée sont celles que l'organisation arme réellement — des gens affectés, ou
un cockpit composé — avec l'effectif affiché. On ne coche plus de mémoire. Et un
contrôle replié, « les faits sont antérieurs ? », recueille la **prise de
connaissance** : tous les délais réglementaires en partent, et ils ne partent
pas de l'ouverture dans l'outil.

L'aide arrive donc **après**, sur un écran qui *lit* le dossier gelé plutôt que
de demander quoi que ce soit :

- **Le délai le plus proche**, avant tout le reste.
- **Composer les cellules** — les personnes que l'annuaire y affecte, admissibles
  d'un clic. Celles sans compte sont signalées : on les mobilise, on ne les fait
  pas entrer.
- **Mobiliser** — les mobilisations préparées, avec leur objectif. Rien ne part
  de cet écran : mobiliser reste une décision.
- **Dérouler les fiches réflexes** — cocher **inscrit l'étape au journal**, pas
  seulement à l'écran. Le retour d'expérience peut donc dire quelle fiche n'a
  jamais été déroulée.
- **Les tiers**, avec ceux déjà activés.

Le point d'architecture qui rend cela peu coûteux : **l'état de cette liste se
déduit du journal** — mobilisation lancée, membres admis, tiers activé, fiche
cochée. Aucune table nouvelle, aucun état à maintenir, et le rembobinage montre
la première heure telle qu'elle a été plutôt que telle qu'un écran l'aurait
mémorisée.

**Une cellule s'ouvre pendant la crise.** Elle ne pouvait naître qu'au
déclenchement : oublier la cellule juridique à la seconde trente, c'était ne pas
l'avoir à la troisième heure. Elle reçoit son salon, sa salle, et le cockpit
préparé pour son code. Deux cellules de même code sont refusées — elles
partageraient un cockpit et diviseraient une conversation.

**Les types de crise appartiennent à l'organisation.** Les cinq livrés décrivent
bien une crise cyber et mal une inondation, un accident industriel, un rappel
produit. Comme les fiches réflexes s'indexent sur ce type, l'énumération fermée
ne limitait pas le vocabulaire : elle limitait la préparation. Le code est stable
et le libellé libre, et le code est **immuable par déclencheur SQL** — griser un
champ dans l'interface ne protège pas d'une route qu'on ajoutera plus tard.

## La boucle décisionnelle

Ce qui sépare Kastell d'une messagerie. L'opérationnelle publie un **point de
@@ -520,6 +569,26 @@ L'échéance la plus proche est affichée **dans la barre d'état**, depuis
n'importe quel écran : c'est le genre de délai qu'on rate en étant absorbé par
la technique.

Les deux registres se tiennent à froid, et c'est le bon endroit : on ne dresse
pas l'inventaire de son système d'information le jour où plus rien ne marche.
Mais **c'est le jour où l'on découvre ce qui manquait** — une application que
personne n'avait recensée, une autorité qu'il faut prévenir. Les deux écrans le
disaient sans rien proposer, et la cellule repartait vers un tableur.

Ils s'ajoutent donc depuis la crise, en six champs. La fiche va **au dossier de
préparation**, pas sur la seule crise : une application est un fait de
l'organisation, et la prochaine crise doit l'avoir. Elle paraît aussitôt à
l'écran, son échéance part aussitôt, et le journal retient nominativement que
la préparation l'avait oubliée — c'est précisément ce que le retour d'expérience
cherche. L'historique du dossier le dit aussi, en propres termes : « pendant la
crise ».

Le geste est ouvert à tout membre pouvant écrire dans la crise, et non aux seuls
rôles d'écriture du dossier : c'est l'opérationnel qui découvre l'application
oubliée à trois heures du matin, et lui refuser le geste, c'est le renvoyer vers
quelqu'un qui dort. L'observateur en reste exclu — il ne modifie pas le dossier,
ici pas plus qu'à froid.

## Canaux de diffusion et envois de masse

Chaque organisation branche **ses propres passerelles** — OVHcloud pour le SMS,
+48 −0
Changes for cahier-des-charges.html: 48 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -614,6 +614,18 @@ footer{
  <p>La moitié amont du produit (P2). Il vit hors crise, se tient à jour sans effort, et constitue à lui seul une raison de s&rsquo;abonner même si aucune crise ne survient jamais.</p>
  <ul class="reqs">
    <li><span class="rid">EF-201</span><span class="rtx">Espace de préparation permanent, accessible sans crise ouverte, présentant en une vue l&rsquo;annuaire, les tiers, les fiches réflexes, le kit documentaire et l&rsquo;indicateur de fraîcheur de chacun.</span></li>
    <li><span class="rid">EF-201a</span><span class="rtx"><strong>Les registres du dossier se
complètent depuis la crise</strong>&nbsp;: applications métier et parties prenantes à informer.
Ils se tiennent à froid, et c&rsquo;est le bon endroit — on ne dresse pas l&rsquo;inventaire de
son système d&rsquo;information le jour où plus rien ne marche. Mais c&rsquo;est le jour où
l&rsquo;on découvre ce qui manquait, et un outil qui refuserait de l&rsquo;inscrire renverrait la
cellule vers un tableur. La fiche va <em>au dossier</em> et non sur la seule crise&nbsp;: une
application est un fait de l&rsquo;organisation, la prochaine crise doit l&rsquo;avoir. Elle
paraît aussitôt à l&rsquo;écran, et le journal retient nominativement que la préparation
l&rsquo;avait oubliée — c&rsquo;est ce que le retour d&rsquo;expérience cherche. Le geste est
ouvert à tout membre pouvant écrire dans la crise, l&rsquo;observateur excepté&nbsp;: c&rsquo;est
l&rsquo;opérationnel qui découvre l&rsquo;application oubliée à trois heures du
matin.</span></li>
    <li><span class="rid">EF-202</span><span class="rtx"><strong>Annuaire interne</strong>&nbsp;: personnes, rôle tenu en cellule de crise, suppléant désigné, coordonnées professionnelles <em>et</em> personnelles, adresse e-mail hors SI, périodes d&rsquo;astreinte et d&rsquo;indisponibilité.</span></li>
    <li><span class="rid">EF-202a</span><span class="rtx"><strong>Détection des trous d&rsquo;astreinte</strong>&nbsp;: les créneaux où <em>personne</em> n&rsquo;est joignable, sur un horizon réglable, avec le geste qui les comble. Savoir qui est d&rsquo;astreinte ne dit pas quand personne ne l&rsquo;est&nbsp;: un tour comportant un trou le dimanche matin ne se voit pas en lisant la liste, il se voit le dimanche matin. Une organisation qui n&rsquo;a rien déclaré est signalée comme entièrement découverte, et non comme sans trou.</span></li>
    <li><span class="rid">EF-203</span><span class="rtx"><strong>Registre des tiers activables</strong>&nbsp;: prestataire de réponse à incident et CERT, assureur cyber, avocat, hébergeur, opérateurs, autorités de notification, agence de communication, expert judiciaire, prestataire de restauration de données.</span></li>
@@ -621,6 +633,13 @@ footer{
    <li><span class="rid">EF-205</span><span class="rtx">Chaque tiers porte sa <strong>procédure d&rsquo;activation en clair</strong>&nbsp;: qui est habilité à appeler, quel numéro d&rsquo;urgence, quelles informations préparer, quel délai attendre, quoi faire si personne ne répond.</span></li>
    <li><span class="rid">EF-206</span><span class="rtx">Activation d&rsquo;un tiers en un geste depuis une crise en cours&nbsp;: la procédure s&rsquo;affiche, l&rsquo;appel est consigné, et l&rsquo;attente de réponse devient une action suivie.</span></li>
    <li><span class="rid">EF-207</span><span class="rtx"><strong>Fiches réflexes</strong> éditables, indexées par type de crise et par rôle, affichées automatiquement au déclenchement et accessibles en un clic pendant toute la crise.</span></li>
    <li><span class="rid">EF-207a</span><span class="rtx"><strong>Le déroulement des fiches
est tracé</strong>, et non seulement affiché. Cocher une étape produit un événement&nbsp;: la
cellule voit ce qui reste, le rembobinage montre où l&rsquo;on en était à la minute demandée, et
le retour d&rsquo;expérience peut dire qu&rsquo;une fiche n&rsquo;a <em>jamais</em> été déroulée —
ce qu&rsquo;aucun état d&rsquo;écran ne saurait dire. Décocher est permis&nbsp;: se tromper de
ligne à trois heures du matin ne doit pas être définitif, et le journal reste en ajout
seul.</span></li>
    <li><span class="rid">EF-208</span><span class="rtx"><strong>Kit documentaire</strong> versionné&nbsp;: PCA et PRA, cartographie du SI et des dépendances, plans de reprise, procédures de restauration, modèles de communiqués, obligations et destinataires de notification, organigramme de crise.</span></li>
    <li><span class="rid">EF-209</span><span class="rtx">Indicateur de préparation permanent&nbsp;: complétude du kit, fraîcheur de l&rsquo;annuaire et du registre des tiers, contrats arrivant à échéance, membres n&rsquo;ayant jamais ouvert l&rsquo;outil, fiches réflexes non revues depuis un an.</span></li>
    <li><span class="rid">EF-210</span><span class="rtx">Campagne de vérification semestrielle&nbsp;: chaque personne reçoit un lien personnel pour confirmer ou corriger sa fiche&nbsp;; l&rsquo;indicateur reflète le taux de retour.</span></li>
@@ -634,8 +653,37 @@ footer{
  <h3>6.3 &nbsp;Déclenchement et cockpit</h3>
  <ul class="reqs">
    <li><span class="rid">EF-301</span><span class="rtx">Déclenchement en quatre champs maximum&nbsp;: intitulé, type, gravité, cellules à ouvrir. Cible&nbsp;: soixante secondes entre l&rsquo;intention et une cellule opérationnelle.</span></li>
    <li><span class="rid">EF-301a</span><span class="rtx"><strong>La première
heure</strong>&nbsp;: le déclenchement atterrit sur une <em>lecture</em> du dossier gelé, non sur
un formulaire de plus. Composer les cellules à partir des affectations de l&rsquo;annuaire,
choisir une mobilisation préparée, dérouler les fiches réflexes, activer les tiers, voir les
délais qui courent déjà. Tout y est proposé et rien n&rsquo;y est obligatoire&nbsp;: le cockpit
est utilisable dès la seconde quinze, et les quatre champs du déclenchement ne sont pas
rallongés. Une seule lecture serveur&nbsp;: au pire moment, six allers-retours valent cinq
occasions d&rsquo;attendre.</span></li>
    <li><span class="rid">EF-301b</span><span class="rtx"><strong>La prise de connaissance des
faits est recueillie au déclenchement</strong>, par un contrôle replié dont le défaut est «&nbsp;à
l&rsquo;instant&nbsp;». Tous les délais réglementaires en découlent, et ils ne partent pas de
l&rsquo;ouverture dans l&rsquo;outil&nbsp;: les deux diffèrent presque toujours, et les confondre
fait croire qu&rsquo;il reste du temps. Sans date donnée, rien n&rsquo;est inscrit — un événement
qui ne dit rien de plus que le défaut est du bruit dans un journal.</span></li>
    <li><span class="rid">EF-302</span><span class="rtx">Le déclenchement gèle le dossier de préparation, crée les cellules, ouvre le journal, démarre le chronomètre, affiche les fiches réflexes du type retenu et propose la mobilisation.</span></li>
    <li><span class="rid">EF-302a</span><span class="rtx"><strong>Une cellule
s&rsquo;ouvre pendant la crise</strong>, avec son salon, sa salle, et le cockpit préparé pour son
code. Elle ne pouvait naître qu&rsquo;au déclenchement&nbsp;: oublier la cellule juridique à la
seconde trente, c&rsquo;était ne pas l&rsquo;avoir à la troisième heure. Une crise est un
phénomène mouvant, et le produit ne doit pas être un frein. Deux cellules de même code sont
refusées — elles partageraient un cockpit et diviseraient une conversation. Le droit est celui de
la direction de crise&nbsp;: ouvrir une cellule n&rsquo;est pas la composer.</span></li>
    <li><span class="rid">EF-303</span><span class="rtx">Modèles de crise préconfigurés — rançongiciel, fuite de données, indisponibilité majeure, compromission de messagerie — préchargeant cellules, fiches réflexes, tiers à activer et trame de première heure.</span></li>
    <li><span class="rid">EF-303a</span><span class="rtx"><strong>Les types de crise
appartiennent à l&rsquo;organisation</strong>, tenus au dossier comme les autres registres. Les
cinq types livrés décrivent bien une crise cyber et mal une inondation, un accident industriel, un
rappel produit&nbsp;; et comme les fiches réflexes s&rsquo;indexent sur ce type, une énumération
fermée ne limitait pas le vocabulaire mais la préparation. Le code est stable et le libellé
libre&nbsp;: la crise inscrit le code au journal et les fiches s&rsquo;apparient dessus, si bien
que renommer un libellé ne doit pas rompre l&rsquo;appariement des crises passées. Le code est
donc immuable, et la règle est portée par le schéma.</span></li>
    <li><span class="rid">EF-304</span><span class="rtx">Cockpit affichant en une vue&nbsp;: gravité, temps écoulé, dernier point de situation par cellule, décisions en attente d&rsquo;arbitrage, actions en retard, tiers activés et leur statut, présence des membres.</span></li>
    <li><span class="rid">EF-305</span><span class="rtx">Le niveau de gravité est modifiable à tout moment&nbsp;; chaque changement exige une justification et produit un événement.</span></li>
    <li><span class="rid">EF-306</span><span class="rtx">Une crise peut être marquée <strong>exercice</strong>. Le marquage est permanent, affiché en bandeau non masquable, et exclut la crise des statistiques. Aucun moteur de scénario n&rsquo;est embarqué&nbsp;: l&rsquo;animation relève du projet dédié.</span></li>