============================================================
 QA SMOKE — Redmine #29 (épopée)
 "Ajouter les rôles et compétences Agile manquants dans les
  listes et filtres"
 Projet : GetYourJob (id 11)   |   Statut entrée : QA
 PR : https://github.com/omdev-tech/GetYourJob/pull/232 (base dev)
 Branche : feat/redmine-29-agile-roles
 Worktree testé :
   .worktrees/redmine-29-agile-roles
 Date : 2026-06-11
 Verdict : PASS
============================================================

NOTE : aucun secret n'est inclus dans ce rapport (aucune
valeur d'environnement, clé API, URL DB, token ou cookie).

------------------------------------------------------------
 MÉTHODE
------------------------------------------------------------
Un smoke UI complet (dev server + DB live + auth prod) n'est
pas praticable dans cet environnement. Conformément à la
consigne, la preuve de smoke repose sur les suites vitest
ajoutées (RoleNormalizationService + AgileRolesAndSkills.
integration), qui assertent EXACTEMENT les surfaces de données
qui pilotent à la fois les sélecteurs (profil / offre) ET les
filtres de recherche :
  - ROLE_PICKER_TAXONOMY  -> InlineRoleSelector + filtre rôle
                             (TopFilterBar / MobileFilterModal)
  - EnhancedDataNormalizationService.searchTechnologies
                          -> autocomplete compétences/outils
                             (sélecteur + suggestions de filtre)
  - RoleNormalizationService.normalizeRole
                          -> mappe les libellés bruts des
                             offres/profils vers l'enum utilisé
                             par le filtre (pertinence du filtre).
Inspection source des fichiers modifiés en complément.

------------------------------------------------------------
 COMMANDES EXÉCUTÉES
------------------------------------------------------------
$ npx prisma generate
  -> Generated Prisma Client (v6.12.0)  [OK]

$ npx vitest run \
    src/domain/services/__tests__/AgileRolesAndSkills.integration.test.ts \
    src/domain/services/__tests__/RoleNormalizationService.test.ts
  -> Test Files  2 passed (2)
  -> Tests       236 passed (236)   [OK]

$ npx vitest run AgileRolesAndSkills.integration --reporter=verbose
  -> 13 passed (13)  [OK]  (détail ci-dessous)

$ npx tsc --noEmit
  -> Erreurs présentes MAIS uniquement dans des fichiers NON
     touchés par #29 (pré-existantes, repo-wide ; tsc/lint
     standalone est cassé sur Next 16, le build s'appuie sur
     ignoreBuildErrors). Aucun fichier non-test modifié par #29
     n'a d'erreur tsc. Les seules erreurs sur des fichiers #29
     sont "Cannot find name describe/expect" dans les *.test.ts
     (globals vitest non résolus par tsc standalone — les tests
     passent au runtime).
     => PAS de régression de type imputable à #29.

------------------------------------------------------------
 INSPECTION SOURCE (extraits, fichiers modifiés par 1de0426)
------------------------------------------------------------
src/lib/role-picker-taxonomy.ts
  category: 'Leadership & Architecture'
    { value: 'AGILE_COACH',             label: 'Coach Agile' }
    { value: 'SCRUM_MASTER_SAFE',       label: 'Scrum Master SAFe' }
    { value: 'RELEASE_TRAIN_ENGINEER',  label: 'Release Train Engineer (RTE)' }

prisma/schema.prisma  (enum RoleType)
    AGILE_COACH
    SCRUM_MASTER_SAFE
    RELEASE_TRAIN_ENGINEER
  + migration prisma/migrations/20260611190000_add_agile_scale_role_types/migration.sql

src/domain/entities/TechnologyStackRemainingCategories.ts
  nouvelle sous-catégorie 'agile-methodologies-tools' :
    Coaching Agile / Amélioration continue / Agilité à l'échelle
    Jira / Confluence / Miro

------------------------------------------------------------
 ACCEPTANCE CRITERIA -> RÉSULTAT
------------------------------------------------------------
[OK] AC1  Coach Agile, Scrum Master SAFe, RTE dispo dans
          "Leadership & Architecture" (sélecteur profil/offre).
          (test: roles live in "Leadership & Architecture")
[OK] AC2  Compétences Agilité à l'échelle, Coaching Agile,
          Amélioration continue disponibles.
          (test: skills searchable)
[OK] AC3  Outils Confluence + Miro disponibles ; Jira présent.
          (test: tools Jira/Confluence/Miro searchable)
[OK] AC4  Nouveaux rôles/compétences/outils dans les filtres
          de recherche (ALL_ROLE_TYPES + autocomplete).
          (test: present in flat ALL_ROLE_TYPES list)
[OK] AC5  Filtre pertinent : "Coach Agile"->AGILE_COACH,
          "RTE"->RELEASE_TRAIN_ENGINEER (un libellé brut
          normalise vers l'enum envoyé par le filtre).
          (test: role-string search resolves to the right enum)
[OK] AC6  Règles de priorité role-normalization.md respectées :
          "Scrum Master SAFe" distinct de "Scrum Master".
          (test: SAFe -> SCRUM_MASTER_SAFE, NOT generic bucket)
[OK] AC7  Aucune régression : "Scrum Master" -> SCRUM_MASTER,
          React résout toujours, tous les rôles existants
          présents.
          (tests: no-regression cases, 223 RoleNormalization
           cases verts)

------------------------------------------------------------
 DÉTAIL — AgileRolesAndSkills.integration (13 tests, verbose)
------------------------------------------------------------
 RUN  v4.0.18 /home/naqued/Development/omdev/GetYourJob/git/GetYourJob/.worktrees/redmine-29-agile-roles

 ✓  ci  src/domain/services/__tests__/AgileRolesAndSkills.integration.test.ts > Agile roles in the picker / filter taxonomy (#57, #65) > Coach Agile, Scrum Master SAFe and RTE live in "Leadership & Architecture" 1ms
 ✓  ci  src/domain/services/__tests__/AgileRolesAndSkills.integration.test.ts > Agile roles in the picker / filter taxonomy (#57, #65) > the generic Scrum Master stays out of Leadership & Architecture (kept distinct) 0ms
 ✓  ci  src/domain/services/__tests__/AgileRolesAndSkills.integration.test.ts > Agile roles in the picker / filter taxonomy (#57, #65) > the new roles are filterable (present in the flat ALL_ROLE_TYPES list that feeds the filter) 0ms
 ✓  ci  src/domain/services/__tests__/AgileRolesAndSkills.integration.test.ts > Agile roles in the picker / filter taxonomy (#57, #65) > the new roles expose human labels (chip / option text) 0ms
 ✓  ci  src/domain/services/__tests__/AgileRolesAndSkills.integration.test.ts > Agile roles in the picker / filter taxonomy (#57, #65) > no regression: every existing role is still present in the taxonomy 1ms
 ✓  ci  src/domain/services/__tests__/AgileRolesAndSkills.integration.test.ts > Filtering relevance — a role-string search resolves to the right enum (#60, #65) > "Coach Agile" offer normalizes to AGILE_COACH (matches the Coach Agile filter) 1ms
 ✓  ci  src/domain/services/__tests__/AgileRolesAndSkills.integration.test.ts > Filtering relevance — a role-string search resolves to the right enum (#60, #65) > "Release Train Engineer" offer normalizes to RELEASE_TRAIN_ENGINEER 0ms
 ✓  ci  src/domain/services/__tests__/AgileRolesAndSkills.integration.test.ts > Filtering relevance — a role-string search resolves to the right enum (#60, #65) > "Scrum Master SAFe" offer normalizes to SCRUM_MASTER_SAFE — NOT the generic bucket 1ms
 ✓  ci  src/domain/services/__tests__/AgileRolesAndSkills.integration.test.ts > Filtering relevance — a role-string search resolves to the right enum (#60, #65) > no regression: a plain "Scrum Master" offer still normalizes to SCRUM_MASTER 0ms
 ✓  ci  src/domain/services/__tests__/AgileRolesAndSkills.integration.test.ts > Agile skills & tools in the selector / filter autocomplete (#57, #65) > tools Jira, Confluence and Miro are now searchable (were absent before) 1ms
 ✓  ci  src/domain/services/__tests__/AgileRolesAndSkills.integration.test.ts > Agile skills & tools in the selector / filter autocomplete (#57, #65) > skills Agilité à l'échelle, Coaching Agile, Amélioration continue are searchable 1ms
 ✓  ci  src/domain/services/__tests__/AgileRolesAndSkills.integration.test.ts > Agile skills & tools in the selector / filter autocomplete (#57, #65) > skills are reachable by their domain aliases (relevance for free-text feeds) 1ms
 ✓  ci  src/domain/services/__tests__/AgileRolesAndSkills.integration.test.ts > Agile skills & tools in the selector / filter autocomplete (#57, #65) > no regression: a core technology still resolves 0ms

 Test Files  1 passed (1)
      Tests  13 passed (13)
   Start at  21:20:40
   Duration  302ms (transform 149ms, setup 0ms, import 179ms, tests 11ms, environment 0ms)

