Project

General

Profile

Actions

Feature #29

closed
CD

Ajouter les rôles et compétences Agile manquants dans les listes et filtres

Feature #29: Ajouter les rôles et compétences Agile manquants dans les listes et filtres

Added by Client Dashboard about 2 months ago. Updated about 1 month ago.

Status:
Shipped
Priority:
Normal
Assignee:
-
Start date:
06/11/2026
Due date:
% Done:

100%

Estimated time:
(Total: 0:00 h)
spec_ref:

Spec épopée #29 (voir commentaire daté du 2026-06-11) : 3 sous-tâches — (1) Frontend listes rôles/compétences/outils, (2) Frontend filtres de recherche + E2E pertinence, (3) Backend/taxonomie normalisation (role-normalization.md + MatchingAgent). Surfaces : GetYourJob/src/ (TS) + MatchingAgent/ (Python).

build_status:
build_number:
ci_run_url:
scan_status:
scan_report_url:
deploy_status:
preprod_url:
https://github.com/omdev-tech/GetYourJob/pull/240
deployed_at:
branch:
feat/redmine-29-agile-roles
pr_url:
https://github.com/omdev-tech/GetYourJob/pull/232
security_key:
severity:
paused:

Description

### Problème
Actuellement, les rôles et compétences spécifiques à l'Agilité (ex : Coach Agile, RTE, SAFe) sont absents des listes de sélection dans les profils et les offres d'emploi. De plus, les outils comme Confluence et Miro ne sont pas disponibles pour le filtrage, limitant la visibilité des profils et offres dans ce domaine.

### Contexte
Les utilisateurs (candidats et recruteurs) ne peuvent pas :
- Sélectionner des rôles comme **Coach Agile**, **Scrum Master SAFe** ou **Release Train Engineer (RTE)** dans leur profil ou lors de la création d'une offre.
- Filtrer les offres/profils par des compétences clés comme **Agilité à l'échelle**, **Coaching Agile** ou des outils comme **Miro** et **Confluence**.

D'après la documentation existante ([role-normalization.md](doc:frontend:docs/superpowers/plans/2026-04-20-role-normalization.md)), le rôle **Scrum Master** est déjà présent mais trop générique (inclut "Coach Agile" comme synonyme), ce qui ne permet pas de distinguer les spécialisations.

### Comportement proposé
1. **Ajouter les rôles manquants** dans la catégorie existante **"Leadership & Architecture"** (pour rester cohérent avec la structure actuelle) :
- **Coach Agile** (distinct de "Scrum Master").
- **Scrum Master SAFe** (pour cibler les certifications SAFe).
- **Release Train Engineer (RTE)**.

2. **Ajouter les compétences et outils manquants** dans les listes existantes (sans créer de nouvelle catégorie) :
- **Compétences** : Agilité à l'échelle (SAFe, LeSS), Coaching Agile, Amélioration continue (Kaizen, Lean).
- **Outils** : Confluence, Miro (vérifier si Jira est déjà présent).

3. **Rendre ces ajouts disponibles dans les filtres de recherche** pour permettre aux utilisateurs de filtrer les offres/profils par ces critères.

## Acceptance criteria
- [ ] Les rôles **Coach Agile**, **Scrum Master SAFe** et **RTE** sont disponibles dans la catégorie **"Leadership & Architecture"** lors de la sélection d'un poste (profil ou offre).
- [ ] Les compétences **Agilité à l'échelle**, **Coaching Agile** et **Amélioration continue** sont disponibles dans la section compétences.
- [ ] Les outils **Confluence** et **Miro** sont disponibles dans la section outils (vérifier que **Jira** est déjà présent).
- [ ] Tous les nouveaux rôles, compétences et outils sont disponibles dans les filtres de recherche (ex : un recruteur peut filtrer les profils par "RTE" ou "Miro").
- [ ] Un test utilisateur confirme que les filtres retournent des résultats pertinents (ex : une recherche par "Coach Agile" affiche les profils correspondants).
- [ ] Les rôles et compétences ajoutés respectent les règles de priorité définies dans [role-normalization.md](doc:frontend:docs/superpowers/plans/2026-04-20-role-normalization.md) (ex : "Scrum Master SAFe" est distinct de "Scrum Master").
- [ ] Aucune régression n'est introduite dans les fonctionnalités existantes (ex : les filtres actuels continuent de fonctionner).


Files

qa_29_visual_proof.png (101 KB) qa_29_visual_proof.png Redmine Admin, 06/11/2026 07:22 PM
qa_29_technical_proof.txt (8.4 KB) qa_29_technical_proof.txt Redmine Admin, 06/11/2026 07:22 PM
qa_29_visual_proof.png

Subtasks 4 (0 open4 closed)

Feature #57: Frontend : enrichir les listes rôles / compétences / outils (Agilité à l'échelle)Shipped06/11/2026

Actions
Feature #60: Backend / taxonomie : normalisation des rôles & compétences Agile (role-normalization.md + MatchingAgent)Shipped06/11/2026

Actions
Feature #65: Frontend : exposer les nouveaux critères Agile dans les filtres de recherche + test E2E de pertinenceShipped06/11/2026

Actions
Feature #68: [MatchingAgent] Aligner le scorer Python sur les nouveaux rôles & compétences Agile (suite de #60)Shipped06/11/2026

Actions

RA Updated by Redmine Admin about 2 months ago Actions #1

  • Status changed from Submitted to Spec

RA Updated by Redmine Admin about 2 months ago Actions #2

## Spec (épopée) — Ajouter les rôles et compétences Agile manquants dans les listes et filtres

### Problème
Les rôles, compétences et outils spécifiques à l'Agilité à l'échelle (Coach Agile, Scrum Master SAFe, RTE, Agilité à l'échelle, Coaching Agile, Amélioration continue, Confluence, Miro) sont absents des listes de sélection (profil + offre) et des filtres de recherche. Le rôle générique « Scrum Master » englobe aujourd'hui « Coach Agile » comme synonyme, ce qui empêche de distinguer les spécialisations.

### Approche
Travail réparti sur deux surfaces :
- **Frontend (`GetYourJob/src/`)** : enrichir les listes statiques de rôles / compétences / outils consommées par la sélection de poste (profil et création d'offre), puis exposer ces nouvelles entrées dans les filtres de recherche.
- **Backend / taxonomie (`MatchingAgent/` + `docs/.../2026-04-20-role-normalization.md`)** : faire reconnaître les nouveaux rôles/compétences par la normalisation, en distinguant « Coach Agile », « Scrum Master SAFe » et « RTE » du « Scrum Master » générique, afin que le filtrage et le matching retournent des résultats pertinents.

Découpage par responsabilité (et non arbitraire), dépendances acycliques : la taxonomie alimente la pertinence des filtres ; les listes alimentent les filtres.

### Critères d'acceptation de l'épopée
- Coach Agile, Scrum Master SAFe et RTE sélectionnables dans « Leadership & Architecture » (profil + offre).
- Agilité à l'échelle, Coaching Agile, Amélioration continue disponibles en compétences ; Confluence et Miro en outils (Jira vérifié présent).
- Tous ces éléments filtrables dans la recherche, avec résultats pertinents (test utilisateur).
- Distinction de normalisation respectée (« Scrum Master SAFe » ≠ « Scrum Master ») conformément à role-normalization.md.
- Aucune régression sur les listes/filtres existants.

### Décision de découpage : OUI (épopée + 3 sous-tâches)
Le travail couvre deux surfaces de code (TS frontend + Python taxonomie) et trois responsabilités distinctes :

1. **#child-1 — Frontend : enrichir les listes rôles / compétences / outils** (S)
Ajout des entrées aux listes statiques consommées par la sélection de poste (profil + offre). Pré-requis des filtres côté UI.
2. **#child-2 — Frontend : exposer les nouveaux critères dans les filtres de recherche + test E2E de pertinence** (M)
Câblage des nouvelles entrées dans les filtres profils/offres, non-régression des filtres existants, validation E2E (recherche « Coach Agile » / « RTE » / « Miro » renvoie les bons résultats). Dépend de #child-1 et #child-3.
3. **#child-3 — Backend / taxonomie : normalisation des nouveaux rôles & compétences (role-normalization.md + MatchingAgent)** (M)
Distinguer Coach Agile / Scrum Master SAFe / RTE du Scrum Master générique, mapper les nouvelles compétences/outils, mettre à jour role-normalization.md. Condition de la pertinence des filtres.

Dépendances : #child-1 → #child-2 ; #child-3 → #child-2.

RA Updated by Redmine Admin about 2 months ago Actions #3

  • spec_ref updated (diff)

RA Updated by Redmine Admin about 2 months ago Actions #4

  • Subtask #57 added

RA Updated by Redmine Admin about 2 months ago Actions #5

  • Subtask #60 added

RA Updated by Redmine Admin about 2 months ago Actions #6

  • Subtask #65 added

RA Updated by Redmine Admin about 2 months ago Actions #7

## Design brief — #29 « Ajouter les rôles et compétences Agile manquants » (sign-off UI)

**Verdict : aucun nouveau pattern, composant ni couleur.** C'est un enrichissement *additif* de listes/filtres déjà en place. Le travail design se limite à valider les placements et à confirmer la réutilisation des patterns existants. Section de cadrage ajoutée au design system (`DESIGN_SYSTEM.md`, section « SC — Sélecteurs rôles / compétences / outils »).

### Atomic Design — composants réutilisés (rien de neuf)
- **Sélecteur de rôle** (profil + offre) : `molecules/InlineRoleSelector.tsx`, piloté par `lib/role-picker-taxonomy.ts` — grille de cartes-boutons groupées par catégorie.
- **Filtre rôle** (recherche) : `molecules/RoleFilterPicker.tsx` câblé dans `organisms/TopFilterBar.tsx` + `organisms/MobileFilterModal.tsx` — même grille + compteurs.
- **Compétences / outils** (sélection et filtre) : `molecules/InlineSkillSelector.tsx` / `InlineSecondarySkillSelector.tsx` + dropdown technologies du `TopFilterBar` — recherche autocomplete → chips `rounded-full` dans un conteneur `flex flex-wrap gap-2`.

### Placements
- **Rôles** → catégorie **existante** « Leadership & Architecture » de la taxonomie : **Coach Agile** (distinct de Scrum Master qui reste dans « Autres »), **Scrum Master SAFe**, **Release Train Engineer (RTE)**.
- **Compétences** → liste existante (pas de nouvelle catégorie) : **Agilité à l'échelle (SAFe/LeSS)**, **Coaching Agile**, **Amélioration continue (Kaizen/Lean)**.
- **Outils** → liste existante : **Confluence**, **Miro**. ⚠️ Vérif : **Jira est actuellement ABSENT** du `TechnologyStackDatabase` — à ajouter aussi le cas échéant (Confluence/Miro/Jira ne sont pas dans la base techno aujourd'hui).

### Note d'implémentation (pour le dev, hors périmètre design)
Les rôles sont portés par l'**enum Prisma `RoleType`** + le normaliseur (`role-normalization.md`). Les 3 nouveaux rôles **ne sont pas un simple ajout de label** : ils exigent de nouvelles valeurs d'enum + règles de normalisation (sous-tâches #57 frontend / #60 backend-taxonomie). Les compétences/outils, eux, sont des chaînes libres recherchées — ajout simple dans la base techno.

### États (réutilisés, inchangés)
Vide (technos populaires), chargement (recherche debouncée 200 ms), erreur (`logError` + liste vide), renseigné (chips / cartes en bordure verte primaire).

### Overflow / wrapping du panneau de filtres — VÉRIFIÉ, scale OK
- Filtres compétences/outils : champ de saisie + dropdown de suggestions déjà borné (`max-h-80 overflow-hidden`, liste `max-h-60 overflow-y-auto`) → +Confluence/Miro/3 compétences ne change pas la hauteur visible.
- Filtre rôle : grille qui wrappe ; +3 rôles = au plus 1 ligne de grille en plus dans « Leadership & Architecture » (5 → 8 entrées), absorbée par le scroll du panneau (`MobileFilterModal` est un modal scrollable). **Aucune** modif de hauteur fixe / z-index / breakpoint requise.

### Tokens / couleurs / i18n
- Aucun nouveau token : bordure de sélection rôle = `primary` (Willow Green), chips = palette existante. Conforme v1.0 baseline.
- i18n : libellés rôles dans `role-picker-taxonomy.ts` ; toute clé UI nouvelle irait dans `en.ts` seul (`fr.ts` réexporte). Les nouveaux termes sont métier et identiques FR/EN — pas de nouvelle clé d'affichage strictement nécessaire.

### Mockup
Pas de mockup visuel produit : la surface visuelle est nulle (aucun nouveau composant). Le brief textuel ci-dessus + la section `DESIGN_SYSTEM.md` font office de référence design.

→ Statut transitionné **Spec → Design**.

RA Updated by Redmine Admin about 2 months ago Actions #8

  • Status changed from Spec to Design

RA Updated by Redmine Admin about 2 months ago Actions #9

  • Status changed from Design to In development

Démarrage du développement (portée GetYourJob / Next.js) sur la branche `feat/redmine-29-agile-roles`. TDD test-first pour la taxonomie, la normalisation et le comportement des filtres.

RA Updated by Redmine Admin about 2 months ago Actions #10

  • Status changed from In development to QA
  • branch set to feat/redmine-29-agile-roles
  • pr_url set to https://github.com/omdev-tech/GetYourJob/pull/232

## Portée GetYourJob (Next.js) implémentée — PR ouverte vers `dev`

**PR :** https://github.com/omdev-tech/GetYourJob/pull/232
**Branche :** `feat/redmine-29-agile-roles` (basée sur `origin/master` frais)

Couvre #57 (listes), la portée GYJ de #60 (taxonomie/normalisation) et #65 (filtres + test de pertinence).

### Rôles — 3 valeurs `RoleType` distinctes (plus de fusion sur le Scrum Master générique)
- `AGILE_COACH` (Coach Agile / Agile Coach)
- `SCRUM_MASTER_SAFE` (Scrum Master SAFe / SAFe Coach)
- `RELEASE_TRAIN_ENGINEER` (RTE)

Ajout à l'enum Prisma + migration `20260611190000_add_agile_scale_role_types`, au miroir `DeveloperProfile`, à la catégorie **« Leadership & Architecture »** (`role-picker-taxonomy.ts`). Règles de normalisation prioritaires (`release-train-engineer`, `scrum-master-safe`, `agile-coach`) évaluées **avant** le Scrum Master générique, qui reste inchangé (catégorie « Autres ») — conforme à role-normalization.md.

### Compétences & outils (base techno + alias)
- Compétences : Agilité à l'échelle (SAFe/LeSS), Coaching Agile, Amélioration continue (Kaizen/Lean)
- Outils : Jira, Confluence, Miro — **les trois étaient absents**, désormais présents.

Le filtre rôle (TopFilterBar + MobileFilterModal) et l'autocomplétion compétences/outils étant pilotés par la taxonomie / la base techno, les ajouts apparaissent automatiquement en **sélection** (profil + offre) ET en **filtres de recherche**.

### Tests (TDD)
- `RoleNormalizationService.test.ts` : 223/223 (distinctions Agile + non-régression Scrum Master).
- `AgileRolesAndSkills.integration.test.ts` (nouveau, pertinence E2E data-layer) : 13/13 — « Coach Agile »/« RTE »/« Miro » résolus correctement, recherche par alias (SAFe, Kaizen…), placements, non-régression.
- `tsc` : zéro nouvelle erreur source. `npm run build` : vert (235 pages, exit 0).

### Suivi MatchingAgent (repo séparé, NON traité ici)
Le scorer Python (`MatchingAgent/`) doit aligner sa taxonomie role-alignment / matching 6-couches sur ces 3 nouveaux rôles + alias de compétences. À dispatcher en passe backend distincte (noté dans role-normalization.md).

Statut : In development → QA.

RA Updated by Redmine Admin about 2 months ago Actions #13

h2. QA — Smoke test : *PASS* ✅ (reste en QA)

PR #232 (base @dev@) · branche @feat/redmine-29-agile-roles@ · worktree @.worktrees/redmine-29-agile-roles@ · 2026-06-11

*Méthode.* Un smoke UI complet (dev server + DB live + auth prod) n'étant pas praticable ici, la preuve de smoke s'appuie — comme prévu par le ticket — sur les suites vitest ajoutées (@RoleNormalizationService@ + @AgileRolesAndSkills.integration@), complétées par l'inspection des fichiers source modifiés. Ces suites 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), @searchTechnologies@ (autocomplete compétences/outils), @RoleNormalizationService.normalizeRole@ (libellé brut → enum envoyé par le filtre = pertinence du filtre).

*Résultats.*
* @npx vitest run AgileRolesAndSkills.integration + RoleNormalizationService@ → *236 / 236 passés* (dont 13 nouveaux tests d'intégration).
* @npx prisma generate@ → OK (Prisma 6.12.0).
* @npx tsc --noEmit@ → erreurs présentes mais *uniquement dans des fichiers non touchés par #29* (pré-existantes, repo-wide ; tsc/lint standalone cassé sur Next 16, build via @ignoreBuildErrors@). Aucun fichier non-test modifié par #29 n'a d'erreur tsc → *pas de régression imputable à #29*.

h3. Acceptance criteria → résultat

| AC | Critère | Résultat |
| 1 | Coach Agile, Scrum Master SAFe, RTE dans « Leadership & Architecture » (sélecteur profil/offre) | *OK* |
| 2 | Compétences Agilité à l'échelle, Coaching Agile, Amélioration continue disponibles | *OK* |
| 3 | Outils Confluence + Miro disponibles ; Jira présent | *OK* |
| 4 | Nouveaux rôles/compétences/outils présents dans les filtres de recherche (@ALL_ROLE_TYPES@ + autocomplete) | *OK* |
| 5 | Filtre pertinent : « Coach Agile » → @AGILE_COACH@, « RTE » → @RELEASE_TRAIN_ENGINEER@ (libellé brut normalise vers l'enum du filtre) | *OK* |
| 6 | Priorités role-normalization.md : « Scrum Master SAFe » distinct de « Scrum Master » (@SCRUM_MASTER_SAFE@, jamais le bucket générique) | *OK* |
| 7 | Aucune régression : « Scrum Master » → @SCRUM_MASTER@, React résout toujours, tous les rôles existants présents | *OK* |

*Preuves jointes* (sans secret) : @qa_29_visual_proof.png@ (sortie verbose des 13 tests verts) + @qa_29_technical_proof.txt@ (commandes, gates, mapping AC, inspection source).

*Verdict : PASS — le ticket reste en QA* (la promotion preprod est hors périmètre QA).

RA Updated by Redmine Admin about 2 months ago Actions #14

  • Status changed from QA to In development

CI rouge sur PR #232 (`continuous-integration/jenkins/pr-head` = ERROR). Reprise en développement pour diagnostiquer et corriger la cause racine. Transition QA → In development.

RA Updated by Redmine Admin about 2 months ago Actions #15

  • Status changed from In development to QA

CI corrigée. La cause racine : la PR ajoutait trois valeurs `RoleType` à la taxonomie du sélecteur (`AGILE_COACH`, `SCRUM_MASTER_SAFE`, `RELEASE_TRAIN_ENGINEER`) mais le registre des pages /professions (`src/app/professions/professions-data.ts`) n'avait pas d'entrée correspondante. Le test d'intégrité `professions-data.test.ts` exige exactement une entrée `PROFESSIONS` par rôle de `ALL_ROLE_TYPES` — d'où l'échec du lane vitest `test:ci` sur le build pr-head (fusion avec `dev`), avec `expected 21 to deeply equal 17`.

Le build `branch` seul passait car le test/registre arrivait du côté `dev` ; la fusion exposait l'incohérence.

Correctif (commit 75a6bfc) : ajout de trois entrées de profession FR curées pour les rôles Agile à l'échelle dans la catégorie « Leadership & Architecture », alignées sur les libellés/catégories de la taxonomie.

Vérification : lane `ci` complet vert localement (2548 tests passés, 0 échec) ; `gh pr checks 232` → `continuous-integration/jenkins/pr-head` = **pass** (build App PR-232 #2) et `branch` = pass.

PR : https://github.com/omdev-tech/GetYourJob/pull/232 — repasse en QA.

RA Updated by Redmine Admin about 2 months ago Actions #16

  • Status changed from QA to Preprod
  • preprod_url set to https://github.com/omdev-tech/GetYourJob/pull/234

QA PASS → promu vers preprod.\n- CI verte (branch + pr-head) après correctif du registre /professions (commit 75a6bfc).\n- Mergé sur `dev` : PR #232.\n- PR preprod : #234 (feat/redmine-29-agile-roles → preprod), Jenkins build/deploy en cours.\nSuivi MatchingAgent (scorer Python) suivi dans une sous-tâche dédiée. Promotion preprod→master = porte humaine.

RA Updated by Redmine Admin about 2 months ago Actions #17

  • Subtask #68 added

RA Updated by Redmine Admin about 2 months ago Actions #18

  • preprod_url changed from https://github.com/omdev-tech/GetYourJob/pull/234 to https://github.com/omdev-tech/GetYourJob/pull/240

PR preprod par-feature #234 fermée et remplacée par la PR consolidée #240 (dev→preprod). Statut Preprod inchangé.

RA Updated by Redmine Admin about 2 months ago Actions #19

preprod→master mergé → livré en production. Preprod → Shipped. (Suivi MatchingAgent #68 non livré — voir ci-dessous.)

RA Updated by Redmine Admin about 2 months ago Actions #20

preprod→master mergé → livré en production. Preprod → Shipped. (Portion MatchingAgent #68 NON livrée — voir le ticket.)

RA Updated by Redmine Admin about 1 month ago Actions #21

  • Status changed from Preprod to Shipped

Code déjà en production : feat/redmine-29-agile-roles (PR #232) mergé jusqu'à master (vérifié par ancestry git, master afa87ad). Le volet MatchingAgent (#68) est également shippé. Passage Preprod → Shipped, done_ratio 75 → 100.

Actions

Also available in: PDF Atom