Feature #68
closedFeature #29: Ajouter les rôles et compétences Agile manquants dans les listes et filtres
[MatchingAgent] Aligner le scorer Python sur les nouveaux rôles & compétences Agile (suite de #60)
0%
Spec dans la description du ticket : aligner la taxonomie du scorer MatchingAgent (role-alignment + matching tech) sur les 3 nouveaux rôles Agile (Coach Agile, Scrum Master SAFe, RTE) + alias compétences/outils (Agilité à l'échelle, Coaching Agile, Amélioration continue, Confluence, Miro, Jira), distincts du Scrum Master générique. Repo MatchingAgent/ (Python). Pas de split. Réf taxonomie GYJ : docs/superpowers/plans/2026-04-20-role-normalization.md.
Description
## Contexte
La portion GetYourJob de #60 (normalisation des rôles/compétences Agile + role-normalization.md) a été livrée et promue vers preprod dans l'épopée #29 (PR #232 / preprod #234). La portion **MatchingAgent (Python, repo séparé `MatchingAgent/`)** reste à faire et est isolée ici pour ne rien perdre.
## Périmètre
Aligner la taxonomie du scorer MatchingAgent sur les 3 nouveaux rôles et les alias de compétences/outils Agile afin que la couche d'analyse profonde (matching tech 6 couches + role-alignment) les pondère correctement :
- Rôles : Coach Agile, Scrum Master SAFe, Release Train Engineer (RTE) — distincts du « Scrum Master » générique.
- Compétences/outils : Agilité à l'échelle (SAFe/LeSS), Coaching Agile, Amélioration continue (Kaizen/Lean), Confluence, Miro, Jira (alias).
## Notes
- Repo `MatchingAgent/` (FastAPI / Python). Pré-requis d'une passe `backend-dev` distincte (TDD, PR vers dev côté MatchingAgent).
- Référence taxonomie : `docs/superpowers/plans/2026-04-20-role-normalization.md` (déjà mis à jour côté GYJ).
## Acceptance criteria
- Le scorer MatchingAgent reconnaît et distingue les 3 nouveaux rôles (pas de repli sur SCRUM_MASTER générique).
- Les compétences/outils Agile ajoutés sont pris en compte dans le matching (alias couverts).
- Tests scorer : non-régression sur les rôles/skills existants.
Files
RA Updated by Redmine Admin about 2 months ago
- Status changed from Submitted to Spec
- spec_ref updated (diff)
Specced (pas de split — tâche backend ciblée, repo MatchingAgent). spec_ref renseigné, prêt pour le dev backend.
RA Updated by Redmine Admin about 2 months ago
- Status changed from Spec to In development
RA Updated by Redmine Admin about 2 months ago
- branch set to feat/redmine-68-scorer-agile
- pr_url set to https://github.com/omdev-tech/MatchingAgent/pull/20
🏁 done dev — ready for QA
Taxonomie du scorer MatchingAgent alignée sur la role-normalization GetYourJob (épopée #29). Les 3 nouveaux rôles Agile sont désormais **distincts** du Scrum Master générique (pas de repli) :
| Titre | hint `_extract_role_hint` | catégorie RoleAlignment |
|---|---|---|
| Coach Agile / Agile Coach | `coach agile` | `coach_agile` |
| Scrum Master SAFe | `scrum master safe` | `scrum_master_safe` |
| Release Train Engineer / RTE | `release train engineer` | `rte` |
Chacun a son propre écosystème tech + une ligne de compatibilité dédiée (adjacent mais < 1.0 vs Scrum Master générique et entre eux ; faible vs rôles d'ingénierie). Le « longest-match-wins » garde un « Scrum Master » nu en générique (non-régression vérifiée).
Compétences/outils ajoutés (alias insensibles à la casse, `technology_database`) : **Scaled Agile** (SAFe, Large Scale Scrum, Agilité à l'échelle), **Agile Coaching** (Coaching Agile), **Continuous Improvement** (Amélioration continue, Kaizen, Lean), **Miro**. Jira & Confluence déjà présents (couverts par tests de non-régression). NB : le token nu « less » n'est volontairement pas aliasé (collision avec le préprocesseur CSS Less) — LeSS reconnu via « large scale scrum ».
Gotcha mémoire traité : les nouvelles clés de rôle passent par le même chemin `_extract_role_hint` insensible à la casse que les rôles existants — vérifié bout-en-bout qu'elles résolvent dans le scorer (pas de défaut vers Scrum Master générique).
**TDD** : nouveaux tests sur les 3 rôles distincts + alias reconnus + non-régression. 217 tests verts (test_role_scorer, test_agents, test_technology_matching). `ruff`/`mypy` : aucune erreur nouvelle sur les fichiers modifiés (baseline repo pré-existante importante).
- Branche : `feat/redmine-68-scorer-agile`
- PR (→ `dev`) : https://github.com/omdev-tech/MatchingAgent/pull/20
- CI Jenkins : pr-head ✅ pass, branch ✅ pass
Ticket laissé en **In development** (prêt pour QA).
RA Updated by Redmine Admin about 2 months ago
- Status changed from In development to QA
🔎 Démarrage QA — passage In development → QA pour smoke test (suites unitaires scorer + vérifs de résolution des rôles/compétences Agile).
RA Updated by Redmine Admin about 2 months ago
- File qa-68-pytest-pass.png qa-68-pytest-pass.png added
RA Updated by Redmine Admin about 2 months ago
RA Updated by Redmine Admin about 2 months ago
RA Updated by Redmine Admin about 2 months ago
🏁 done QA — PASS
Smoke test du scorer MatchingAgent (taxonomie Agile) sur le worktree feat/redmine-68-scorer-agile (HEAD 03ccec9, PR MatchingAgent #20 base dev). Vérification par suites unitaires + checks de résolution indépendants (pas d'UI).
## Critères d'acceptation
- **AC1 — Reconnaître/distinguer les 3 nouveaux rôles (pas de repli sur SCRUM_MASTER générique) : OK**
- Coach Agile / Agile Coach → `coach agile`
- Scrum Master SAFe → `scrum master safe`
- Release Train Engineer / RTE → `release train engineer`
- Non-régression : « Scrum Master » nu → `scrum master` (générique). Résolution longest-match-wins vérifiée directement via `_extract_role_hint`. Côté role-alignment, les spécialisations sont *adjacentes* au Scrum Master générique (neutre, ni pénalité ×0.5 ni bonus exact).
- **AC2 — Skills/outils Agile pris en compte par le matching tech (alias couverts) : OK**
- Agilité à l'échelle / SAFe / large scale scrum → `Scaled Agile`
- Coaching Agile → `Agile Coaching`
- Amélioration continue / Kaizen / Lean → `Continuous Improvement`
- Confluence → `Confluence`, Miro → `Miro`, Jira → `Jira`
- Note : « LeSS » nu n'est volontairement pas aliasé (collision avec le préprocesseur CSS « Less »), documenté dans le code ; couvert sémantiquement par « large scale scrum ».
- **AC3 — Non-régression rôles/skills existants : OK**
## Tests
- Suites touchées (`pytest -v` sur test_role_scorer.py + test_agents.py + test_technology_matching.py) : **217 passed**, 0 fail.
- Lane élargie (`make test-unit`) : **867 passed, 1 failed**. L'unique échec — `tests/unit/api/test_eval_endpoint.py::TestCalibrationEndpoint::test_histogram_query_returns_distribution` — est **hors périmètre #68** : fichier non touché par la PR et **pré-existant sur origin/dev** (échoue à l'identique sur la base). Ce n'est PAS une régression introduite par cette PR.
- `ruff check` sur les fichiers modifiés : **364 findings vs 366 sur origin/dev (mêmes fichiers) → aucune nouvelle erreur** (la PR en retire même 2). Les findings restants (W291/W293/I001/F601/N802/F401) sont une dette de style repo-wide pré-existante.
## Preuves jointes
- `qa-68-pytest-pass.png` — sortie pytest passante (visuel)
- `qa-68-rapport-technique.txt` — commandes, résultats, checks de résolution, ruff (secrets filtrés)
- `qa-68-checks-resolution-roles-skills.txt` — détail des vérifications de résolution rôles/skills
Aucun secret/token/clé/URL DB dans les preuves (suites unitaires pures, aucune connexion réseau/DB).
**Verdict : PASS** — le ticket reste en QA (promotion preprod = autre agent).
RA Updated by Redmine Admin about 2 months ago
- Status changed from QA to Preprod
- preprod_url set to https://github.com/omdev-tech/MatchingAgent/pull/21
QA PASS → promu vers preprod (MatchingAgent). Mergé sur MA `dev` : PR #20 (CI verte). PR preprod MA : #21 (dev→preprod). Le scorer distingue désormais Coach Agile / Scrum Master SAFe / RTE (pas de repli sur Scrum Master générique) + alias compétences/outils Agile. Complète la portion MA de #60/#29. Promotion preprod→master = porte humaine.
RA Updated by Redmine Admin about 2 months ago
État réel mis à jour (promotion prod **mise en attente** sur décision utilisateur 2026-06-15) :
- PR #20 (feat→dev) : **mergée**.
- PR #21 (dev→preprod) : **mergée ce jour** → déployée sur **preprod** (build Jenkins `MatchingAgent/preprod #6` = vert). Le ticket était passé en statut *Preprod* à l'ouverture de #21 ; il l'est désormais **réellement** (mergé + déployé).
- PR #22 (preprod→master) : **OUVERTE**, CI verte (branch + pr-head), mergeStateStatus CLEAN. **Volontairement NON mergée** — la promotion preprod→master (déploiement production du scorer) est en attente de la porte humaine Jenkins (`/input/`).
Reste à faire pour clôturer #68 (et amener l'épopée #29 à 100 %) : merger PR #22 → approuver le déploiement prod au gate admin Jenkins → passer #68 et #29 en *Shipped*. Aucune autre tâche de dev en suspens (code complet, QA PASS, 217 tests verts).
RA Updated by Redmine Admin about 2 months ago
## Smoke test PREPROD — PASS ✅ (live sur `preprod-match`, 2026-06-15)
Déploiement preprod vérifié en direct sur le serveur (conteneur `preprod-match`, image `registry.getyourjob.pro/match:preprod`, **Up healthy**, fraîchement redéployé après merge PR #21).
**1. Santé du service** — `GET http://127.0.0.1:8050/v1/health` :
`{"status":"healthy","version":"mvp-1.0.0","components":{"api":"ok","llm":"ok"}}`
**2. AC1 — Rôles Agile distincts (résolution live via `_extract_role_hint` dans l'image déployée)** :
| Titre | hint résolu |
|---|---|
| Coach Agile / Agile Coach | `coach agile` |
| Scrum Master SAFe | `scrum master safe` |
| Release Train Engineer (RTE) / RTE | `release train engineer` |
| Scrum Master (nu) | `scrum master` *(générique préservé — non-régression)* |
| Développeur Backend | `backend developer` *(rôle existant inchangé)* |
→ Aucun repli des 3 nouveaux rôles sur le Scrum Master générique. ✅
**3. AC2 — Alias compétences/outils présents dans l'image déployée** : `scaled agile` / `large scale scrum` / `agilité à l'échelle` / `continuous improvement` trouvés dans `technology_database.py` (6), `role_scorer.py` (7), `role_alignment_agent.py` (4) ; catégories RoleAlignment `coach_agile` / `scrum_master_safe` / `rte` présentes ; garde anti-collision « LeSS vs préprocesseur CSS Less » présente (preuve que le code exact #68 tourne bien). ✅
**Provenance** : l'image en cours d'exécution contient bien le commit #68 (`03ccec9`), confirmé par les marqueurs de code ci-dessus.
**Statut inchangé (Preprod)** : promotion preprod→master **VOLONTAIREMENT en attente** (décision utilisateur) — PR #22 ouverte, CI verte, prête à merger quand l'utilisateur validera et approuvera le déploiement prod au gate Jenkins.
RA Updated by Redmine Admin about 1 month ago
- Status changed from Preprod to Shipped
Code déjà en production : feat/redmine-68-scorer-agile (PR #20) est mergé jusqu'à master côté MatchingAgent (vérifié par ancestry git, master 75f50c8). Passage Preprod → Shipped.