Skip to content

Commit bf52ea4

Browse files
committed
Integrer les trois premiers cours de fatigue
1 parent a8c78bd commit bf52ea4

9 files changed

Lines changed: 5135 additions & 8 deletions

‎Cours/Fatigue/Fatigue, cours 1 _ le cycle, parler la langue de la fatigue.html‎

Lines changed: 1910 additions & 0 deletions
Large diffs are not rendered by default.

‎Cours/Fatigue/Fatigue, cours 2 _ la courbe de Wöhler.html‎

Lines changed: 1569 additions & 0 deletions
Large diffs are not rendered by default.

‎Cours/Fatigue/Fatigue, cours 3 _ l'amorçage.html‎

Lines changed: 1453 additions & 0 deletions
Large diffs are not rendered by default.

‎README.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Dépôt : [Pemcode/PolyWE](https://github.com/Pemcode/PolyWE).
66

77
Site statique destiné à GitHub Pages. Les cours interactifs restent des fichiers HTML éditables. Un catalogue JSON organise les matières, les cours et les parcours ; un générateur Python construit les pages et leur navigation.
88

9+
La matière [Fatigue des métaux](https://pemcode.github.io/PolyWE/matieres/fatigue.html) réunit les trois premiers cours : cycles de chargement, courbe de Wöhler et amorçage des fissures. Ils sont aussi accessibles depuis le sujet « Fatigue » de la frise.
10+
911
## Routine quotidienne
1012

1113
**Double-cliquer sur `Mettre-a-jour.cmd`** pour ouvrir le menu.
@@ -60,7 +62,7 @@ Exemple d'entrée, à adapter avec un fichier réellement présent :
6062
- `fichier` désigne le fichier source local, désormais rangé dans `Cours/<matière>/`. Il peut changer lors d’un remplacement ; les URL publiées des cours existants restent inchangées.
6163
- `url` est le chemin publié : le conserver après partage. Il utilise un sous-dossier et l'extension `.html`.
6264
- `disponible` publie le cours ; `a_venir` affiche une carte sans lien ; `brouillon` exclut complètement le cours du site et de la recherche. Les deux derniers états n'exigent aucun fichier.
63-
- Les cours RDM 01 à 07 sont disponibles, de Hooke aux diagrammes de sollicitations. Lorsqu’un prochain cours possède déjà une entrée `a_venir`, compléter cette entrée plutôt qu’en créer un doublon.
65+
- Les cours RDM 01 à 08 sont disponibles, de Hooke aux caractéristiques des sections. Lorsqu’un prochain cours possède déjà une entrée `a_venir`, compléter cette entrée plutôt qu’en créer un doublon.
6466
- Les sections sont extraites du HTML à chaque build : première rubrique h2/h3 de chaque section avec `id`, ou titre h2/h3 portant son propre `id`. Conserver les ancres déjà partagées.
6567
- Si un cours utilise des fichiers locaux externes, les déclarer individuellement dans `fichiers_associes`, avec leur chemin depuis la racine du projet. Les conserver dans le dossier du cours et vérifier leurs liens relatifs à son `url`. Les dépendances distantes, comme Google Fonts, restent distantes.
6668

‎catalogue-cours.json‎

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,122 @@
419419
"fichier": "Cours/RDM/RDM, cours 8 _ les caractéristiques des sections.html",
420420
"url": "RDM/08-caracteristiques-sections.html",
421421
"statut": "disponible"
422+
},
423+
{
424+
"id": "fatigue-01",
425+
"titre": "Cycles de chargement et vocabulaire de la fatigue",
426+
"matiere": "fatigue",
427+
"ordre": 1,
428+
"repere": "Cours 01",
429+
"prerequis_conseilles": [
430+
"rdm-01",
431+
"rdm-08"
432+
],
433+
"mots_cles": [
434+
"cycle",
435+
"chargement cyclique",
436+
"amplitude",
437+
"étendue de contrainte",
438+
"contrainte moyenne",
439+
"rapport de charge",
440+
"rainflow",
441+
"flexion rotative",
442+
"concentration de contrainte",
443+
"amorçage",
444+
"propagation"
445+
],
446+
"ressources": [
447+
"cours",
448+
"simulations",
449+
"exercices corrigés",
450+
"fiche de révision",
451+
"quiz",
452+
"glossaire",
453+
"auto-évaluation"
454+
],
455+
"fichiers_associes": [],
456+
"fichier": "Cours/Fatigue/Fatigue, cours 1 _ le cycle, parler la langue de la fatigue.html",
457+
"url": "Fatigue/01-cycles-chargement.html",
458+
"statut": "disponible"
459+
},
460+
{
461+
"id": "fatigue-02",
462+
"titre": "Courbe de Wöhler et durée de vie",
463+
"matiere": "fatigue",
464+
"ordre": 2,
465+
"repere": "Cours 02",
466+
"prerequis_conseilles": [
467+
"fatigue-01"
468+
],
469+
"mots_cles": [
470+
"Wöhler",
471+
"Wohler",
472+
"courbe S-N",
473+
"endurance",
474+
"limite d’endurance",
475+
"Basquin",
476+
"fatigue oligocyclique",
477+
"échelle logarithmique",
478+
"dispersion",
479+
"courbes FAT",
480+
"classes FAT",
481+
"soudures",
482+
"durée de vie"
483+
],
484+
"ressources": [
485+
"cours",
486+
"simulations",
487+
"exercices corrigés",
488+
"fiche de révision",
489+
"quiz",
490+
"glossaire",
491+
"auto-évaluation"
492+
],
493+
"fichiers_associes": [],
494+
"fichier": "Cours/Fatigue/Fatigue, cours 2 _ la courbe de Wöhler.html",
495+
"url": "Fatigue/02-courbe-wohler.html",
496+
"statut": "disponible"
497+
},
498+
{
499+
"id": "fatigue-03",
500+
"titre": "Amorçage des fissures de fatigue",
501+
"matiere": "fatigue",
502+
"ordre": 3,
503+
"repere": "Cours 03",
504+
"prerequis_conseilles": [
505+
"fatigue-01",
506+
"fatigue-02",
507+
"rdm-04",
508+
"rdm-05"
509+
],
510+
"mots_cles": [
511+
"amorçage",
512+
"microglissements",
513+
"Schmid",
514+
"intrusions",
515+
"extrusions",
516+
"bandes de glissement",
517+
"fissures dormantes",
518+
"Kitagawa",
519+
"seuil de propagation",
520+
"Crossland",
521+
"Dang Van",
522+
"Tresca",
523+
"von Mises"
524+
],
525+
"ressources": [
526+
"cours",
527+
"simulations",
528+
"exercices corrigés",
529+
"fiche de révision",
530+
"quiz",
531+
"glossaire",
532+
"auto-évaluation"
533+
],
534+
"fichiers_associes": [],
535+
"fichier": "Cours/Fatigue/Fatigue, cours 3 _ l'amorçage.html",
536+
"url": "Fatigue/03-amorcage-fissures.html",
537+
"statut": "disponible"
422538
}
423539
],
424540
"matieres": [
@@ -431,6 +547,11 @@
431547
"id": "rdm",
432548
"titre": "Résistance des matériaux",
433549
"description": "Comprendre les contraintes, les déformations et le calcul des assemblages."
550+
},
551+
{
552+
"id": "fatigue",
553+
"titre": "Fatigue des métaux",
554+
"description": "Décrire les cycles de chargement, lire les courbes de Wöhler et comprendre l’amorçage des fissures."
434555
}
435556
],
436557
"parcours": [

‎docs/PLANNING.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ Les codes ci-dessous viennent du planning ; les liens avec les fiches du wiki so
2727
| 3.2 | Notions fondamentales de RDM | Série `rdm-01` à `rdm-07`, disponible |
2828
| 2.14 | Introduction à la corrosion | Pas de support associé pour le moment |
2929
| 1.1 | Introduction à la technologie du soudage | Pas de support associé pour le moment |
30-
| 2.7 | Ruptures et différents types de rupture | Pas de support associé pour le moment |
31-
| 3.11 | Introduction à la mécanique de la rupture | Pas de support associé pour le moment |
30+
| 2.7 | Ruptures et différents types de rupture | Complément : le film d’une rupture par fatigue (`fatigue-01#c6`) |
31+
| 3.11 | Introduction à la mécanique de la rupture | Complément : fissures dormantes et seuil de propagation (`fatigue-03#c5`) |
3232
| 2.4 | Élaboration des aciers | Pas de support associé pour le moment |
3333
| 2.23 | Essais des matériaux | Pas de support associé pour le moment |
3434

@@ -38,7 +38,7 @@ Le lundi 28 septembre : RDM de 8 h à 11 h 25, puis corrosion de 11 h 30 à 12 h
3838

3939
Quatre familles organisent les enseignements : procédés (1.x), métallurgie et matériaux (2.x), RDM et conception (3.x), fabrication/contrôle/qualité (4.x). Les examens et périodes pratiques ont leurs propres filtres.
4040

41-
Les liens complémentaires déjà possibles sont ciblés : structure du joint → `met-03#s4`, fissuration → `met-03#s6`, conception des joints → `rdm-02#c6`, contraintes/déformations → `rdm-03#c5` et `met-03#s4`. Le sujet annuel « Fatigue » (3.8) mène désormais à l’introduction de `rdm-05#c6` : ce complément ne remplace pas le cours spécialisé à venir. Un même code du PDF peut recouvrir plusieurs libellés ; les sujets ont donc des identifiants propres, plutôt qu'une correspondance automatique par numéro seul.
41+
Les liens complémentaires déjà possibles sont ciblés : structure du joint → `met-03#s4`, fissuration → `met-03#s6`, conception des joints → `rdm-02#c6`, contraintes/déformations → `rdm-03#c5` et `met-03#s4`. Le sujet annuel « Fatigue » (3.8) propose les trois premiers cours de la matière « Fatigue des métaux » : cycles de chargement (`fatigue-01`), courbe de Wöhler (`fatigue-02`) et amorçage (`fatigue-03`). L’introduction de `rdm-05#c6` reste proposée en complément. Cette série disponible ne prétend pas couvrir tout le module. La matière du wiki se retrouve dans la famille « RDM et conception » du planning, sans modifier le calendrier. Un même code du PDF peut recouvrir plusieurs libellés ; les sujets ont donc des identifiants propres, plutôt qu'une correspondance automatique par numéro seul.
4242

4343
| Examen indiqué | Date | Horaire |
4444
| --- | --- | --- |

‎docs/STORIES.md‎

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Petites tranches livrables. Une story est terminée après ses critères d'accep
1818
| S12 | Intégrer le jeu Mohr Forge sans le mettre au centre | Livré — site public vérifié |
1919
| S13 | Intégrer le cours RDM 08 sur les caractéristiques des sections | Livré — site public vérifié |
2020
| S14 | Regrouper les sources dans Cours sans casser les liens publiés | Intégré et vérifié |
21+
| S15 | Intégrer les trois premiers cours de fatigue | Intégré et vérifié |
2122

2223
## S01 — Catalogue extensible
2324

@@ -189,4 +190,18 @@ Preuve TDD du 2 octobre 2026 : RED de `test_relocated_sources_preserve_existing_
189190

190191
Validation : 83 tests Python et 23 parcours Chromium réussis ; catalogue valide (12 cours, 114 sections, 1 application), build et 522 liens/ancres contrôlés. Les 38 fichiers de l’artefact sont équivalents à ceux construits depuis le commit précédent, hors normalisation Git des fins de ligne de deux fichiers de Mohr Forge. Empreintes SHA-256 des 12 sources déplacées inchangées. L’application et ses fichiers restent à leurs emplacements ; aucun calendrier ou PDF source n’est modifié.
191192

192-
Lors de la migration, le dossier local `Cours/Fatigue/` est vide. Aucun nouveau support de fatigue n’est donc inventorié ni publié ; ses fichiers restent à fournir pour leur intégration.
193+
Lors de la migration, le dossier local `Cours/Fatigue/` est vide. Aucun nouveau support de fatigue n’est donc inventorié ni publié ; les fichiers déposés ensuite sont intégrés dans S15.
194+
195+
## S15 — Les bases de la fatigue des métaux
196+
197+
En tant qu’élève, je retrouve les nouveaux supports de fatigue depuis une matière dédiée, le planning ou une recherche et je progresse des cycles à l’amorçage.
198+
199+
- Trois supports disponibles : cycles de chargement, courbe de Wöhler et amorçage des fissures. Numéros, titres, mots-clés et prérequis tirés des fichiers déposés.
200+
- Une matière « Fatigue des métaux » apparaît automatiquement dans la navigation ; progression 1 ↔ 2 ↔ 3, sommaires et partage des sections.
201+
- Le sujet 3.8 « Fatigue » propose les trois cours, en conservant l’introduction RDM existante. Les sujets de rupture reçoivent seulement des sections complémentaires pertinentes ; leurs dates et horaires ne changent pas.
202+
- Sources sous `Cours/Fatigue/`, URL stables sous `Fatigue/`, scripts, thèmes et quiz préservés. Aucun cours absent n’est annoncé comme disponible.
203+
- Test du parcours en RED avant inscription, puis tests et build verts, vérification des interactions et du partage sur mobile et ordinateur avant publication.
204+
205+
Preuve TDD du 2 octobre 2026 : RED exécuté avec `uv run pytest tests/test_content.py -q -k fatigue`, sur l’absence de la page matière. GREEN après enregistrement des trois HTML par `wiki ajouter` et ajustement des métadonnées : matière, progression, planning, prérequis, index des sections, conservation des ancres et des scripts. Aucun changement du générateur.
206+
207+
Validation locale : 84 tests Python et 23 parcours Chromium réussis ; catalogue et build valides (15 cours, 151 sections, 3 matières et 1 application). Contrôle des trois cours réels sous `/PolyWE/`, à 390 et 1440 px : recherche ciblée, copie effective des liens avec ancres, partage natif simulé, accès depuis la semaine 49 du planning, progression 1 ↔ 2 ↔ 3, un simulateur par cours, quiz et réinitialisation, thème clair/sombre et persistance après rechargement. Aucune erreur JavaScript ou HTTP locale ni débordement horizontal détecté. Captures de la matière, des cours et d’un simulateur inspectées. Les trois empreintes SHA-256 des sources restent inchangées ; les scripts et ancres sont conservés dans les copies publiées. Ces contrôles vérifient le fonctionnement, sans validation scientifique des calculs.

‎planning-formation.json‎

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,14 +180,24 @@
180180
"titre": "Ruptures et différents types de rupture",
181181
"theme": "metallurgie",
182182
"code": "2.7",
183-
"supports": []
183+
"supports": [
184+
{
185+
"cours": "fatigue-01",
186+
"ancre": "c6"
187+
}
188+
]
184189
},
185190
{
186191
"id": "3-11-introduction-a-la-mecanique-de-la-rupture",
187192
"titre": "Introduction à la mécanique de la rupture",
188193
"theme": "rdm",
189194
"code": "3.11",
190-
"supports": []
195+
"supports": [
196+
{
197+
"cours": "fatigue-03",
198+
"ancre": "c5"
199+
}
200+
]
191201
},
192202
{
193203
"id": "2-4-elaboration-des-aciers",
@@ -521,6 +531,15 @@
521531
{
522532
"cours": "rdm-05",
523533
"ancre": "c6"
534+
},
535+
{
536+
"cours": "fatigue-01"
537+
},
538+
{
539+
"cours": "fatigue-02"
540+
},
541+
{
542+
"cours": "fatigue-03"
524543
}
525544
]
526545
},

‎tests/test_content.py‎

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,4 +155,42 @@ def test_relocated_sources_preserve_existing_bookmarks_and_scripts(tmp_path):
155155
assert scripts and all(script in published for script in scripts)
156156
assert (output / MOHR_FORGE).is_file()
157157
assert not (output / "Cours/RDM").exists()
158-
assert not (output / "Cours/Metallurgie").exists()
158+
assert not (output / "Cours/Metallurgie").exists()
159+
160+
161+
def test_fatigue_courses_are_reachable_from_subject_planning_and_search(tmp_path):
162+
data, plan = copy_real_project(tmp_path, planning=True)
163+
output = build(tmp_path)
164+
urls = ["Fatigue/01-cycles-chargement.html", "Fatigue/02-courbe-wohler.html", "Fatigue/03-amorcage-fissures.html"]
165+
assert (output / "matieres/fatigue.html").is_file(), "La matière fatigue doit être accessible."
166+
167+
def page(path):
168+
parsed = CourseHTML()
169+
parsed.feed((output / path).read_text(encoding="utf-8"))
170+
return parsed
171+
172+
assert "matieres/fatigue.html" in page("index.html").links
173+
for first, second in zip(urls, urls[1:]):
174+
assert Path(second).name in page(first).links
175+
assert Path(first).name in page(second).links
176+
courses = {c["id"]: c for c in data["cours"]}
177+
topic = next(t for t in plan["sujets"] if t["id"] == "3-8-fatigue")
178+
index = json.loads((output / "assets/recherche.json").read_text(encoding="utf-8"))
179+
for n, (url, anchor) in enumerate(zip(urls, ["c3", "c5", "c5"]), 1):
180+
ident = f"fatigue-{n:02}"
181+
assert "../" + url in page("matieres/fatigue.html").links
182+
assert url in page("planning.html").links
183+
assert {"cours": ident} in topic["supports"]
184+
assert any(row["cours_id"] == ident and row["type"] == "section" and row["url"] == url + "#" + anchor for row in index)
185+
course = courses[ident]
186+
source = (tmp_path / course["fichier"]).read_text(encoding="utf-8-sig")
187+
parsed = CourseHTML()
188+
parsed.feed(source)
189+
assert parsed.ids <= page(url).ids
190+
scripts = re.findall(r"<script\b[^>]*>.*?</script>", source, flags=re.S)
191+
published = (output / url).read_text(encoding="utf-8")
192+
assert scripts and all(script in published for script in scripts)
193+
assert "../RDM/04-directions-principales-mohr.html" in page(urls[2]).links
194+
assert "../RDM/05-hooke-criteres-resistance.html" in page(urls[2]).links
195+
assert urls[0] + "#c6" in page("planning.html").links
196+
assert urls[2] + "#c5" in page("planning.html").links

0 commit comments

Comments
 (0)