diff --git a/prisma/seed.ts b/prisma/seed.ts index fccecd6..4cb54c5 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -5,9 +5,9 @@ const prisma = new PrismaClient(); const SUGGESTED_QUESTIONS: Record = { tools: [ "Quels outils IA utilisez-vous au quotidien ?", - "Comment les avez-vous choisis et intégrés à votre workflow ?", + "Comment les avez-vous choisis et intégrés à votre workflow personnel ?", "Utilisez-vous des rules, skills ou agents (Cursor, etc.) pour configurer vos outils ?", - "Partagez-vous une stack commune avec l'équipe ?", + "Comment avez-vous personnalisé votre setup pour l'adapter à vos usages ?", ], prompts: [ "Comment structurez-vous vos prompts pour des tâches complexes ?", @@ -15,9 +15,10 @@ const SUGGESTED_QUESTIONS: Record = { "Comment gérez-vous les cas limites et les outputs inattendus ?", ], context: [ - "Quel contexte fournissez-vous typiquement à l'IA ?", - "Comment décidez-vous ce qui est pertinent à inclure ?", - "Avez-vous des stratégies pour limiter le contexte tout en restant pertinent ?", + "Quels fichiers ou parties du codebase incluez-vous typiquement dans le contexte (selon l'outil : @, #, fichiers ouverts...) ?", + "Comment choisissez-vous ce qui mérite d'être inclus vs laissé hors du contexte ?", + "Utilisez-vous des règles pré-chargées (rules, .cursorrules, config projet) pour fournir du contexte ?", + "Avez-vous des stratégies pour limiter la taille du contexte tout en restant pertinent ?", ], iteration: [ "Comment itérez-vous quand la première réponse ne convient pas ?", @@ -89,22 +90,38 @@ const SUGGESTED_QUESTIONS: Record = { }; const RUBRICS: Record = { - tools: "1:Usage ponctuel — utilisation occasionnelle, sans réelle stratégie ni critères de choix;2:Outil identifié — un outil principal utilisé, choix fait de manière informelle;3:Usage raisonné — comparaison de plusieurs outils, critères explicites (coût, latence, qualité);4:Stack partagée — stack commune à l'équipe, documentée et maintenue;5:Intégré au workflow — adoption généralisée", - prompts: "1:Vague — prompts improvisés, peu de structure, résultats aléatoires;2:Simple — prompts basiques avec instructions claires mais sans systématisation;3:Structuré — format cohérent (rôle, contexte, tâche, format attendu), testés manuellement;4:Templates — bibliothèque de prompts réutilisables, versionnés;5:Prompt engineering maîtrisé — techniques avancées (chain-of-thought, few-shot), optimisation continue, validation des outputs", - context: "1:Peu — contexte minimal fourni, l'IA manque d'informations pour bien répondre;2:Partiel — contexte partiel, parfois pertinent, parfois manquant;3:Suffisant — contexte adapté à la tâche, couvre les éléments essentiels;4:Structuré — contexte organisé (sections, priorités), stratégie de sélection;5:Contextualisation avancée — RAG, embedding, contexte dynamique selon la requête", - iteration: "1:One-shot — une seule tentative, pas de retry si le résultat est insuffisant;2:Quelques itérations — 2-3 essais manuels si la première réponse échoue;3:Itératif — approche systématique: retry, reformulation, décomposition en sous-tâches;4:Décomposition — tâches complexes découpées en étapes, prompts en chaîne;5:IA sparring partner — dialogue continu avec l'IA pour explorer, affiner, challenger les réponses", - evaluation: "1:Acceptation — acceptation des sorties sans vérification significative;2:Relecture superficielle — lecture rapide, pas de critères explicites;3:Vérif fonctionnelle — tests manuels ou automatisés, vérification du comportement;4:Regard archi — évaluation de la maintenabilité, alignement, cohérence;5:Culture critique — critères de qualité partagés, revue systématique, détection des hallucinations", - integration: "1:Isolé — usage personnel, pas de partage ou discussion en équipe;2:Discussions — échanges informels sur les usages, pas de formalisation;3:Partages — démos, retours d'expérience, bonnes pratiques partagées;4:Formalisé — pratiques documentées, onboarding, standards d'usage;5:Doctrine équipe — vision partagée, roadmap IA, adoption comme pilier de la stratégie", - usecases: "1:Snippets — usage limité à la génération de petits snippets ou complétion;2:Code basique — génération de fonctions, classes, scripts simples;3:Tests/refacto — génération de tests, refactoring, documentation;4:Debug/opt — aide au debug, optimisation, analyse de code;5:Discovery→review — exploration de solutions, design, revue de code, boucle complète", - impact: "1:Aucun — pas d'impact visible sur la delivery;2:Marginal — gain de temps perçu mais non quantifié;3:Accélération — vélocité accrue, moins de tâches répétitives;4:Gain mesurable — métriques (temps, qualité, vélocité) documentées;5:Levier clair — IA comme levier stratégique, pilotage de l'adoption, ROI démontré", - risks: "1:Aucune — pas de considération des risques (sécurité, confidentialité, biais);2:Sensibilisation — conscience des risques, pas de processus formalisé;3:Bonnes pratiques — précautions appliquées (données, prompts, sanitization);4:Règles partagées — règles d'usage, checklist, validation des données;5:Doctrine — politique de sécurité IA, gouvernance, revue des risques", - alignment: "1:Hors standards — code généré souvent non conforme, rework systématique;2:Rework lourd — modifications importantes nécessaires pour aligner;3:Cohérent — code généralement aligné, quelques ajustements;4:Aligné — prompts et garde-fous pour respecter standards et archi;5:Quasi conforme — sorties quasi conformes, validation automatisée possible", - code_quality: "1:Peu maintenable — code fragile, difficile à faire évoluer;2:Correct fragile — fonctionne mais cas limites non gérés;3:Maintenable — code propre, testable, évolutif;4:Propre structuré — patterns respectés, séparation des responsabilités;5:Quasi senior — qualité équivalente à un code produit par un dev senior", - quality_usage: "1:Rarement — utilisation peu fréquente pour la qualité;2:Tests simples — génération de tests unitaires basiques;3:Tests utiles — tests pertinents, couverture, refacto assistée;4:Refacto guidée — IA pour identifier du code à améliorer, suggérer des refactorings;5:Levier qualité — IA intégrée dans la boucle qualité (review, dette technique, standards)", - capitalization: "1:None — pas de capitalisation, tout est dans la tête ou éparpillé;2:Informel — notes personnelles, partage oral;3:Bonnes pratiques — document informal, exemples partagés;4:Base prompts — bibliothèque de prompts, wiki interne;5:Wiki & REX — base documentée, retours d'expérience, amélioration continue", - learning: "1:Dépendance — copier-coller sans comprendre, risque de régression;2:Apprentissage limité — utilisation pour débloquer mais compréhension superficielle;3:Compréhension — IA pour comprendre les concepts, valider sa compréhension;4:IA pour patterns — utilisation pour apprendre des patterns, architectures, bonnes pratiques;5:Accélérateur de progression — IA comme outil de montée en compétence structurée", - measurement: "1:Aucun suivi — pas de mesure de l'usage ou de l'impact;2:Perception — sentiment d'impact, pas de données;3:Feedback — retours utilisateurs, observations qualitatives;4:Indicateurs simples — métriques d'usage (adoption, volume), premiers KPIs;5:Pilotage structuré — tableau de bord, suivi de l'adoption, pilotage de l'amélioration", - cost_control: "1:Inconscient — pas de visibilité sur les coûts, usage sans limite;2:Aware — conscience des coûts, pas de suivi ni de budget;3:Suivi basique — métriques de consommation (tokens, API), pas d'alertes;4:Piloté — budgets par équipe/projet, alertes, arbitrage modèles/qualité;5:Optimisé — optimisation continue (contexte, batch, modèles), ROI coût documenté", + tools: + "1:Usage ponctuel — utilisation occasionnelle, sans réelle stratégie ni critères de choix;2:Outil identifié — un outil principal utilisé, choix fait de manière informelle;3:Usage raisonné — comparaison de plusieurs outils, critères explicites (coût, latence, qualité), intégration dans son workflow;4:Maîtrise personnelle — outils bien configurés (rules, skills), usage fluide et efficace;5:Expertise — maîtrise des fonctionnalités avancées (agents, customisation), optimisation continue de son setup", + prompts: + "1:Vague — prompts improvisés, peu de structure, résultats aléatoires;2:Simple — prompts basiques avec instructions claires mais sans systématisation;3:Structuré — format cohérent (rôle, contexte, tâche, format attendu), testés manuellement;4:Templates — sait trouver des prompts réutilisables (ex. how to Peaksys) et s'en sert;5:Prompt engineering maîtrisé — techniques avancées (chain-of-thought, few-shot), optimisation continue, validation des outputs", + context: + "1:Peu — contexte minimal (peu ou pas de fichiers inclus), l'IA manque de code/archi pour bien répondre;2:Partiel — quelques fichiers inclus ou ouverts, parfois pertinent, parfois manquant;3:Suffisant — fichiers pertinents inclus systématiquement, règles de base utilisées;4:Structuré — règles pré-chargées, stratégie de sélection (inclusion explicite vs fichiers ouverts vs config);5:Context engineering maîtrisé — règles ciblées, inclusion pertinente, gestion de la taille du contexte, optimisation continue", + iteration: + "1:One-shot — une seule tentative, pas de retry si le résultat est insuffisant;2:Quelques itérations — 2-3 essais manuels si la première réponse échoue;3:Itératif — approche systématique: retry, reformulation, décomposition en sous-tâches;4:Décomposition — tâches complexes découpées en étapes, prompts en chaîne;5:IA sparring partner — dialogue continu avec l'IA pour explorer, affiner, challenger les réponses", + evaluation: + "1:Acceptation — acceptation des sorties sans vérification significative;2:Relecture superficielle — lecture rapide, pas de critères explicites;3:Vérif fonctionnelle — tests manuels ou automatisés, vérification du comportement;4:Regard archi — évaluation de la maintenabilité, alignement, cohérence;5:Culture critique — critères de qualité partagés, revue systématique, détection des hallucinations", + integration: + "1:Isolé — usage personnel, pas de partage ou discussion en équipe;2:Discussions — échanges informels sur les usages, pas de formalisation;3:Partages — démos, retours d'expérience, bonnes pratiques partagées;4:Formalisé — pratiques documentées, onboarding, standards d'usage;5:Doctrine équipe — vision partagée, roadmap IA, adoption comme pilier de la stratégie", + usecases: + "1:Snippets — usage limité à la génération de petits snippets ou complétion;2:Code basique — génération de fonctions, classes, scripts simples;3:Tests/refacto — génération de tests, refactoring, documentation;4:Debug/opt — aide au debug, optimisation, analyse de code;5:Discovery→review — exploration de solutions, design, revue de code, boucle complète", + impact: + "1:Aucun — pas d'impact visible sur la delivery;2:Marginal — gain de temps perçu mais non quantifié;3:Accélération — vélocité accrue, moins de tâches répétitives;4:Gain mesurable — métriques (temps, qualité, vélocité) documentées;5:Levier clair — IA comme levier stratégique, pilotage de l'adoption, ROI démontré", + risks: + "1:Aucune — pas de considération des risques (sécurité, confidentialité, biais);2:Sensibilisation — conscience des risques, pas de processus formalisé;3:Bonnes pratiques — précautions appliquées (données, prompts, sanitization);4:Règles partagées — règles d'usage, checklist, validation des données;5:Doctrine — politique de sécurité IA, gouvernance, revue des risques", + alignment: + "1:Hors standards — code généré souvent non conforme, rework systématique;2:Rework lourd — modifications importantes nécessaires pour aligner;3:Cohérent — code généralement aligné, quelques ajustements;4:Aligné — prompts et garde-fous pour respecter standards et archi;5:Quasi conforme — sorties quasi conformes, validation automatisée possible", + code_quality: + "1:Peu maintenable — code fragile, difficile à faire évoluer;2:Correct fragile — fonctionne mais cas limites non gérés;3:Maintenable — code propre, testable, évolutif;4:Propre structuré — patterns respectés, séparation des responsabilités;5:Quasi senior — qualité équivalente à un code produit par un dev senior", + quality_usage: + "1:Rarement — utilisation peu fréquente pour la qualité;2:Tests simples — génération de tests unitaires basiques;3:Tests utiles — tests pertinents, couverture, refacto assistée;4:Refacto guidée — IA pour identifier du code à améliorer, suggérer des refactorings;5:Levier qualité — IA intégrée dans la boucle qualité (review, dette technique, standards)", + capitalization: + "1:None — pas de capitalisation, tout est dans la tête ou éparpillé;2:Informel — notes personnelles, partage oral;3:Bonnes pratiques — document informal, exemples partagés;4:Base prompts — bibliothèque de prompts, wiki interne;5:Wiki & REX — base documentée, retours d'expérience, amélioration continue", + learning: + "1:Dépendance — copier-coller sans comprendre, risque de régression;2:Apprentissage limité — utilisation pour débloquer mais compréhension superficielle;3:Compréhension — IA pour comprendre les concepts, valider sa compréhension;4:IA pour patterns — utilisation pour apprendre des patterns, architectures, bonnes pratiques;5:Accélérateur de progression — IA comme outil de montée en compétence structurée", + measurement: + "1:Aucun suivi — pas de mesure de l'usage ou de l'impact;2:Perception — sentiment d'impact, pas de données;3:Feedback — retours utilisateurs, observations qualitatives;4:Indicateurs simples — métriques d'usage (adoption, volume), premiers KPIs;5:Pilotage structuré — tableau de bord, suivi de l'adoption, pilotage de l'amélioration", + cost_control: + "1:Inconscient — pas de visibilité sur les coûts, usage sans limite;2:Aware — conscience des coûts, pas de suivi ni de budget;3:Suivi basique — métriques de consommation (tokens, API), pas d'alertes;4:Piloté — budgets par équipe/projet, alertes, arbitrage modèles/qualité;5:Optimisé — optimisation continue (contexte, batch, modèles), ROI coût documenté", }; const TEMPLATES_DATA = [ @@ -112,22 +129,78 @@ const TEMPLATES_DATA = [ id: "full-15", name: "Full - 16 dimensions", dimensions: [ - { id: "tools", title: "Choix & maîtrise des outils", rubric: RUBRICS.tools }, + { + id: "tools", + title: "Maîtrise individuelle de l'outillage", + rubric: RUBRICS.tools, + }, { id: "prompts", title: "Clarté des prompts", rubric: RUBRICS.prompts }, - { id: "context", title: "Pertinence du contexte fourni", rubric: RUBRICS.context }, - { id: "iteration", title: "Capacité d'itération", rubric: RUBRICS.iteration }, - { id: "evaluation", title: "Évaluation critique", rubric: RUBRICS.evaluation }, - { id: "integration", title: "Intégration dans les pratiques d'équipe", rubric: RUBRICS.integration }, - { id: "usecases", title: "Cas d'usage couverts", rubric: RUBRICS.usecases }, + { + id: "context", + title: "Context engineering (IDE/CLI)", + rubric: RUBRICS.context, + }, + { + id: "iteration", + title: "Capacité d'itération", + rubric: RUBRICS.iteration, + }, + { + id: "evaluation", + title: "Évaluation critique", + rubric: RUBRICS.evaluation, + }, + { + id: "integration", + title: "Intégration dans les pratiques d'équipe", + rubric: RUBRICS.integration, + }, + { + id: "usecases", + title: "Cas d'usage couverts", + rubric: RUBRICS.usecases, + }, { id: "impact", title: "Impact sur la delivery", rubric: RUBRICS.impact }, - { id: "risks", title: "Gestion risques & sécurité", rubric: RUBRICS.risks }, - { id: "alignment", title: "Alignement archi & standards", rubric: RUBRICS.alignment }, - { id: "code_quality", title: "Qualité du code généré", rubric: RUBRICS.code_quality }, - { id: "quality_usage", title: "Usage pour la qualité (tests, review)", rubric: RUBRICS.quality_usage }, - { id: "capitalization", title: "Capitalisation & partage", rubric: RUBRICS.capitalization }, - { id: "learning", title: "Montée en compétence via IA", rubric: RUBRICS.learning }, - { id: "measurement", title: "Mesure & pilotage", rubric: RUBRICS.measurement }, - { id: "cost_control", title: "Maîtrise des coûts", rubric: RUBRICS.cost_control }, + { + id: "risks", + title: "Gestion risques & sécurité", + rubric: RUBRICS.risks, + }, + { + id: "alignment", + title: "Alignement archi & standards", + rubric: RUBRICS.alignment, + }, + { + id: "code_quality", + title: "Qualité du code généré", + rubric: RUBRICS.code_quality, + }, + { + id: "quality_usage", + title: "Usage pour la qualité (tests, review)", + rubric: RUBRICS.quality_usage, + }, + { + id: "capitalization", + title: "Capitalisation & partage", + rubric: RUBRICS.capitalization, + }, + { + id: "learning", + title: "Montée en compétence via IA", + rubric: RUBRICS.learning, + }, + { + id: "measurement", + title: "Mesure & pilotage", + rubric: RUBRICS.measurement, + }, + { + id: "cost_control", + title: "Maîtrise des coûts", + rubric: RUBRICS.cost_control, + }, ], }, ]; @@ -168,12 +241,18 @@ async function main() { // Bootstrap demo data uniquement si la DB est vide const evalCount = await prisma.evaluation.count(); if (evalCount === 0) { - const template = await prisma.template.findUnique({ where: { id: "full-15" } }); + const template = await prisma.template.findUnique({ + where: { id: "full-15" }, + }); if (!template) throw new Error("Template not found"); await prisma.user.upsert({ where: { email: "admin@cars-front.local" }, - create: { email: "admin@cars-front.local", name: "Admin User", role: "admin" }, + create: { + email: "admin@cars-front.local", + name: "Admin User", + role: "admin", + }, update: {}, }); @@ -183,9 +262,24 @@ async function main() { }); const candidates = [ - { name: "Alice Chen", role: "Senior ML Engineer", team: "Cars Front", evaluator: "Jean Dupont" }, - { name: "Bob Martin", role: "Data Scientist", team: "Cars Front", evaluator: "Marie Curie" }, - { name: "Carol White", role: "AI Product Manager", team: "Cars Data", evaluator: "Jean Dupont" }, + { + name: "Alice Chen", + role: "Senior ML Engineer", + team: "Cars Front", + evaluator: "Jean Dupont", + }, + { + name: "Bob Martin", + role: "Data Scientist", + team: "Cars Front", + evaluator: "Marie Curie", + }, + { + name: "Carol White", + role: "AI Product Manager", + team: "Cars Data", + evaluator: "Jean Dupont", + }, ]; for (let i = 0; i < candidates.length; i++) { @@ -199,8 +293,14 @@ async function main() { evaluationDate: new Date(2025, 1, 15 + i), templateId: template.id, status: i === 0 ? "submitted" : "draft", - findings: i === 0 ? "Bonne maîtrise des outils et des prompts. Axes d'amélioration : capitalisation et mesure." : null, - recommendations: i === 0 ? "Former sur la capitalisation des prompts et mettre en place des indicateurs." : null, + findings: + i === 0 + ? "Bonne maîtrise des outils et des prompts. Axes d'amélioration : capitalisation et mesure." + : null, + recommendations: + i === 0 + ? "Former sur la capitalisation des prompts et mettre en place des indicateurs." + : null, }, }); for (const d of dims) {