Pour les Product Builders
Démarrer un cas
Démarrez votre propre projet aujourd’hui : un dossier, une session ouverte dessus, le premier prompt, et les jalons qui suivent.
Commencez par votre propre projet, pas par un exercice. Un résultat que vous portez, un dossier qui contient tout ce dont il a besoin, une session ouverte sur ce dossier, et le prompt ci-dessous. Tout le reste, c’est la suite des jalons, dans l’ordre.
Votre projet
Nommez en une phrase le résultat que vous portez : pour qui, quel problème, quel résultat. Vous le portez verticalement, front et back, de la discovery jusqu’à la production. Design, Frontend, Backend et API, Data, les accès, la livraison et la revue sont des services horizontaux dans lesquels vous puisez, pas des personnes à qui vous passez le résultat.
Ce qui va dans le dossier
Tout ce dont le projet a besoin va dans un seul dossier, créé pour lui, plutôt que de rester éparpillé entre des disques, des boîtes mail et des onglets.
- Tous les documents que le projet a déjà — ce qui a été écrit avant, ce qui a été reçu, ce que vous avez rassemblé vous-même, quel que soit le format. Le premier prompt convertit ce qu’il peut et dit ce qu’il n’a pas pu convertir.
- La mémoire du projet —
PROJECT_MEMORY.md, la couche de raisonnement : où en est le produit aujourd’hui, les décisions et leurs arbitrages, et quelle source l’emporte quand les sources se contredisent. Entrée de mémoire - Le journal du projet —
PROJECT_JOURNAL.md, la trace chronologique : datée, complétée au fil du temps, jamais réécrite, y compris ce qui s’est révélé faux. Entrée de journal - Le channel du projet — ce n’est pas un fichier : un channel ouvert le jour même, avec dedans toutes les personnes concernées par le produit, le métier compris.
Créez la mémoire et le journal avant que le premier prompt tourne, pas quand vous y penserez.
Ouvrir la session sur le dossier
Ouvrez la session ou le projet de votre assistant sur ce dossier. À ce stade, ce n’est pas un dépôt : il n’y a pas d’application, rien à construire, rien à lancer. C’est un dossier de sources, et cela suffit pour démarrer. Le dépôt arrive au jalon 4, quand vous clonez le starter frontend de votre organisation à côté du dossier et que vous y déplacez le PRD, la mémoire et le journal, sous docs/.
Le premier prompt
- Où coller
- Une nouvelle session de votre assistant de code, ouverte sur le dossier du projet.
- Avec le skill
- Ou bien téléchargez le kit et installez-le pour Claude Code ou Codex, puis appelez le skill sur le dossier au lieu de coller le prompt.
Tu es au jalon 0 de la méthode décrite dans https://onirion.org/fr/complete.md : mettre en
place un nouveau projet produit.
Le dossier du projet est celui sur lequel cette session est ouverte. Ne
travaille qu’à l’intérieur.
Fais ceci, et rien d’autre :
1. Parcours le dossier et liste tous les fichiers que tu trouves.
2. Convertis en Markdown tout ce que tu peux convertir, dans le
sous-dossier `converted/` du dossier du projet. Ne modifie, ne déplace,
ne renomme et n’écrase jamais un original.
3. Écris `converted/INDEX.md` : une ligne par source, avec le nom du
fichier, ce que c’est, et de quand il date. Si tu ne peux pas le dater,
dis-le.
4. Liste tout ce que tu n’as pas pu lire ou pas pu convertir, et pourquoi.
N’analyse pas le contenu. N’en tire aucune conclusion. N’écris pas de PRD.
N’envoie rien nulle part — aucun service, aucun channel, aucune adresse.
Rends compte de l’index, de la liste de ce que tu n’as pas pu lire, et de
l’endroit où tu as mis les fichiers convertis.
Avant de terminer, dis à quel jalon tu es, ce que tu as, ce qui manque, et
ce que je dois décider avant que tu franchisses le jalon suivant.Ce que l’assistant doit répondre. L’index, ce qu’il n’a pas pu lire, où il a mis les fichiers convertis, et où en est le travail :
Jalon 0, mise en place du dossier du projet.
Ce que j’ai : tous les fichiers du dossier parcourus et listés. Ce qui
pouvait être converti est dans `converted/`, avec une ligne par source dans
`converted/INDEX.md` — le nom du fichier, ce que c’est, et de quand il
date, ou « non daté » quand le fichier ne porte aucune date. Aucun original
n’a été modifié, déplacé, renommé ni écrasé.
Ce que je n’ai pas pu lire : les PDF scannés sans couche de texte, et un
tableur protégé par mot de passe.
Ce qui manque : le dossier ne dit rien de qui prend les décisions produit,
et il ne contient aucun entretien utilisateur.
Ce que vous devez décider avant que je franchisse le jalon 1 : si l’ancien
export du backlog est une matière pour la discovery, ou un historique à
laisser de côté.Il n’interprète rien et il n’envoie rien nulle part. Lisez l’index qu’il renvoie et la liste de ce qu’il n’a pas pu lire, puis comblez les trous évidents maintenant, tant que cela coûte peu. Le prompt a sa propre page : Inventorier et convertir.
Ensuite, jalon par jalon
Le jalon 0 vous laisse tout dans un seul dossier, converti et inventorié. Ce qui suit se fait un jalon à la fois, chacun avec le prompt qu’il utilise, et chaque prompt se termine en demandant à la session où en est le travail.
- Jalon 1 · Rassembler la discovery — Ce qui est connu, ce qui manque et ce qui se contredit, écrit dans
DISCOVERY.mdpour que le jalon suivant puisse l’ouvrir par son nom. Lire les channels - Jalon 2 · Écrire le PRD — Un seul document, dont la première section est le cadrage stratégique, affiné et aligné avec le métier, parties techniques comprises. Analyser et écrire le PRD · Modèle de PRD
- Jalon 3 · Prototyper les flows end to end — Votre session prend le rôle de PM et prompte l’outil de design pour des flows entiers, et vous itérez jusqu’à ce que les personnes concernées disent que c’est leur outil. Prompt design — spécification · Couche d’instruction · Prompt d’affinage
- Jalon 4 · Porter le prototype dans le code — À l’intérieur du starter frontend de votre organisation, avec le front qui tourne à côté du design et autant d’allers-retours qu’il faut. Porter le prototype
- Jalon 5 · Brancher le backend — Le plus long : flow par flow, en profondeur, y compris l’état vide, l’erreur, la réponse lente et la permission qui refuse. Brancher le backend
- Jalon 6 · Tester, puis livrer — Des comptes entre de vraies mains pendant que le branchement continue, puis le feu vert avec les leads des corps de métier concernés. Préparer une mise en production
- Jalon 0, Monter le dossier du projet
- Jalon 1, Rassembler la discovery
- Jalon 2, Écrire le PRD
- Jalon 3, Prototyper les flows end to end
- Jalon 4, Porter le prototype dans le code
- Jalon 5, Brancher le backend
- Jalon 6, Tester, puis livrer
Votre propre projet déroule toute la séquence : le jalon 0 sur cette page, les jalons 1 à 6 dans le guide principal, avec ce que chacun exige et les prompts qu’il utilise.
D’un dossier où la discovery est rassemblée jusqu’à un front sur lequel vous pouvez cliquer : trois à quatre heures au mieux et vingt-quatre au pire, quand la discovery a déjà été en partie rassemblée. Puis environ un mois pour brancher le backend jusqu’à ce que les flows tiennent en profondeur, selon la taille de l’application. Le code part quand même en revue chez des devs, et il passe, parce que l’agent travaille dans le starter et les conventions de votre organisation. Ces chiffres viennent de la pratique de l’auteur, pas d’une étude.
Ce qui traverse tous les jalons
La session contrôleur
Une seconde session dont le seul travail est de challenger la première, ouverte de la discovery jusqu’au backend. Elle lit, vérifie et challenge ; elle ne modifie aucun code, elle ne décide d’aucun périmètre, et elle renvoie ses constats avec leurs preuves. C’est vous qui décidez. Session contrôleur
Le garde-fou permanent
Avant chaque modification du code, l’agent revient au starter frontend et aux conventions backend et les relit. C’est ce qui maintient le travail généré dans une forme qu’un développeur peut relire. Contrainte permanente
Quand les services n’existent pas encore
Une partie de ce sur quoi la méthode s’appuie relève des Ops, pas de vous : le design system au jalon 3, le starter frontend et les conventions backend au jalon 4, le chemin vers le staging et les leads qui relisent au jalon 6. Si votre organisation n’a rien de tout cela, ne l’inventez pas, et ne laissez pas l’agent l’inventer non plus — une convention inventée sur le moment est ce que la revue défera plus tard. Demandez-les, avec un responsable nommé et un artefact nommé.
Pas de design system
Demandez à Design Ops les composants et leurs états, les tokens, les règles d’usage, ce qui peut être étendu et ce qui ne peut pas, et qui le maintient. En attendant, nommez un produit existant que votre organisation accepte déjà et concevez par rapport à lui comme à une contrainte, pas comme à une inspiration : le prototype et le front doivent continuer de puiser dans la même chose.
Pas de starter frontend approuvé
Demandez à Frontend Ops le dépôt starter avec son emplacement, sa version et son responsable ; les conventions d’architecture, de routing et d’état ; la manière dont les composants doivent être utilisés ; le pattern de client d’API, l’authentification, les erreurs et les états de chargement ; les contrôles exigés sur une branche déployable et le chemin de prévisualisation ; qui relit le travail frontend ; et une version de tout cela qu’un agent peut lire.
Pas de conventions backend écrites
Demandez à Backend et API Ops le catalogue d’API avec de vrais exemples ; les règles d’authentification et de permissions ; la forme des requêtes et des réponses, les erreurs et le versionnage ; le sens métier des champs clés et des valeurs de statut ; un environnement de test avec des identités de test et des données sans risque ; et la procédure pour demander une API qui n’existe pas encore.
S’entraîner sur un cas fictif (facultatif)
Si vous préférez parcourir les jalons une fois sur quelque chose dont personne ne dépend, le kit fournit un cas d’entraînement : une petite application locale avec deux identités, une option qui fait échouer l’enregistrement, et des tests d’acceptation qui échouent avant que vous implémentiez. Elle tourne sur votre machine, sans rien à installer et sans compte.
Quelqu’un écrit un point d’avancement de projet, sélectionne « Save draft », quitte la page, et constate au retour que le texte a disparu. Cette plainte est une matière d’exercice inventée : ce n’est pas de la recherche, ce n’est pas un vrai utilisateur, et rien ici ne vous demande de la traiter comme une preuve. Le résultat que vous portez : l’auteur peut retrouver le texte qu’il a confirmé, et la seconde identité ne peut pas le lire.
Une fois qu’un enregistrement a confirmé sa réussite, l’auteur peut recharger la page, ou se déconnecter puis se reconnecter, et retrouver ce texte.
La seconde identité ne peut pas lire le brouillon, ni dans la page ni par sa route de lecture directe.
Un enregistrement qui échoue laisse le texte modifié visible, affiche une erreur et propose de réessayer, n’annonce jamais de réussite, et un rechargement avant une nouvelle tentative réussie ne ramène que le dernier texte confirmé.
La fiche d’exercice ci-dessous indique quel prompt lancer à quel jalon, ce que vous devez avoir en main quand chacun se ferme, et où noter les services que la sandbox ne peut pas vous donner — un starter, des conventions backend, un design system, un chemin vers le staging, et les leads qui donnent le feu vert.
Ouvrir la fiche d’exercice Télécharger le kit
Rien de ce qui est nécessaire pour ce parcours n’est réservé à la formation.
Fichier example/first-case.md · texte du kit, en anglais
Onirion · first case worksheet
A method by Alexis Boyer · version 4.0 · September 22, 2026
Run the method once, end to end, on a case nobody depends on. The application is the one shipped beside this file, at sandbox/. You walk the seven gates in order and fill the blocks as you go. The prompts are in the core guide; this worksheet says which one to run where, and what you should be holding when the gate closes.
The complaint that starts this case is a made-up exercise input. It is not research, it is not a real user, and nothing here asks you to treat it as evidence. Wherever the method asks what a source establishes, the honest answer on this case is: a fixture written for practice.
The case
Someone writes a project update, selects Save draft, leaves the page, and finds the text gone on return.
The outcome you own: the author can come back to the text they confirmed, and the second identity cannot read it — not in the page, and not through the direct read route.
What the sandbox already carries, and you can check yourself:
- two identities, chosen at
/as/authorand/as/reviewerand held in a local cookie; - one confirmed draft,
fictional-draft-001, owned by the author identity; POST /savefor the form,GET /api/drafts/fictional-draft-001for the direct read;- a Simulate failed save button that sends
simulate_failure=1, so the failure is reproducible with nothing external; - three deliberate defects: the save does not persist, the direct read answers the second identity, and the failure is swallowed and reported as success;
- three acceptance tests written against the intended behaviour, which fail before you implement.
Outside this case: deletion, expiry, two people editing at once, offline saving, real authentication.
Run the sandbox before you start
- Python 3.9 or newer. Nothing to install, no account, no network.
- From
sandbox/:python3 app.py, then openhttp://127.0.0.1:8766/. - Acceptance checks:
python3 -m unittest -v test_acceptance.py. Expect three failures. Three errors instead mean the environment stopped the tests binding their local server on127.0.0.1. - In Codex, the default
workspace-writesandbox blocks that local server. Allow network access for the session —codex --sandbox workspace-write -c sandbox_workspace_write.network_access=true— or run the test command yourself outside the sandbox. - The server binds to
127.0.0.1only and writessandbox.sqlite3beside the app. Delete that file to reset your manual run; the tests use a temporary database. - The identity switcher is a cookie, not authentication. Never deploy this server. Never put real data in it.
Open your assistant on the case folder
If you installed the kit's skill, invoke it with the case: /onirion in Claude Code, $onirion in Codex. Whatever you use, ask for the gate statement every time, as the guardrail says: which gate it is at, what it has, what is missing, what you must decide before it crosses.
What the sandbox cannot give you
Five things the method asks for are not here: an approved frontend starter, written backend conventions, a design system, a path to staging, and leads who give the go-ahead before production. At each of those points this worksheet stops and has you write down the service that is missing and who you would ask. Do not invent another organization's standards, and do not let the assistant invent them either. Here you keep going inside the shape the sandbox already has, with the gap written down.
Copy this block each time the worksheet asks for it:
Service missing here:
What I would ask for, concretely:
Who I would ask (the role, not "someone"):
What I did instead on this run, and with whose agreement:
Date recorded in the journal:
The two things that run across the gates
Control session — opened in:
How it reaches the main session here:
If it cannot reach it: I relay the finding unchanged and say where it came from.
Limits written into its first prompt: it reads, checks, challenges; it does not
change code; it does not decide scope; it does not write the PRD or the
prompts; it returns findings with evidence and I decide.
Standing guardrail — what the agent re-reads before every change to the code:
What is missing from that list on this run:
The gate statement is asked for at every gate: yes / not yet
Gate 0 — set up the project folder
What you do. Make one folder for this case. Put the sandbox in it, and write the made-up complaint into it in your own words so the material is in the folder rather than in this page. Create the memory and the journal before anything else runs. Then run the inventory and conversion prompt from the core guide, and read what comes back.
Prompt to run. The inventory and conversion prompt (Gate 0). It converts, indexes, and interprets nothing.
Case folder created at:
Sandbox copied into it as:
The made-up complaint written down as:
PROJECT_MEMORY.md created: yes / not yet
PROJECT_JOURNAL.md created: yes / not yet
If this were real, the people who would be in the project channel:
What `converted/INDEX.md` lists:
What the pass could not read:
The hole I filled straight away, while it was cheap:
You should be holding: everything for this case in one folder, converted, inventoried.
Gate 1 — gather the discovery
What you do. Take stock of what you actually have: the sandbox README, app.py, test_acceptance.py, and the made-up complaint. Read the code for what it establishes — the defects are in it, commented. Then write DISCOVERY.md, so Gate 2 can open it by name.
Prompt to run. The Gate 1 prompt, pointed at those three files by name, with its rules block unchanged. There is no channel and no mailbox on this case: the material an agent would normally read for you does not exist here, and that is a line to write down, not a gap to fill with invention.
Sources I actually have:
What is established, and which source establishes it:
What contradicts what, source against source:
What is absent — the questions this material does not answer:
Questions I would put to a stakeholder, if there were one:
My hypothesis on the product boundary:
Written to DISCOVERY.md: yes / not yet
What the control session challenged in the above, and what I did with it:
You should be holding: what is known, what is missing, what contradicts.
Gate 2 — write the PRD
What you do. Produce one document whose first section is the strategic framing. Answer the alignment questions rather than letting the agent choose silently — on this case you are the only one who can answer them, and you say so in the document.
Prompt to run. The PRD prompt (Gate 2), on converted/, converted/INDEX.md, DISCOVERY.md, the memory and the journal, with the template at ../templates/prd.md for the shape of each section.
The three acceptance criteria this case has to carry, because the shipped tests already state them:
- after a save confirms, a reload — and a switch away from the identity and back — brings the confirmed text back;
- the second identity gets neither the text in the page nor a 200 from
GET /api/drafts/fictional-draft-001; the denial does not contain the text; - a failed save answers 503, keeps the edited text in the field, shows an error, offers Retry, and never shows Saved; a reload before a successful retry restores only the last confirmed text; a retry that succeeds persists.
PRD written to:
Strategic framing, in three lines:
Product boundary — in:
Product boundary — out:
Roles: the author identity / the second identity, and what each may read:
The privacy rule that decides this case:
What wins when sources disagree, here:
Functional depth — flows that must really work:
Acceptance criteria — the three above, in my own words:
Open decisions, and who would take them if this were real:
Alignment questions the agent asked me, and my answers:
Every assumption marked as an assumption: yes / not yet
What the control session said about the framing, not only the coherence:
You should be holding: what is in and what is out, agreed — here, agreed with yourself, and written down as that.
Gate 3 — prototype the end-to-end flows
What you do. Let the session take the PM role and write the design prompt from the PRD. Ask for the whole flow, not the main screen: empty, editing, saving, saved, failed with its error and Retry, and the return after reload or a switch of identity. Ask for the narrow screen and for status and error messages a screen reader announces — the shipped tests read a role="status" message and a role="alert" message, so those are behaviour, not decoration.
Prompt to run. The design prompt — long specification — with the short instruction layer, and the refinement prompt if the first output is shallow.
Missing service. There is no design system here. Copy the missing-service block and fill it. Name a reference product you will follow instead, say it is a constraint, and write down that both the prototype and the code will draw on that same thing.
Missing service: design system
(copy the block above and fill it)
Reference product followed instead:
Screens and states the prototype covers:
Narrow-screen behaviour covered: yes / not yet
Status and error messages written as real copy: yes / not yet
Who I showed it to, and what they said:
Nobody depends on this case: what closed the gate was my own judgement, and
that is recorded in the journal as such.
What the showings changed, written to memory and journal:
You should be holding: a prototype of the whole flow, and an honest line about who recognised it.
Gate 4 — port the prototype into code
*What you do. * The port goes into the sandbox's own code. There is no starter to clone, so you do not clone one: the application is the single standard-library file already in front of you, and you keep your changes inside the shape it has. Move the working documents next to the code, under docs/: the PRD, PROJECT_MEMORY.md, PROJECT_JOURNAL.md, all three at once.
Prompt to run. The coding-agent prompt (Gate 4), plus the standing constraint carried in every coding prompt.
Missing services. Two blocks here, not one: no approved frontend starter, and no written backend conventions. Fill both before you let the agent write anything, and name what you would ask Frontend Ops and Backend and API Ops for.
Missing service: approved frontend starter
Missing service: written backend conventions
(copy the block above twice and fill both)
Working documents moved under docs/: yes / not yet
The slice I asked for first:
What I ran it with, and what I clicked:
What was off when I put the running page beside the design:
The back-and-forths it took:
What the control session found when it checked the port against the design:
What I adapted to the sandbox's existing shape, and why, in the journal:
You should be holding: a page that runs, that you can click, still failing the three checks.
Gate 5 — connect the backend
What you do. The backend on this case is the storage layer and the handler in the same file. Connecting it means making the three defects real behaviour: the save persists what was submitted, the read is scoped to the owner so the second identity is denied at the route, and the failure is no longer swallowed — 503, the edit still in the field, an error, a Retry, no Saved. Go deep on each flow before the next: the empty state, the error, the denial, the reload before a retry succeeds.
Prompt to run. The connection prompt (Gate 5), one flow at a time. Call the control session on anything that behaves oddly, and ask it to reproduce rather than fix.
Flow 1 — save and return. What I changed:
Observed after reload:
Observed after switching identity away and back:
Flow 2 — the second identity is denied. What I changed:
Status returned by the direct route:
What the body contains:
Flow 3 — the failed save. What I changed:
Status returned:
What stays in the field:
What the error says, and where Retry is:
What a reload before a successful retry restores:
What a successful retry persists:
`python3 -m unittest -v test_acceptance.py` returned:
What I clicked as each identity, not only what the tests said:
Findings the control session sent to the main session:
Decisions to memory, changes and verifications to the journal, dated:
You should be holding: the three flows holding in depth, and the tests passing because the behaviour changed — not because a test was weakened.
Gate 6 — test, then ship
What you do. Put it in someone else's hands while you are still working, and fix what comes back. Then walk the delivery path as far as it goes here — which is local, and no further. The server binds to loopback and holds a fixture; nothing about this case is deployed, and the run ends by writing down where it stopped.
Prompt to run. The release prompt (Gate 6), as a rehearsal. It names what is in the release, what was tested and with which identities, what was verified and how, what is known to be unfinished, and which review did not take place.
Missing services. No staging and no delivery path, and no leads of the trades to give the go-ahead. Two blocks, filled before you write the release note, so the note can name them.
Missing service: a path from local to the repository to staging to production
Missing service: leads who give the go-ahead before production
(copy the block above twice and fill both)
Who else clicked it, and what they reported:
What I fixed as it came back:
Defects were handled as they appeared, so none were classified: yes / no
Checks I ran, and what they returned:
What I walked end to end myself, including the empty, error and denied states:
What is still unfinished:
Which review did not take place, and who was not there to give it:
Where this run stops: nothing leaves this machine.
Release note written to the journal, dated: yes / not yet
You should be holding: a case you can account for line by line — what you built, what you verified yourself, and which review nobody gave.
What the run leaves you with
The gate that was hardest, and why:
The prompt I had to run twice:
The moment the assistant crossed a gate I had not closed:
The services I wrote down as missing, and who I would ask on a real case:
The one thing I will do differently on a case that matters:
Text licensed CC BY 4.0. Code MIT.