Avant que je te demande la personne seed et la liste first-pass, je te livre une machine qui marche. Testée par moi. Bout en bout. Sur fixtures que je fabrique. Tu cliques un lien à la fin, tu vois le système vivant, tu juges.
Tu m'as fait remarquer, à raison, que c'est ma job de te présenter un produit fonctionnel — pas de te placer en position de QA tester. Voici ce que ça veut dire concrètement pour l'itération zéro.
Infrastructure entièrement provisionnée par moi. Worker, domaine custom, R2, queue, Postgres avec pgvector, Resend. Si une pièce manque, c'est rouge sur le dashboard, je la fais avant de te dire prêt.
Trois agents codés et brieffés. Interview Designer, Enricher, Cartographer. Pas six : les autres viennent aux itérations 4-5.
Tests qui couvrent chaque pièce. Unit + integration + contract. npm test doit passer ou je ne te livre rien.
Démo bout en bout sur fixtures fictifs. Trois transcripts que je fabrique moi-même → R2 → queue → Enricher → DB → Cartographer → mini-scène écrite. Tu juges sur la matière.
Page d'entrevue testable par toi. entrevue.lifeandlogic.ai/seed/preview — tu cliques, tu fais 3 min de conversation avec Clara, tu confirmes que le transcript revient.
Dashboard de fin d'itération zéro. Une page, un bouton "approuver / rejeter avec commentaires". C'est ton seul moment éditorial.
Tout ça doit exister, être branché, et passer mes tests avant que la moindre ligne de code applicatif puisse marcher. Je le fais en un bloc.
| Ressource | Choix | Pourquoi |
|---|---|---|
| Worker | in-memoriam-pipeline sur compte Life and Logic | Sépare le pitch (step1) du moteur (entrevue + API) |
| Domaine | entrevue.lifeandlogic.ai | Lien public pour les contributeurs · DNS auto-provisionné par Wrangler |
| R2 brut | in-memoriam-raw | Source of truth immuable : audio + transcript JSON, jamais modifiés |
| R2 enrichi | in-memoriam-enriched | Snapshots post-enrichment, pour audit |
| Queue | enrich-queue + DLQ | Retries + dead-letter automatique, pas de logique custom |
| Postgres | Neon free tier + Hyperdrive | Schéma porté d'Aubainerie · pgvector activé · 2 nouvelles tables |
| Resend | clara@lifeandlogic.ai · DKIM/SPF | Invitations contributeurs, plus tard les follow-ups |
Ce que j'applique en migrations/001_initial.sql, hors-bande, via
l'endpoint admin (jamais de DDL en query path) :
conversations, conversation_enrichment, insights (discriminé), verbatims, quality_audits, conversation_tags, enrichment_runs, sync_watermarkentity_mentions (graphe : personnes / lieux / événements nommés, par interview) · narrative_threads (constellations détectées, densité, voix)pgvector · embeddings sur verbatims.text_clean et insights.descriptionconversations_real, graph_density_by_axisPas six. En itération zéro je n'ai besoin que des trois qui composent le moteur de découverte du graphe. Le Master Editor, c'est moi (incarné dans Claude Code). Le Book Composer et le Print Director viennent aux itérations 4-5.
Pour la seed, contexte minimal (tes intentions, nature du réseau). Pour le first pass, contexte = corpus seed + rôle de la personne. Sortie : un agent ElevenLabs unique par interviewé.
InterviewAgentSpecPorté quasi tel quel d'Aubainerie. Atomicité par conversation : si une étape rate, rollback complet et la queue retry l'interview entière.
Lit toutes les entity_mentions + conversation_tags + insights. Construit un graphe en mémoire. Trouve les nœuds-hubs (mentionnés par plusieurs voix), les zones denses (multi-dimensions qui pulsent), les voix sous-représentées.
narrative_threads avec score de richesse, voix dominantes, dimensions actives
Si tu en as marre de découvrir les bugs en cliquant, ces tests existent pour
que tu n'aies plus à le faire. Ils tournent localement avec npm test.
S'ils ne passent pas, je ne te dis pas prêt.
| Type | Cible | Ce que ça vérifie |
|---|---|---|
| Unit | Chaque pass de l'Enricher | Schéma JSON respecté · garde-fous se déclenchent sur fixtures hallucinées · halluciné = dropped, pas inséré en DB |
| Contract | Webhook ElevenLabs | Pas de signature = 401 · mauvaise signature = 401 · bonne signature = 200 + queue message envoyé |
| Contract | Endpoints admin | Pas de bearer = 401 · mauvais bearer = 401 · bon bearer = 200. Fail-closed strict. |
| Integration | Pipeline complet sur fixture | Transcript synthétique → R2 → queue → Enricher → DB · toutes les lignes attendues présentes avec les bonnes valeurs |
| Integration | Cartographer sur 3 fixtures | Mini-corpus hand-crafted avec des nœuds qui se chevauchent · constellations attendues émergent · voix sous-représentées détectées |
| E2E | Page d'entrevue → transcript en DB | Charge la page de preview · widget Clara s'initialise · 3 min de conversation · transcript apparaît dans conversations · enrichment se déclenche |
C'est ce qui te permet de juger sans rien tester toi-même. Je fabrique trois transcripts fictifs — un monde inventé, trois voix, trois générations, des décennies différentes. Pas ton livre. Juste assez de matière pour que la machine ait quelque chose à mâcher.
Transcripts synthétiques, lisibles, qui simulent ce qu'une vraie conversation Clara produirait. Tu les liras pour comprendre la matière d'entrée.
Visualisation des nœuds (personnes, lieux, événements, thèmes) avec leurs liens. Permet de voir ce que l'Enricher a vraiment compris.
Sortie du Cartographer : 2-3 constellations candidates avec leurs voix, dimensions, score de richesse. C'est la promesse de structure narrative émergente.
1 page écrite par moi (proxy du Composer) à partir d'une constellation. Pour que tu juges la qualité narrative possible avant qu'on lance les vraies entrevues.
C'est le moment où tu décides si la méthode tient — sur du matériel fictif, donc sans charge émotionnelle, donc avec un jugement froid. Si la mini-scène est plate, ennuyeuse, mécanique, on rectifie l'approche du Composer avant de toucher la vraie famille. Si elle vit, on continue.
À l'adresse entrevue.lifeandlogic.ai/seed/preview, je publie la
page exacte qu'aura la personne seed. Mode test : tu peux la cliquer toi-même,
faire 3 min de conversation avec Clara, valider l'expérience.
Question pratique : est-ce que tu veux la tester toi-même (j'ouvre le mode preview pour toi), ou tu préfères que je la teste en parlant tout seul comme un fou pendant 3 minutes pour générer le transcript de validation ? Les deux marchent — j'ai un préféré : c'est toi, parce que c'est toi qui sentiras si Clara a le bon ton.
Le livrable final. Une page qui te permet de juger en un coup d'œil. Tu cliques un lien (que je t'enverrai par message court quand tout sera vert), tu vois tout, tu décides.
Pour chacun : statut, dernière mise à jour, lien vers preuve (logs de tests, ressource Cloudflare, commit Git). Si quelque chose est rouge, je ne t'écris pas — je le corrige.
Consultable comme un mini-livre. Tu lis dans l'ordre : la matière d'entrée, l'extraction, les constellations, la scène finale. C'est ton matériel d'évaluation.
Pour chaque clé : statut. Anthropic et ElevenLabs, déjà dans le .env. Resend, déjà aussi. Lulu, à paster à l'itération 5. Aucun n'est attendu de toi pour l'itération zéro — j'utilise ce qui existe déjà.
Si "Approuver" : tu me passes les noms (seed + first-pass). Si "Rejeter" : tu m'écris ce qui cloche, et je corrige avant de te rappeler.
Je commence dès que tu valides ce plan. Je te tiendrai informé par messages courts à chaque palier franchi. Pas de questions intermédiaires sauf si je découvre quelque chose qui change le scope.
Aucun input requis de toi pendant le build. Les API keys que j'utilise sont
déjà dans le .env du projet
(Anthropic, ElevenLabs, Resend). Lulu attend l'itération 5. Cloudflare est
déjà branché à mon wrangler whoami.
~/in-memoriam/pipeline/ · branche initiale : main · tests : npm test · déploiement : npm run deploy