=== AC1: 3 nouveaux rôles -> catégories DISTINCTES (pas Scrum Master générique) === [OK] 'Coach Agile' -> 'coach agile' (attendu 'coach agile') [OK] 'Agile Coach' -> 'coach agile' (attendu 'coach agile') [OK] 'Scrum Master SAFe' -> 'scrum master safe' (attendu 'scrum master safe') [OK] 'Release Train Engineer' -> 'release train engineer' (attendu 'release train engineer') [OK] 'RTE' -> 'release train engineer' (attendu 'release train engineer') [OK] 'Scrum Master' -> 'scrum master' (attendu 'scrum master') === AC2: skills/outils Agile reconnus par la couche tech-matching === Traceback (most recent call last): File "", line 30, in AttributeError: 'tuple' object has no attribute 'strip' === AC2: skills/outils Agile reconnus par la couche tech-matching (normalize -> (canonical, confidence)) === [OK] "Agilité à l'échelle" -> ('Scaled Agile',0.95) get_technology='Scaled Agile' (attendu 'Scaled Agile') [OK] 'SAFe' -> ('Scaled Agile',0.95) get_technology='Scaled Agile' (attendu 'Scaled Agile') [OK(skip)] 'LeSS' -> normalize=('Less',1.0) get_technology='Less' # intentionnellement non aliasé (collision CSS Less) -> tech-only, normal [OK] 'large scale scrum' -> ('Scaled Agile',0.95) get_technology='Scaled Agile' (attendu 'Scaled Agile') [OK] 'Coaching Agile' -> ('Agile Coaching',0.95) get_technology='Agile Coaching' (attendu 'Agile Coaching') [OK] 'Amélioration continue' -> ('Continuous Improvement',0.95) get_technology='Continuous Improvement' (attendu 'Continuous Improvement') [OK] 'Kaizen' -> ('Continuous Improvement',0.95) get_technology='Continuous Improvement' (attendu 'Continuous Improvement') [OK] 'Lean' -> ('Continuous Improvement',0.95) get_technology='Continuous Improvement' (attendu 'Continuous Improvement') [OK] 'Confluence' -> ('Confluence',1.0) get_technology='Confluence' (attendu 'Confluence') [OK] 'Miro' -> ('Miro',1.0) get_technology='Miro' (attendu 'Miro') [OK] 'Jira' -> ('Jira',1.0) get_technology='Jira' (attendu 'Jira') RESULT_AC2_SKILLS: PASS