{"id":41,"date":"2026-06-30T21:29:03","date_gmt":"2026-06-30T19:29:03","guid":{"rendered":"https:\/\/missud.eu\/index.php\/2026\/06\/30\/bibliocqrs-episode-2-remettre-lia-a-lecole-du-metier-ireb\/"},"modified":"2026-06-30T21:41:19","modified_gmt":"2026-06-30T19:41:19","slug":"bibliocqrs-episode-2-remettre-lia-a-lecole-du-metier-ireb","status":"publish","type":"post","link":"https:\/\/missud.eu\/index.php\/2026\/06\/30\/bibliocqrs-episode-2-remettre-lia-a-lecole-du-metier-ireb\/","title":{"rendered":"BiblioCQRS \u2014 \u00c9pisode 2 : Remettre l&rsquo;IA \u00e0 l&rsquo;\u00e9cole du m\u00e9tier (IREB)"},"content":{"rendered":"<p><script src=\"https:\/\/cdn.jsdelivr.net\/npm\/mermaid@10\/dist\/mermaid.min.js\"><\/script><br \/>\n<script>mermaid.initialize({startOnLoad:true, theme:\"neutral\"});<\/script><\/p>\n<p><em>Tag de r\u00e9f\u00e9rence : <a href=\"https:\/\/github.com\/dmissud\/biblioCQRS\/tree\/Second_IT\" target=\"_blank\" rel=\"noopener\">Second_IT<\/a> \u2014 commit \u00ab\u00a0feat: add barcode support and enhance domain logic\u00a0\u00bb<\/em><\/p>\n<p>Dans l&rsquo;\u00e9pisode 1, l&rsquo;IA avait montr\u00e9 sa premi\u00e8re limite : livr\u00e9e \u00e0 elle-m\u00eame, elle code tout, tout de suite, sans discipline d&rsquo;it\u00e9ration. La parade trouv\u00e9e \u00e9tait m\u00e9canique \u2014 d\u00e9couper en baby steps. Mais un baby step mal cadr\u00e9 reste un pas dans la mauvaise direction. L&rsquo;\u00e9pisode 2 raconte ce qui s&rsquo;est pass\u00e9 quand on a arr\u00eat\u00e9 de corriger l&rsquo;IA au fil de l&rsquo;eau pour, en amont, lui imposer un <strong>cadre m\u00e9thodologique complet<\/strong> : l&rsquo;ing\u00e9nierie des exigences (IREB).<\/p>\n<h2>1. Le sympt\u00f4me : une bonne id\u00e9e, mal pos\u00e9e<\/h2>\n<p>Le Product Owner annonce vouloir cadrer la feature suivante : l&#8217;emprunt. Premier r\u00e9flexe \u00e0 corriger : ne pas sauter dans le code. La bascule de posture est imm\u00e9diate \u2014 passage explicite en r\u00f4le de <strong>Business Analyst<\/strong>, avec un principe directeur simple, mais que l&rsquo;IA ne respecte jamais spontan\u00e9ment :<\/p>\n<blockquote>\n<p>S\u00e9parer l&rsquo;espace du probl\u00e8me (le m\u00e9tier, la biblioth\u00e8que r\u00e9elle) de l&rsquo;espace de la solution (le logiciel BiblioCQRS).<\/p>\n<\/blockquote>\n<p>C&rsquo;est tout le sujet de cet \u00e9pisode : sans ce garde-fou, l&rsquo;IA confond en permanence \u00ab\u00a0ce que fait la biblioth\u00e8que\u00a0\u00bb et \u00ab\u00a0ce que doit faire le programme\u00a0\u00bb.<\/p>\n<h2>2. Sch\u00e9ma n\u00b01 \u2014 Qui sont les parties prenantes, et que veulent-elles vraiment ?<\/h2>\n<p>Premier travers observ\u00e9 : une cartographie des parties prenantes plate, sans hi\u00e9rarchie ni tension d&rsquo;int\u00e9r\u00eats. Recadrage du PO, r\u00e9ponse en deux temps : un diagramme relationnel, puis une matrice attentes \/ risques \/ ROI.<\/p>\n<pre class=\"mermaid\">\nflowchart TD\n    DIR[Direction de la Biblioth\u00e8que]\n    BIB[Biblioth\u00e9caire \/ Documentaliste]\n    US[Usager \/ Adh\u00e9rent]\n    DIR --&gt;|&quot; Lien hi\u00e9rarchique \/ Employeur &quot;| BIB\n    DIR --&gt;|&quot; Recherche la satisfaction &quot;| US\n    BIB --&gt;|&quot; Accompagne et sert &quot;| US\n<\/pre>\n<table border=\"1\" cellpadding=\"6\" cellspacing=\"0\">\n<thead>\n<tr>\n<th>Partie Prenante<\/th>\n<th>Attentes<\/th>\n<th>Risques<\/th>\n<th>ROI<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Direction Biblioth\u00e8que<\/td>\n<td>Statistiques fiables, respect du r\u00e8glement<\/td>\n<td>Perte financi\u00e8re (vols), m\u00e9contentement usager<\/td>\n<td>Pilotage par la donn\u00e9e (CQRS Query)<\/td>\n<\/tr>\n<tr>\n<td>Biblioth\u00e9caire<\/td>\n<td>Outil rapide, fiable<\/td>\n<td>Complexit\u00e9, perte de temps au guichet<\/td>\n<td>Gain de temps, moins de stress op\u00e9rationnel<\/td>\n<\/tr>\n<tr>\n<td>Adh\u00e9rent<\/td>\n<td>Emprunter vite, r\u00e8gles transparentes<\/td>\n<td>Oubli des dates, blocage injustifi\u00e9<\/td>\n<td>Exp\u00e9rience fluide, acc\u00e8s garanti<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Ce tableau n&rsquo;est pas du remplissage : c&rsquo;est lui qui, plus tard, justifie pourquoi certaines r\u00e8gles m\u00e9tier (quota, tol\u00e9rance de retard) doivent exister \u2014 elles d\u00e9coulent directement du risque identifi\u00e9 ici pour la Direction et le Biblioth\u00e9caire.<\/p>\n<h2>3. Sch\u00e9ma n\u00b02 \u2014 Ne pas confondre la biblioth\u00e8que et le logiciel<\/h2>\n<p>Deuxi\u00e8me erreur typique de l&rsquo;IA : elle dessine un syst\u00e8me o\u00f9 l&rsquo;usager \u00ab\u00a0interagit\u00a0\u00bb avec le logiciel comme s&rsquo;il empruntait directement un livre depuis une interface. Le PO recadre : le syst\u00e8me informatique n&rsquo;a jamais vu un livre. Il n&rsquo;existe qu&rsquo;\u00e0 travers la saisie du biblioth\u00e9caire.<\/p>\n<pre class=\"mermaid\">\nflowchart TD\n    subgraph Metier [&quot;La Biblioth\u00e8que (Syst\u00e8me M\u00e9tier)&quot;]\n        US((Usager))\n        BIB((Biblioth\u00e9caire))\n        LIVRE[Exemplaires Physiques]\n        US --&gt;|&quot; Rend \/ Emprunte physiquement &quot;| LIVRE\n        US --&gt;|&quot; Demande au guichet &quot;| BIB\n    end\n\n    subgraph Solution [&quot;P\u00e9rim\u00e8tre de la Solution&quot;]\n        BiblioCQRS[Syst\u00e8me Informatique BiblioCQRS]\n    end\n\n    BIB --&gt;|&quot; Saisie des actes (Emprunts, Retours, Catalogue) &quot;| BiblioCQRS\n    US -.-&gt;|&quot; Notifications \/ Consultation (Futur) &quot;| BiblioCQRS\n<\/pre>\n<p>C&rsquo;est un sch\u00e9ma trivial en apparence. Mais c&rsquo;est pr\u00e9cis\u00e9ment le genre de nuance qu&rsquo;une IA, optimisant pour \u00ab\u00a0produire un diagramme plausible\u00a0\u00bb, efface en premier si on ne le lui impose pas explicitement.<\/p>\n<h2>4. Une lacune trouv\u00e9e en creusant : l&rsquo;exemplaire sans identit\u00e9<\/h2>\n<p>En posant le sc\u00e9nario nominal d&#8217;emprunt (le documentaliste fournit l&rsquo;ID de l&rsquo;exemplaire et l&rsquo;ID de l&rsquo;adh\u00e9rent), le PO pose une question simple qui fait tout basculer :<\/p>\n<blockquote>\n<p>\u00ab\u00a0Est-ce que ta documentation fait ressortir que actuellement les exemplaires n&rsquo;ont pas d&rsquo;ID explicite ?\u00a0\u00bb<\/p>\n<\/blockquote>\n<p>R\u00e9ponse honn\u00eate : non. Le syst\u00e8me existant ne permettait pas de distinguer quel exemplaire physique pr\u00e9cis \u00e9tait emprunt\u00e9. Ce n&rsquo;est pas un d\u00e9tail \u2014 sans identifiant, aucune r\u00e8gle de pr\u00eat n&rsquo;est impl\u00e9mentable. La discipline IREB paie imm\u00e9diatement : on documente le manque (Plan d&rsquo;\u00c9licitation) plut\u00f4t que de le corriger en douce dans le code, et on cr\u00e9e une User Story d\u00e9di\u00e9e (<code>US-CAT-03<\/code> : identifier un exemplaire par un ID explicite, code-barre ou RFID).<\/p>\n<p>Cons\u00e9quence directement visible dans le commit <a href=\"https:\/\/github.com\/dmissud\/biblioCQRS\/tree\/Second_IT\" target=\"_blank\" rel=\"noopener\"><code>Second_IT<\/code><\/a> : <em>\u00ab\u00a0feat: add barcode support and enhance domain logic\u00a0\u00bb<\/em>. L&rsquo;\u00e9cart document\u00e9 pr\u00e9c\u00e8de le code, pas l&rsquo;inverse.<\/p>\n<h2>5. Sch\u00e9ma n\u00b03 \u2014 De l&rsquo;objectif m\u00e9tier au cas d&rsquo;utilisation<\/h2>\n<p>Autre recadrage du PO : l&rsquo;arbre des objectifs ne parlait pas le m\u00eame langage que le backlog (pas d&rsquo;Epic en commun). Mise en coh\u00e9rence stricte Objectif Entreprise \u2192 Epic \u2192 Use Case.<\/p>\n<pre class=\"mermaid\">\nmindmap\n  root((Exploiter une biblioth\u00e8que))\n    Epic 1_ Gestion du Catalogue\n      R\u00e9f\u00e9rencer un nouvel ouvrage abstrait\n      Ajouter un exemplaire physique\n      Identifier un exemplaire par ID\n    Epic 2_ Gestion des Adh\u00e9rents\n      Inscrire un adh\u00e9rent\n    Epic 3_ Gestion des Pr\u00eats\n      Enregistrer un emprunt\n      Enregistrer un retour\n<\/pre>\n<pre class=\"mermaid\">\nflowchart LR\n    Actor((Biblioth\u00e9caire))\n\n    subgraph &quot;Gestion du Catalogue&quot;\n        direction TB\n        UC1([R\u00e9f\u00e9rencer un nouvel ouvrage abstrait])\n        UC2([Ajouter un exemplaire physique])\n    end\n\n    subgraph &quot;Gestion des Pr\u00eats&quot;\n        direction TB\n        UC3([Enregistrer un emprunt])\n        UC4([Inscrire un adh\u00e9rent])\n    end\n\n    Actor --&gt; UC1\n    Actor --&gt; UC2\n    UC2 -. &quot; &lt;&lt; require &gt;&gt; &quot; .-&gt; UC1\n    Actor --&gt; UC3\n    Actor --&gt; UC4\n    UC3 -. &quot; &lt;&lt; require &gt;&gt; &quot; .-&gt; UC4\n    UC3 -. &quot; &lt;&lt; require &gt;&gt; &quot; .-&gt; UC2\n<\/pre>\n<p>Les fl\u00e8ches <code>&lt;&lt; require &gt;&gt;<\/code> ne sont pas cosm\u00e9tiques : elles formalisent que l&rsquo;on ne peut pas enregistrer un emprunt sans qu&rsquo;un exemplaire et un adh\u00e9rent existent d\u00e9j\u00e0. Sans ce sch\u00e9ma, rien n&#8217;emp\u00eachait l&rsquo;IA de g\u00e9n\u00e9rer un endpoint d&#8217;emprunt totalement d\u00e9connect\u00e9 du reste du domaine.<\/p>\n<h2>6. L&rsquo;erreur de persona : quand \u00ab\u00a0le Syst\u00e8me\u00a0\u00bb devient acteur<\/h2>\n<p>Le recadrage le plus instructif de l&rsquo;it\u00e9ration porte sur l&rsquo;\u00e9criture des User Stories. L&rsquo;IA avait r\u00e9dig\u00e9 des US de blocage (\u00ab\u00a0Quota atteint\u00a0\u00bb, \u00ab\u00a0Trop de retards\u00a0\u00bb) avec, en persona, <strong>le Syst\u00e8me<\/strong>. Le PO arr\u00eate tout :<\/p>\n<blockquote>\n<p>Le \u00ab\u00a0Syst\u00e8me\u00a0\u00bb ne peut pas \u00eatre l&rsquo;acteur d&rsquo;une User Story, car il ne retire aucune valeur m\u00e9tier. L&rsquo;US doit se placer du point de vue de l&rsquo;acteur op\u00e9rationnel.<\/p>\n<\/blockquote>\n<p>Correction : les US sont r\u00e9\u00e9crites du point de vue du <strong>Documentaliste<\/strong>, qui <em>veut \u00eatre emp\u00each\u00e9<\/em> de r\u00e9aliser l&#8217;emprunt, <em>afin de<\/em> garantir l&rsquo;\u00e9quit\u00e9 d&rsquo;acc\u00e8s aux ressources (quota) et la bonne circulation des ouvrages (retards). Un changement de sujet grammatical, en apparence anodin, qui force en r\u00e9alit\u00e9 \u00e0 exprimer la valeur m\u00e9tier \u2014 exactement ce que l&rsquo;IA, focalis\u00e9e sur la fonctionnalit\u00e9 technique, avait omis.<\/p>\n<h2>7. Restructurer plut\u00f4t qu&#8217;empiler<\/h2>\n<p>Documentation jug\u00e9e trop monolithique \u2192 \u00e9clatement en cinq fichiers sp\u00e9cialis\u00e9s sous <code>docs\/requirements\/<\/code> : vision\/contexte, glossaire (langage omnipr\u00e9sent), sc\u00e9narios\/r\u00e8gles, plan d&rsquo;\u00e9licitation, backlog. Chaque fichier a une responsabilit\u00e9 unique \u2014 la m\u00eame logique de s\u00e9paration des pr\u00e9occupations qu&rsquo;on applique au code, appliqu\u00e9e \u00e0 la documentation.<\/p>\n<h2>8. Granularit\u00e9 s\u00e9mantique : Business Case, Use Case, User Story<\/h2>\n<p>Dernier recadrage, le plus fin : le PO rejette le verbe \u00ab\u00a0G\u00e9rer\u00a0\u00bb (\u00ab\u00a0G\u00e9rer les emprunts\u00a0\u00bb), jug\u00e9 trop fourre-tout, et distingue :<\/p>\n<ul>\n<li>le <strong>Business Case<\/strong> : le processus m\u00e9tier de bout en bout (\u00ab\u00a0Op\u00e9rer un pr\u00eat\u00a0\u00bb) ;<\/li>\n<li>le <strong>Use Case<\/strong> : l&rsquo;interaction unitaire d&rsquo;un acteur avec le syst\u00e8me \u00e0 un instant T (\u00ab\u00a0Prendre en compte un emprunt\u00a0\u00bb, \u00ab\u00a0Effectuer une restitution\u00a0\u00bb) \u2014 documentation <strong>p\u00e9renne<\/strong> ;<\/li>\n<li>la <strong>User Story<\/strong> : un artefact de planification <strong>\u00e9ph\u00e9m\u00e8re<\/strong>, qui dispara\u00eet une fois impl\u00e9ment\u00e9e.<\/li>\n<\/ul>\n<p>Cons\u00e9quence concr\u00e8te : le domaine des pr\u00eats, qu&rsquo;on s&rsquo;appr\u00eatait \u00e0 coder comme un seul \u00ab\u00a0g\u00e9rer l&#8217;emprunt\u00a0\u00bb, est d\u00e9compos\u00e9 en deux Use Cases temporels distincts. C&rsquo;est exactement le genre de d\u00e9coupage qui, en aval, \u00e9vite \u00e0 l&rsquo;IA de recr\u00e9er le pi\u00e8ge de l&rsquo;\u00e9pisode 1 \u2014 un agr\u00e9gat qui voudrait tout faire d&rsquo;un coup.<\/p>\n<h2>9. Industrialiser le recadrage : des skills, pas des r\u00e9p\u00e9titions<\/h2>\n<p>R\u00e9p\u00e9ter les m\u00eames corrections \u00e0 chaque conversation n&rsquo;est pas un cadrage, c&rsquo;est une fuite en avant. Le PO pose la question qui cl\u00f4t l&rsquo;it\u00e9ration c\u00f4t\u00e9 m\u00e9thode :<\/p>\n<blockquote>\n<p>Comment p\u00e9renniser toutes ces r\u00e8gles (pas de persona \u00ab\u00a0Syst\u00e8me\u00a0\u00bb, tra\u00e7abilit\u00e9 IREB, historique automatique) pour ne plus avoir \u00e0 les r\u00e9p\u00e9ter \u00e0 l&rsquo;avenir ?<\/p>\n<\/blockquote>\n<p>R\u00e9ponse : la cr\u00e9ation d&rsquo;un <strong>skill<\/strong> <code>business-analyst-ireb<\/code>, qui encapsule ces r\u00e8gles d&rsquo;or et les rend r\u00e9utilisables \u00e0 la demande, sur n&rsquo;importe quel futur cadrage. Puis, au moment de basculer en r\u00e9alisation, un second skill, <code>techlead-bdd-tdd<\/code>, fige cette fois la m\u00e9thodologie de code : Double Loop TDD (BDD \u00e0 l&rsquo;ext\u00e9rieur, TDD strict \u00e0 l&rsquo;int\u00e9rieur), Clean Architecture, TDA, YAGNI.<\/p>\n<pre class=\"mermaid\">\nflowchart LR\n    A[Sc\u00e9nario Gherkin] --&gt;|Rouge| B[Step Definitions]\n    B --&gt; C{Domaine seul&lt;br\/&gt;pas de Spring, pas de DB}\n    C --&gt;|TDD interne: Red\/Green\/Refactor| D[Code de production]\n    D --&gt; E[Sc\u00e9nario BDD Vert]\n<\/pre>\n<h2>10. Ce que \u00e7a change par rapport \u00e0 l&rsquo;\u00e9pisode 1<\/h2>\n<p>L&rsquo;\u00e9pisode 1 concluait : <em>\u00ab\u00a0c&rsquo;est au d\u00e9veloppeur de l&rsquo;arr\u00eater\u00a0\u00bb<\/em>. L&rsquo;\u00e9pisode 2 va plus loin : il ne s&rsquo;agit plus seulement de freiner l&rsquo;IA en cours de route, mais de lui donner, en amont, une grammaire m\u00e9tier suffisamment rigoureuse pour qu&rsquo;elle n&rsquo;ait plus l&rsquo;occasion de d\u00e9river. Chaque recadrage du PO \u2014 parties prenantes, fronti\u00e8re m\u00e9tier\/logiciel, identit\u00e9 des exemplaires, tra\u00e7abilit\u00e9 Epic \u2192 UC, persona des US, granularit\u00e9 Business Case \/ Use Case \/ US \u2014 n&rsquo;est pas une correction ponctuelle : c&rsquo;est une r\u00e8gle qui survit, encapsul\u00e9e dans un skill, au-del\u00e0 de la conversation qui l&rsquo;a fait na\u00eetre.<\/p>\n<p>Le commit <a href=\"https:\/\/github.com\/dmissud\/biblioCQRS\/tree\/Second_IT\" target=\"_blank\" rel=\"noopener\"><code>Second_IT<\/code><\/a> est la preuve par le code que ce travail de cadrage n&rsquo;\u00e9tait pas que de la paperasse : le support code-barre de l&rsquo;exemplaire, rep\u00e9r\u00e9 comme lacune d\u00e8s l&rsquo;\u00e9tape 3 de l&rsquo;atelier, est livr\u00e9 et test\u00e9 (tests d&rsquo;int\u00e9gration sur <code>OuvrageRepositoryAdapter<\/code> et <code>OuvrageCommandController<\/code>).<\/p>\n<h2>11. Le backlog prioris\u00e9 (US-CAT, US-ADH, US-PRT)<\/h2>\n<p>Voici le backlog tel qu&rsquo;issu de l&rsquo;atelier, traduit en tableau apr\u00e8s le recadrage sur la modularit\u00e9 documentaire (\u00e9tape 4). Les User Stories de blocage (US-PRT-02, US-PRT-03) sont d\u00e9j\u00e0 \u00e9crites du point de vue du Documentaliste, conform\u00e9ment au recadrage sur les personas (section 6) :<\/p>\n<table border=\"1\" cellpadding=\"6\" cellspacing=\"0\">\n<thead>\n<tr>\n<th>ID<\/th>\n<th>Epic<\/th>\n<th>En tant que&#8230;<\/th>\n<th>Je veux&#8230;<\/th>\n<th>Afin de&#8230;<\/th>\n<th>Statut<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>US-CAT-01<\/strong><\/td>\n<td>Catalogue<\/td>\n<td>Biblioth\u00e9caire<\/td>\n<td>Ajouter une r\u00e9f\u00e9rence abstraite (ISBN, Titre, Auteur)<\/td>\n<td>Pr\u00e9parer le catalogue pour recevoir des exemplaires<\/td>\n<td>Impl\u00e9ment\u00e9<\/td>\n<\/tr>\n<tr>\n<td><strong>US-CAT-02<\/strong><\/td>\n<td>Catalogue<\/td>\n<td>Biblioth\u00e9caire<\/td>\n<td>Ajouter un exemplaire physique pour un ouvrage donn\u00e9<\/td>\n<td>L&rsquo;int\u00e9grer au stock empruntable<\/td>\n<td>Impl\u00e9ment\u00e9<\/td>\n<\/tr>\n<tr>\n<td><strong>US-CAT-03<\/strong><\/td>\n<td>Catalogue<\/td>\n<td>Biblioth\u00e9caire<\/td>\n<td>Saisir l&rsquo;identifiant unique (code-barre\/RFID) lors de l&rsquo;ajout d&rsquo;un exemplaire<\/td>\n<td>Permettre sa tra\u00e7abilit\u00e9 individuelle physique<\/td>\n<td>Impl\u00e9ment\u00e9 (<a href=\"https:\/\/github.com\/dmissud\/biblioCQRS\/tree\/Second_IT\" target=\"_blank\" rel=\"noopener\"><code>Second_IT<\/code><\/a>)<\/td>\n<\/tr>\n<tr>\n<td><strong>US-ADH-01<\/strong><\/td>\n<td>Adh\u00e9rents<\/td>\n<td>Documentaliste<\/td>\n<td>Enregistrer un nouvel adh\u00e9rent dans le syst\u00e8me<\/td>\n<td>Lui permettre de commencer \u00e0 emprunter<\/td>\n<td>\u00c0 faire<\/td>\n<\/tr>\n<tr>\n<td><strong>US-PRT-01<\/strong><\/td>\n<td>Pr\u00eats<\/td>\n<td>Documentaliste<\/td>\n<td>Enregistrer un emprunt nominal d&rsquo;un exemplaire \u00e0 un adh\u00e9rent<\/td>\n<td>Lui confier l&rsquo;ouvrage pour 3 semaines (g\u00e9r\u00e9 par le syst\u00e8me)<\/td>\n<td>\u00c0 faire<\/td>\n<\/tr>\n<tr>\n<td><strong>US-PRT-02<\/strong><\/td>\n<td>Pr\u00eats<\/td>\n<td>Documentaliste<\/td>\n<td>\u00catre bloqu\u00e9 si je tente d&rsquo;enregistrer un emprunt pour un adh\u00e9rent ayant atteint son quota (5)<\/td>\n<td>Garantir que tous les adh\u00e9rents puissent acc\u00e9der \u00e0 un choix d&rsquo;ouvrages riche<\/td>\n<td>\u00c0 faire<\/td>\n<\/tr>\n<tr>\n<td><strong>US-PRT-03<\/strong><\/td>\n<td>Pr\u00eats<\/td>\n<td>Documentaliste<\/td>\n<td>\u00catre bloqu\u00e9 si je tente d&rsquo;enregistrer un emprunt pour un adh\u00e9rent avec &gt; 1 livre en retard<\/td>\n<td>Favoriser le retour rapide des exemplaires en circulation<\/td>\n<td>\u00c0 faire<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Trois lignes seulement passent au vert dans cette it\u00e9ration : <strong>US-CAT-01, US-CAT-02<\/strong> et <strong>US-CAT-03<\/strong>, la derni\u00e8re \u00e9tant directement la traduction de la lacune d\u00e9busqu\u00e9e \u00e0 l&rsquo;\u00e9tape 4 (l&rsquo;exemplaire sans identit\u00e9). Le reste \u2014 adh\u00e9rents et pr\u00eats \u2014 reste cadr\u00e9 mais non cod\u00e9 : c&rsquo;est tout l&rsquo;objet de l&rsquo;\u00e9pisode 3.<\/p>\n<h2>12. La matrice CRUD de ce qui est r\u00e9ellement impl\u00e9ment\u00e9<\/h2>\n<p>La matrice de tra\u00e7abilit\u00e9 ci-dessous reprend la documentation d&rsquo;architecture (<code>01_use_cases_crud.md<\/code>). Seul <strong>UC-CAT-01 (R\u00e9f\u00e9rencer un ouvrage)<\/strong>, en gras, correspond \u00e0 du code livr\u00e9 dans <a href=\"https:\/\/github.com\/dmissud\/biblioCQRS\/tree\/Second_IT\" target=\"_blank\" rel=\"noopener\"><code>Second_IT<\/code><\/a> ; les lignes li\u00e9es aux Pr\u00eats (<em>en italique<\/em> dans la doc projet) restent des cas d&rsquo;usage anticip\u00e9s, pas encore couverts par une seule ligne de domaine :<\/p>\n<table border=\"1\" cellpadding=\"6\" cellspacing=\"0\">\n<thead>\n<tr>\n<th>Entit\u00e9 Informationnelle<\/th>\n<th>Cas d&rsquo;Usage (UC)<\/th>\n<th>C (Create)<\/th>\n<th>R (Read)<\/th>\n<th>U (Update)<\/th>\n<th>D (Delete)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Ouvrage<\/strong><\/td>\n<td><strong>UC-CAT-01 (R\u00e9f\u00e9rencer un ouvrage) \u2014 impl\u00e9ment\u00e9<\/strong><\/td>\n<td>X (Cr\u00e9ation)<\/td>\n<td>X (Validation unicit\u00e9)<\/td>\n<td>X (Ajout exemplaire)<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><em>UC-PRT-01 (Prendre en compte emprunt) \u2014 futur<\/em><\/td>\n<td><\/td>\n<td>X<\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>Exemplaire<\/strong><\/td>\n<td><strong>UC-CAT-01 (R\u00e9f\u00e9rencer un ouvrage) \u2014 impl\u00e9ment\u00e9<\/strong><\/td>\n<td>X (Ajout physique + code-barre)<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><em>UC-PRT-01 \/ UC-PRT-02 \u2014 futur<\/em><\/td>\n<td><\/td>\n<td>X<\/td>\n<td>X (Changement statut)<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>Adh\u00e9rent<\/strong><\/td>\n<td><em>UC-PRT-01 (Prendre en compte emprunt) \u2014 futur<\/em><\/td>\n<td><\/td>\n<td>X (V\u00e9rif. Quotas)<\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>Emprunt<\/strong><\/td>\n<td><em>UC-PRT-01 (Prendre en compte emprunt) \u2014 futur<\/em><\/td>\n<td>X (Cr\u00e9er)<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><em>UC-PRT-02 (Effectuer restitution) \u2014 futur<\/em><\/td>\n<td><\/td>\n<td>X<\/td>\n<td>X (Cl\u00f4turer)<\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Seules deux entit\u00e9s \u2014 <strong>Ouvrage<\/strong> et <strong>Exemplaire<\/strong> \u2014 ont une colonne C\/R\/U r\u00e9ellement adoss\u00e9e \u00e0 du code de production et des tests d&rsquo;int\u00e9gration (<code>OuvrageRepositoryAdapterTest<\/code>, <code>OuvrageCommandControllerTest<\/code>). Le reste de la matrice, en italique, documente d\u00e9j\u00e0 l&rsquo;attendu pour ne pas repartir d&rsquo;une page blanche au prochain \u00e9pisode \u2014 c&rsquo;est l&rsquo;IREB qui pr\u00e9pare le terrain avant que l&rsquo;IA ne touche au code.<\/p>\n<h2>Pour la suite<\/h2>\n<p><strong>\u00c9pisode 3<\/strong> : la bascule en TechLead. Comment le Double Loop TDD a \u00e9t\u00e9 appliqu\u00e9 \u00e0 la couche infrastructure pour boucler la tranche verticale du domaine \u2014 et ce que l&rsquo;IA, livr\u00e9e au code cette fois avec un cadre m\u00e9tier solide derri\u00e8re elle, a fait de mieux (et de moins bien) que dans l&rsquo;\u00e9pisode 1.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tag de r\u00e9f\u00e9rence : Second_IT \u2014 commit \u00ab\u00a0feat: add barcode support and enhance domain logic\u00a0\u00bb Dans l&rsquo;\u00e9pisode 1, l&rsquo;IA avait montr\u00e9 sa premi\u00e8re limite : livr\u00e9e \u00e0 elle-m\u00eame, elle code tout, tout de suite, sans discipline d&rsquo;it\u00e9ration. La parade trouv\u00e9e \u00e9tait m\u00e9canique \u2014 d\u00e9couper en baby steps. Mais un baby step mal cadr\u00e9 reste un [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[10,12],"class_list":["post-41","post","type-post","status-publish","format-standard","hentry","category-craftsmanship","tag-first_it","tag-second_it"],"_links":{"self":[{"href":"https:\/\/missud.eu\/index.php\/wp-json\/wp\/v2\/posts\/41","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/missud.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/missud.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/missud.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/missud.eu\/index.php\/wp-json\/wp\/v2\/comments?post=41"}],"version-history":[{"count":2,"href":"https:\/\/missud.eu\/index.php\/wp-json\/wp\/v2\/posts\/41\/revisions"}],"predecessor-version":[{"id":43,"href":"https:\/\/missud.eu\/index.php\/wp-json\/wp\/v2\/posts\/41\/revisions\/43"}],"wp:attachment":[{"href":"https:\/\/missud.eu\/index.php\/wp-json\/wp\/v2\/media?parent=41"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/missud.eu\/index.php\/wp-json\/wp\/v2\/categories?post=41"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/missud.eu\/index.php\/wp-json\/wp\/v2\/tags?post=41"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}