From aad229ef7b54ad0940d87d6ae520f92bc68a420e Mon Sep 17 00:00:00 2001 From: Denis Defolie Date: Sun, 11 Oct 2026 21:58:16 +0200 Subject: [PATCH] =?UTF-8?q?Add=20CE2=20homophones=20chapter=20(a/=C3=A0,?= =?UTF-8?q?=20et/est,=20son/sont,=20on/ont)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Same directives as the CE1 chapter: 4 rules with a substitution test each, 8 multiple-choice + 4 sentence corrections + 3 dictées per rule (draft), 3 missions per rule, Piper audio for the 12 dictées. 21 missions don't fit on one map, so the world map now shows the missions of the profile's school level (derived from the rule's level, no data-format change), with a button letting a CE2 profile revisit the CE1 map. Mission-position guard test now checks each level separately. Co-Authored-By: Claude Sonnet 5.5 --- assets/audio/dictations/ce2_a_a_dictee_01.ogg | Bin 0 -> 10036 bytes .../dictations/ce2_a_a_dictee_01.ogg.import | 19 + assets/audio/dictations/ce2_a_a_dictee_02.ogg | Bin 0 -> 12658 bytes .../dictations/ce2_a_a_dictee_02.ogg.import | 19 + assets/audio/dictations/ce2_a_a_dictee_03.ogg | Bin 0 -> 15896 bytes .../dictations/ce2_a_a_dictee_03.ogg.import | 19 + .../audio/dictations/ce2_et_est_dictee_01.ogg | Bin 0 -> 11311 bytes .../ce2_et_est_dictee_01.ogg.import | 19 + .../audio/dictations/ce2_et_est_dictee_02.ogg | Bin 0 -> 15710 bytes .../ce2_et_est_dictee_02.ogg.import | 19 + .../audio/dictations/ce2_et_est_dictee_03.ogg | Bin 0 -> 14291 bytes .../ce2_et_est_dictee_03.ogg.import | 19 + .../audio/dictations/ce2_on_ont_dictee_01.ogg | Bin 0 -> 9434 bytes .../ce2_on_ont_dictee_01.ogg.import | 19 + .../audio/dictations/ce2_on_ont_dictee_02.ogg | Bin 0 -> 11055 bytes .../ce2_on_ont_dictee_02.ogg.import | 19 + .../audio/dictations/ce2_on_ont_dictee_03.ogg | Bin 0 -> 20060 bytes .../ce2_on_ont_dictee_03.ogg.import | 19 + .../dictations/ce2_son_sont_dictee_01.ogg | Bin 0 -> 11790 bytes .../ce2_son_sont_dictee_01.ogg.import | 19 + .../dictations/ce2_son_sont_dictee_02.ogg | Bin 0 -> 14423 bytes .../ce2_son_sont_dictee_02.ogg.import | 19 + .../dictations/ce2_son_sont_dictee_03.ogg | Bin 0 -> 18507 bytes .../ce2_son_sont_dictee_03.ogg.import | 19 + autoload/exercise_engine.gd | 10 + autoload/progress_manager.gd | 5 + .../ce2_homophones_grammaticaux.json | 13 + data/dictations/ce2_a_a_dictee_01.json | 30 ++ data/dictations/ce2_a_a_dictee_02.json | 33 ++ data/dictations/ce2_a_a_dictee_03.json | 40 ++ data/dictations/ce2_et_est_dictee_01.json | 30 ++ data/dictations/ce2_et_est_dictee_02.json | 33 ++ data/dictations/ce2_et_est_dictee_03.json | 37 ++ data/dictations/ce2_on_ont_dictee_01.json | 27 ++ data/dictations/ce2_on_ont_dictee_02.json | 30 ++ data/dictations/ce2_on_ont_dictee_03.json | 46 +++ data/dictations/ce2_son_sont_dictee_01.json | 30 ++ data/dictations/ce2_son_sont_dictee_02.json | 30 ++ data/dictations/ce2_son_sont_dictee_03.json | 40 ++ data/exercises/ce2/ce2_a_a_correction_01.json | 45 +++ data/exercises/ce2/ce2_a_a_correction_02.json | 41 ++ data/exercises/ce2/ce2_a_a_correction_03.json | 45 +++ data/exercises/ce2/ce2_a_a_correction_04.json | 49 +++ data/exercises/ce2/ce2_a_a_qcm_01.json | 23 ++ data/exercises/ce2/ce2_a_a_qcm_02.json | 23 ++ data/exercises/ce2/ce2_a_a_qcm_03.json | 23 ++ data/exercises/ce2/ce2_a_a_qcm_04.json | 23 ++ data/exercises/ce2/ce2_a_a_qcm_05.json | 23 ++ data/exercises/ce2/ce2_a_a_qcm_06.json | 23 ++ data/exercises/ce2/ce2_a_a_qcm_07.json | 23 ++ data/exercises/ce2/ce2_a_a_qcm_08.json | 23 ++ .../ce2/ce2_et_est_correction_01.json | 45 +++ .../ce2/ce2_et_est_correction_02.json | 41 ++ .../ce2/ce2_et_est_correction_03.json | 53 +++ .../ce2/ce2_et_est_correction_04.json | 53 +++ data/exercises/ce2/ce2_et_est_qcm_01.json | 23 ++ data/exercises/ce2/ce2_et_est_qcm_02.json | 23 ++ data/exercises/ce2/ce2_et_est_qcm_03.json | 23 ++ data/exercises/ce2/ce2_et_est_qcm_04.json | 23 ++ data/exercises/ce2/ce2_et_est_qcm_05.json | 23 ++ data/exercises/ce2/ce2_et_est_qcm_06.json | 23 ++ data/exercises/ce2/ce2_et_est_qcm_07.json | 23 ++ data/exercises/ce2/ce2_et_est_qcm_08.json | 23 ++ .../ce2/ce2_on_ont_correction_01.json | 45 +++ .../ce2/ce2_on_ont_correction_02.json | 41 ++ .../ce2/ce2_on_ont_correction_03.json | 45 +++ .../ce2/ce2_on_ont_correction_04.json | 57 +++ data/exercises/ce2/ce2_on_ont_qcm_01.json | 23 ++ data/exercises/ce2/ce2_on_ont_qcm_02.json | 23 ++ data/exercises/ce2/ce2_on_ont_qcm_03.json | 23 ++ data/exercises/ce2/ce2_on_ont_qcm_04.json | 23 ++ data/exercises/ce2/ce2_on_ont_qcm_05.json | 23 ++ data/exercises/ce2/ce2_on_ont_qcm_06.json | 23 ++ data/exercises/ce2/ce2_on_ont_qcm_07.json | 23 ++ data/exercises/ce2/ce2_on_ont_qcm_08.json | 23 ++ .../ce2/ce2_son_sont_correction_01.json | 45 +++ .../ce2/ce2_son_sont_correction_02.json | 37 ++ .../ce2/ce2_son_sont_correction_03.json | 45 +++ .../ce2/ce2_son_sont_correction_04.json | 49 +++ data/exercises/ce2/ce2_son_sont_qcm_01.json | 23 ++ data/exercises/ce2/ce2_son_sont_qcm_02.json | 23 ++ data/exercises/ce2/ce2_son_sont_qcm_03.json | 23 ++ data/exercises/ce2/ce2_son_sont_qcm_04.json | 23 ++ data/exercises/ce2/ce2_son_sont_qcm_05.json | 23 ++ data/exercises/ce2/ce2_son_sont_qcm_06.json | 23 ++ data/exercises/ce2/ce2_son_sont_qcm_07.json | 23 ++ data/exercises/ce2/ce2_son_sont_qcm_08.json | 23 ++ data/localization/fr.json | 3 + data/missions/mission_10_gue_petits_mots.json | 12 + data/missions/mission_11_moulin_pales.json | 12 + .../missions/mission_12_grotte_resonante.json | 12 + data/missions/mission_13_pont_levis.json | 12 + data/missions/mission_14_tour_horloge.json | 12 + .../missions/mission_15_source_chantante.json | 12 + .../mission_16_verger_bons_choix.json | 12 + .../missions/mission_17_serre_etiquettes.json | 12 + .../mission_18_fontaine_murmures.json | 12 + .../mission_19_foire_petits_mots.json | 12 + data/missions/mission_20_atelier_conteur.json | 12 + data/missions/mission_21_colline_echos.json | 12 + data/rules/regle_homophone_a_a.json | 9 + data/rules/regle_homophone_et_est.json | 9 + data/rules/regle_homophone_on_ont.json | 9 + data/rules/regle_homophone_son_sont.json | 9 + docs/review/content-review.md | 372 ++++++++++++++++++ docs/specs/decisions.md | 10 + docs/testing/manual-checklist.md | 1 + scenes/world/world_map.gd | 37 +- scenes/world/world_map.tscn | 5 + tests/data/test_mission_positions.gd | 48 +-- tests/exercises/test_exercise_engine.gd | 9 +- tests/world/test_world_map.gd | 45 +++ tests/world/test_world_map.gd.uid | 1 + 113 files changed, 2814 insertions(+), 31 deletions(-) create mode 100644 assets/audio/dictations/ce2_a_a_dictee_01.ogg create mode 100644 assets/audio/dictations/ce2_a_a_dictee_01.ogg.import create mode 100644 assets/audio/dictations/ce2_a_a_dictee_02.ogg create mode 100644 assets/audio/dictations/ce2_a_a_dictee_02.ogg.import create mode 100644 assets/audio/dictations/ce2_a_a_dictee_03.ogg create mode 100644 assets/audio/dictations/ce2_a_a_dictee_03.ogg.import create mode 100644 assets/audio/dictations/ce2_et_est_dictee_01.ogg create mode 100644 assets/audio/dictations/ce2_et_est_dictee_01.ogg.import create mode 100644 assets/audio/dictations/ce2_et_est_dictee_02.ogg create mode 100644 assets/audio/dictations/ce2_et_est_dictee_02.ogg.import create mode 100644 assets/audio/dictations/ce2_et_est_dictee_03.ogg create mode 100644 assets/audio/dictations/ce2_et_est_dictee_03.ogg.import create mode 100644 assets/audio/dictations/ce2_on_ont_dictee_01.ogg create mode 100644 assets/audio/dictations/ce2_on_ont_dictee_01.ogg.import create mode 100644 assets/audio/dictations/ce2_on_ont_dictee_02.ogg create mode 100644 assets/audio/dictations/ce2_on_ont_dictee_02.ogg.import create mode 100644 assets/audio/dictations/ce2_on_ont_dictee_03.ogg create mode 100644 assets/audio/dictations/ce2_on_ont_dictee_03.ogg.import create mode 100644 assets/audio/dictations/ce2_son_sont_dictee_01.ogg create mode 100644 assets/audio/dictations/ce2_son_sont_dictee_01.ogg.import create mode 100644 assets/audio/dictations/ce2_son_sont_dictee_02.ogg create mode 100644 assets/audio/dictations/ce2_son_sont_dictee_02.ogg.import create mode 100644 assets/audio/dictations/ce2_son_sont_dictee_03.ogg create mode 100644 assets/audio/dictations/ce2_son_sont_dictee_03.ogg.import create mode 100644 data/curriculum/ce2_homophones_grammaticaux.json create mode 100644 data/dictations/ce2_a_a_dictee_01.json create mode 100644 data/dictations/ce2_a_a_dictee_02.json create mode 100644 data/dictations/ce2_a_a_dictee_03.json create mode 100644 data/dictations/ce2_et_est_dictee_01.json create mode 100644 data/dictations/ce2_et_est_dictee_02.json create mode 100644 data/dictations/ce2_et_est_dictee_03.json create mode 100644 data/dictations/ce2_on_ont_dictee_01.json create mode 100644 data/dictations/ce2_on_ont_dictee_02.json create mode 100644 data/dictations/ce2_on_ont_dictee_03.json create mode 100644 data/dictations/ce2_son_sont_dictee_01.json create mode 100644 data/dictations/ce2_son_sont_dictee_02.json create mode 100644 data/dictations/ce2_son_sont_dictee_03.json create mode 100644 data/exercises/ce2/ce2_a_a_correction_01.json create mode 100644 data/exercises/ce2/ce2_a_a_correction_02.json create mode 100644 data/exercises/ce2/ce2_a_a_correction_03.json create mode 100644 data/exercises/ce2/ce2_a_a_correction_04.json create mode 100644 data/exercises/ce2/ce2_a_a_qcm_01.json create mode 100644 data/exercises/ce2/ce2_a_a_qcm_02.json create mode 100644 data/exercises/ce2/ce2_a_a_qcm_03.json create mode 100644 data/exercises/ce2/ce2_a_a_qcm_04.json create mode 100644 data/exercises/ce2/ce2_a_a_qcm_05.json create mode 100644 data/exercises/ce2/ce2_a_a_qcm_06.json create mode 100644 data/exercises/ce2/ce2_a_a_qcm_07.json create mode 100644 data/exercises/ce2/ce2_a_a_qcm_08.json create mode 100644 data/exercises/ce2/ce2_et_est_correction_01.json create mode 100644 data/exercises/ce2/ce2_et_est_correction_02.json create mode 100644 data/exercises/ce2/ce2_et_est_correction_03.json create mode 100644 data/exercises/ce2/ce2_et_est_correction_04.json create mode 100644 data/exercises/ce2/ce2_et_est_qcm_01.json create mode 100644 data/exercises/ce2/ce2_et_est_qcm_02.json create mode 100644 data/exercises/ce2/ce2_et_est_qcm_03.json create mode 100644 data/exercises/ce2/ce2_et_est_qcm_04.json create mode 100644 data/exercises/ce2/ce2_et_est_qcm_05.json create mode 100644 data/exercises/ce2/ce2_et_est_qcm_06.json create mode 100644 data/exercises/ce2/ce2_et_est_qcm_07.json create mode 100644 data/exercises/ce2/ce2_et_est_qcm_08.json create mode 100644 data/exercises/ce2/ce2_on_ont_correction_01.json create mode 100644 data/exercises/ce2/ce2_on_ont_correction_02.json create mode 100644 data/exercises/ce2/ce2_on_ont_correction_03.json create mode 100644 data/exercises/ce2/ce2_on_ont_correction_04.json create mode 100644 data/exercises/ce2/ce2_on_ont_qcm_01.json create mode 100644 data/exercises/ce2/ce2_on_ont_qcm_02.json create mode 100644 data/exercises/ce2/ce2_on_ont_qcm_03.json create mode 100644 data/exercises/ce2/ce2_on_ont_qcm_04.json create mode 100644 data/exercises/ce2/ce2_on_ont_qcm_05.json create mode 100644 data/exercises/ce2/ce2_on_ont_qcm_06.json create mode 100644 data/exercises/ce2/ce2_on_ont_qcm_07.json create mode 100644 data/exercises/ce2/ce2_on_ont_qcm_08.json create mode 100644 data/exercises/ce2/ce2_son_sont_correction_01.json create mode 100644 data/exercises/ce2/ce2_son_sont_correction_02.json create mode 100644 data/exercises/ce2/ce2_son_sont_correction_03.json create mode 100644 data/exercises/ce2/ce2_son_sont_correction_04.json create mode 100644 data/exercises/ce2/ce2_son_sont_qcm_01.json create mode 100644 data/exercises/ce2/ce2_son_sont_qcm_02.json create mode 100644 data/exercises/ce2/ce2_son_sont_qcm_03.json create mode 100644 data/exercises/ce2/ce2_son_sont_qcm_04.json create mode 100644 data/exercises/ce2/ce2_son_sont_qcm_05.json create mode 100644 data/exercises/ce2/ce2_son_sont_qcm_06.json create mode 100644 data/exercises/ce2/ce2_son_sont_qcm_07.json create mode 100644 data/exercises/ce2/ce2_son_sont_qcm_08.json create mode 100644 data/missions/mission_10_gue_petits_mots.json create mode 100644 data/missions/mission_11_moulin_pales.json create mode 100644 data/missions/mission_12_grotte_resonante.json create mode 100644 data/missions/mission_13_pont_levis.json create mode 100644 data/missions/mission_14_tour_horloge.json create mode 100644 data/missions/mission_15_source_chantante.json create mode 100644 data/missions/mission_16_verger_bons_choix.json create mode 100644 data/missions/mission_17_serre_etiquettes.json create mode 100644 data/missions/mission_18_fontaine_murmures.json create mode 100644 data/missions/mission_19_foire_petits_mots.json create mode 100644 data/missions/mission_20_atelier_conteur.json create mode 100644 data/missions/mission_21_colline_echos.json create mode 100644 data/rules/regle_homophone_a_a.json create mode 100644 data/rules/regle_homophone_et_est.json create mode 100644 data/rules/regle_homophone_on_ont.json create mode 100644 data/rules/regle_homophone_son_sont.json create mode 100644 tests/world/test_world_map.gd create mode 100644 tests/world/test_world_map.gd.uid diff --git a/assets/audio/dictations/ce2_a_a_dictee_01.ogg b/assets/audio/dictations/ce2_a_a_dictee_01.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0caa4a39d7cde05517046d30420438642416ff5d GIT binary patch literal 10036 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 s`sFaBSC1IdE{Xi0d!CRQvd(} literal 0 HcmV?d00001 diff --git a/assets/audio/dictations/ce2_a_a_dictee_01.ogg.import b/assets/audio/dictations/ce2_a_a_dictee_01.ogg.import new file mode 100644 index 0000000..5220b4f --- /dev/null +++ b/assets/audio/dictations/ce2_a_a_dictee_01.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cac04iyqc1t1d" +path="res://.godot/imported/ce2_a_a_dictee_01.ogg-e75c5a7b7f5c34495d4a76625d08f94c.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/dictations/ce2_a_a_dictee_01.ogg" +dest_files=["res://.godot/imported/ce2_a_a_dictee_01.ogg-e75c5a7b7f5c34495d4a76625d08f94c.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/dictations/ce2_a_a_dictee_02.ogg b/assets/audio/dictations/ce2_a_a_dictee_02.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a71a267eb9e7cbc4e8c35f25460982ef86ea271d GIT binary patch literal 12658 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 literal 0 HcmV?d00001 diff --git a/assets/audio/dictations/ce2_a_a_dictee_02.ogg.import b/assets/audio/dictations/ce2_a_a_dictee_02.ogg.import new file mode 100644 index 0000000..6fd4e53 --- /dev/null +++ b/assets/audio/dictations/ce2_a_a_dictee_02.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://de57q0b2bfly3" +path="res://.godot/imported/ce2_a_a_dictee_02.ogg-49749cc8c1cfef4640132ce7647c19fd.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/dictations/ce2_a_a_dictee_02.ogg" +dest_files=["res://.godot/imported/ce2_a_a_dictee_02.ogg-49749cc8c1cfef4640132ce7647c19fd.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/dictations/ce2_a_a_dictee_03.ogg b/assets/audio/dictations/ce2_a_a_dictee_03.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ed20a04262b4a1d31fec49d84f6c7eaa026ccddd GIT binary patch literal 15896 zcmch-byQrV;11t+ ze&^i#)?0VIzh1AN-o2-~s>`~nckiuYZmtHv0smFt4_^J#=Q)<|08xS5?467)ou6T# z7n=VL;j8-hS^`pe#{BQ{j0u9>>CmuEV~IWeZ>0zRUosdlsG^aZ880V0A3G-p*Yjv< z*zbd#iM{CuClMIT1P0?2fB`vaY%GocMFS!Jdwn4(r3nJW0f0mjhZ(WLBu22GkT#k$ zH(PQ5+(#)nMw>?`^--{wr;o(sO_OP)GR3&nB*KaUF}coXSZL;~yOQ^0z~&plhthIpqD0a$OFCLHQi z$@2^)F~@R3f2Pv=OmF|0ax_oF)W75Y8T?NZ{Y?I!o*m~7k#prU71%AszyHy2n-T)C z0Fa%-6uHiXg+o?@2J`~}j<_Sin>Yf6YKp;eI!qKy9YmNJ02J6bxv+e>$O7#cGs`Rn zuUw||T;{SG%Yho!!J7SM_J7dj06_IEL5~9g@;`W{0D$tIDKd{gW>Y)9Kqm`1B&-|` z2mk;C*f@+g)dWhXbfag&qv!w6`tP(f000CrnUcW&#{?*}WTaA=P&|D!B1sBdDN4x^ zsgi==HE<}s$%Ip`_wm0bzySaw0{)MIeRL?aA;tuZ(vF2Ru-+D(_JHRf zI+W#L9LdHE@4+S*#y_fn$=FE~f+GnV18czfiBLIkVXAQ?xR1hlh_jC-7~}Py>;z@O zU-|LMf&+AUF;Hu89f6u+^%jvyMcqt>^EU~wNi=6K$^SGj|4{=>U>qb;(^wdTAq4*r zb%N2O_*X0#@Y(e#WT13!oao-f)BTEPl}`{J{Qg{(rlge!HKsLeXRmAxuWVPRKdfGT zSe*V~ko;k}&emYYz+l$(|E&Lr9)JJ@#B9Q}4y$r8`EqFg7$+74-~a)6{E-`SFnh$% z>%=oyCYyUE7kQ=^M^ODU1ZEhR)?g(d_aC#-=_D6gW)(dfyR+i_7tgH#lW|gd^g{nFudAAt?SG5_ z8}eNGoP}Za7fcnfPJ*!fB)8K4$NH>TH~{8+I0>;3Po`*pD>? z#tQ=Q763kS%7OCKuta0Fl4)JtvZfww=O~`*egQ~k;*21; zqF}~KsbYFT-jXeU#@LdrcgA=a+?&A#t_V#wW+~~JGalrrOLc~kA}|>R_hwm_H}z!% zb5u-c=ne|>q7W4mh@=r zMsoI~I!Ce1j_Fpy=1_|g=+h03ufBSxTlP#UvI0hmgSRhB2-1{1>J?ou0b}cka=c$bc4!hy>yXo|RbS7-NcH^5j(Pj*NO=rk!Rg3;efJPYz zkmwgEAPIqhQF1~OC7Hk)(enMN!SS4o1&L5y6#6=t)zVC$ulw>t@N}8!Yw;kKC5aQd zOa*nxy3yb|A}Mf5C{&lFpf*{zl(SCLp#UVI1uKNpXyM{iu?&ExB%t=HsBt0y{NjdXI1~ygj#Xd!EQNcKXQUeVHi8G zhz5P0Lx8a$I0mwvogWXiF32a~+Rlf0-vCV>6y`Docxo`NV5AE2XLO_M3a510=<8sl zsuS^^Nf9Y1!CVHy%n6&rnsYl{H;NMm0E2tuAvP5~>3TK-|1~+ps(L!v#JYNW3i=6L z2Lm+qCaQg|yUKuhMxFXIKwHlq7Bq!mP6m^lz9&^Tsv72&O!W2tOilvBs3$VP&Z*Ug zk;=z2fz3vu7gJKF3j-8R8CTR@QRvx;6cAZQRd2&QoM(2$L`i@U065lQ>;AnYDHFFT zJ%9ttT_oKkCOBjT8L%Z9oaj6v|0@F)_#rUYkdy;ED@#JyK8#4nmDH(1AQe4C5c!fi zB6I*?a)70-DhV}X$AEu=$v+Di!iki_DGT1A;qGPXc{X-$MuI9B=FY0GVeX;|+0Jmr zfuPbRLLm^^5GafkY{9}kFJN+RdLm>PLo)v|WRk%(LW`DJFao73$(wm=%~U|95S`hp z>Al}HN#C~VVn9K95YiN;Z|RRN7^k{yze1NUYN zF@ftyY)&#m5_O{lkQ1O$JUc7FFjb}pkBCfbK8Mf@<8s)4&aegJ-UR{_kJOIbj-%=r% zgy0D7WW$6-feG=PvH#zM;D=?Ae{%W%{|$^)m|gzQh7ss*_yOvC>gpxcj2}UJ6O8_B z%n*10K$Bo9FoxNJ9=5RnXC}Zb6&DPJ?84S71QixQASnMdl!;JDn7Lqv`%feIpWc7~ zxFF#fAUz@ves(}`!Lxz?GwwgV|K8mEUlaldG?G&QG{N#zKozb7LgI;Cv_q4cBBuevbl{ieS-cKmes6KT(pI)^$VznLacYib|UlBlw3Y zQ5DKepEx1FR1iV{fq;`@CFM$75}{1=Nza3mpb$CwBpe7@X1+QEtt4L^ijwIPE6GTo z9}l}tNQB`QBtjtcE>KBkZ~<)PmL%dpE?q(%|^Ra}EYuGDw}5Rld20kEBjc%sXUWs&>~6i%5mMoe%oOh;Np%CX=v-eH?^>FaPja7fYE*~D1Z+D(7h0smgaUQBqAmu zB_pSxq@t#weSVVpr-+M-|8u2*wc_IcJ|G3a9zveW^8?cJ2GjP`XPrk(h*z9jKulZH z*v2+IA~M?6IKbIo+S=MWA|xz0BsfmrF2da0IyUl?k57r4`(UBj0FS5_fF3vt= z1jj^2m;1P!o`-id%+@%+=D`QFZ9A&-6H&;VuO{#9dS|Y;*1F7Ew2lE2#cvZ)XzNwB zi}j=n4Y$o9oNIwN&hZG1m~VW%>XTybm%ib9P;vN9lj?CgGip!OC;GLrTYOR=)XSk? zR*)m3+K~W$CIBl9x1|2SM{&7$I{sF1{w0QRaW8us;=UH&*R_jA3_aeC3hg@<2)78N zq^%Af87UuKfF0l&s{{q0Lg8eT=Vu%h%l3Og-N&}_%i#@h z%zPV(wXUuv{Fw8YbJiD9XA{oPIBCyw{*uS*KVK7&5PV0aDC+(;!~F#xLm~Zj>d(_= z;`%IS55|6vBKh6?j~lHosingZDE>!8TG(WPiv-8YS@;<$zeAnx1dd`8aiY!dVpqH+ zMe7%q2l<7+-+4 z%&I#lT`V2J0@{)9BoF{(q@vhEihK8CrRz1g`N087G3j^VrE=6?*sw>j8c3Vg=RaVJ z^`yNSO$)xJu$1 zl#ipP(&CC+NEXg3R!4K)B6Z;|;-{c~N>o>*JC?^b3;@EbrZo&;j2oTfwZC713E#_^?|39V)A$k5>ZP@Jlt-7*Y#=fJrUNWP7x&1Wg9(p(ct%X z&_5F{G@}{)trGt^Cy1xt%=Etd&(-S5mjffDyT%MZy!1djz@}&3@tPF=4sPBaDV?GJ z>$mHK7WPkJXW`W}D3Z#13&fe0CLg9IzzuPl^rAcR~ zwV$U!BvaXiW3pAP#B)b;Q2uAJ)%=05PDnBk(vEV6?tL)RxFWeyb? z?}fRD_|DpQ%R&sPI0{Sgs2^lK$$*u;jAXkc_oiZ!SqmBYL|cWV6SL_Cn81mPg#ofI%ix_ABC9H%?6tjw=mLs3a1qgxL-Q&t;v=?s ztiITRx{PIpA$R|UaY8grfYSo0%F#|!z0Cv^lV+@)gA)qXm@^XoG%y zoVz)LSA1x|_RU6DaaP3IM5SLO`^UB28Kxcg@Ykcab!L=b6#=5=1A*9)lklnSQz>To?n4!kM@NIFV%_;rh7QY3HR>e}*b|jtsMDSS%5YB8IL!2yJKG1=FXbQZ; zq%W18RA{ovLGk5S6A)93T(%iMUhl`!L0so&5kuorJWmJ@$iarIa!+w_;p1vT3yu1V8G#AEHMAv?a;Cj&2 zqgP^}AYtF*SuW8X2#{ghBp(KMZHk69ycs@}{+^_`m%hApj{HQM@D1y)&Uh?9qxFKl z?CR{5`N`79fIpI<{0cP>LhGKb4D4N3_6PxhVv`Pc>30yotz_WS)+jXB7JEF2e1FKePAc7Y0`eSARv7XEpV!~6KyH*iW(W!Ryf-=;2`6>fhs4LYKv2e z45m<}U7X~K5YDAh<7Y>8XRKR80o#n2{Hx!c1*l$oy?q~*&E1a-9zG^_v}`0J9bUG= z>;2ZFdWY%`FY}W5#G3{G_c_`dndR5q)M#av_(vc9^(8_QIV%0e7JDL-+{Q3P9m)DOa!%0CFh9slPGu$c zM{I~*<-X}CVN;3Gi#PXu8#&UaZ<9^i~guVau=!$=6bU@%e;ai#F>F>yP9YEK8p*1T3s`yVVE;0_aS$`=*$ib{-sS7_qzb#ezUZ^zVL>1(@_@WxN2yHC{cL$H4`jDK z(Pj2I2A(5{V~TF@soD-D_aLgkY7i(*J|eY^POH6u)czdi4pdabWKKp4a)b zLa!4X+YTpTP8XbLX$I0-g9lC7;1QA-B9cA_XpSO081Zl_U4VX0){rGz@Dx;PPrMdK zl#PX>NakK>wGVjvFt3%Hv~V^01^l_ba97Szj0%(-Vx}n`|5Z5P@}g9$Np_O;lTCi7 z07)y?X0$)fbX>g~ybj^*)w1Ly>fY{I z*ZjC#9Wf?0o^}25Zu$6n)hzSNR0*ErYd?hnp*4OlWP@q%I^oT*7kT{})uSb^(eNiP zEy5h@#V_D_lFki!H^_-c5kv>{!4geofd^*p!TzXi0m!<*7h57M)foiUHUavRL;RF6 zcUE{OD!9LwL2u!UkE`-Jqyjv1;rp{wJf<`7X~lyt(XUnAc9>+Un|&`gKh;^X%QTq! zMnE9V$Lp~_Q?;%f+09)r=)X7&C0pNx<$6oJ@zJY~<-Mx99uMbSurY2x0NMvwp|)0h z9x|GI-ocZf#=_Y^bb<_PAl`u7Jx}C*8Vy3$8&_JfO6Hq=HIOjo$$3Mp@k6~Z!S)RV z1epxFQP}T{xTF^HXD5dwKwAtg`5#VhG+!OQ4hFb=do@P>deSWL zC^z*pDiR9i#qeJCoU05!2gKPuf3om9|0AYCX7{q~v zZ&GdHI{O1U3?xguI;R7qsZW-ZJr}t?&5L*5fRH(;AHE7g5FA`^H(e_0S=iBbKr% zAIH^(%Ypdo3;gheH({?n(fOpk=HZeSrVSw}p>8I)gEm$RhmdiHd_hom%4Lu+y)LEy*90&Kupr9*ExW8} zM>+8NTdZq^damcEOb&OU01f(BVpKuM!{zD5 zywiG0-ywX>!E}a!lBACv^)90@H5Ri+ZRDty8}V4w=fj?JmC=_hD?iIz8aJKuc&bjN z0?fWgj|+ar8&OVIbc{;2a&eQ~ck}cSy|b+T93~PIgPh#@?$6bN*Ds!k05WSudWTFtX7^Q3yD{}S zHEPj%m&VL05-SH*l+k)ap}_c6&cfvoMNV zHKuSev<(e^;AyZClElD4R{lmA#i-s|4v1PSa-5K>SxjAiF9QKT;KD`1nm{MUx% zeUmxF#pZ}hUpn{cA+HQ82rb#wHMJRwqu>K`1-rYq^?v_}F_b-RMtM@oC>x_cz%-d; z@G=&P_=YEFsa**tq``DmXjk=(I-zF^F+iAma*16MDIukoV@OH4C(C}#0{brJ#|-Iq zbDm~q%8)FeX>CJxlldif+1s~;44?rR53A^%G2d5>;8~G{NQnyu_*A3TaT125fIE`# zOLo8C<4k$Otw+$lA1D6<=c~{p#_-2`Tm3#A;Y{OX$tBu^I{Bfr)*DNjNc#_KPIt87 z1}7>qd~DhN_t>-7beSNwe3q?aMNWK?v39t(j<*laxbsuBlp~;1AKO2ufKNB4{=Rd) zFE9r`KSo`QS*KHe&Ley`u;nqcE7he!WodBXPJ{m;R{Pd+*2n&F+g*x)So_8>s{g{^ z<+v|((Dkhw@72}S>72-r%|xt6;HQhPLT@)N1$5v(O(!StXaB75%JwZ;4g!`R;Q#`#D+$_7Tp6|*m&V?y*x*FpOU^l4lnPV}Gug%_yJQ3vjR0dt+OTjs3!yjj^AkGImZ zk1v<1{NI}7QqC1gd0R-$4-AE2x%m2zYC?ENYGRKnUM=uo9YfqYDe#4Rg-?F}SxiwG z<=L{hd4u5X(QInCfT1gN=b(eP*z2%y=;XbqTqdFN9XFVd`H}&jW;33Y;!Tt2NbmOy zp}e~5C%d;F?{}97dTJL+^^vgy@gtpGSKd$>^ShyN?Vtkh6m0MgywecxuI`ciDUbvu z;1C1ak=9Cxnc<2@8mwh%xMr{}Ckxk(UvUS#+LZ*a`c7mOb|jIBGckv|cN8oR4sGE! z)QyGt#3kAJ3$vjZO!haPE)4p_yLU#6toTNI{*9~p0?13i|S0;29mNO#He(=atL#abX11J?ZIpdp*$KnkQo8V?MBN)kA( znKpwY@Wr`g;{#GG#lQ0qd-&ctCZ9RGdp6zZAoi0vK`=40v^#FB;=NlteLHJGk_zpJ(NeK>UPoF{( zzE(vNTq6JLg2WfsIWZIjUlkURmH|(*>V^W$G$C+*<^}xC1GZ}RDO*KpJd}`VB;5?_ zq-1!DdlcgA5HkJX&Yya5u=7IN#Ke)N#Q0baR{&(KyV~ma_GQt#gHhj&3^EfR*$MW%TQcf)`_5D{KC2I5-4Z?@>BI z+VI6Ig22o5ZtjKK6+#k);Ote zhxS`4p)8iiW6$eV2lAk0fR^NNQ~Bf*VdU8*;L@UQlFv!dt<3g{D(zNdRAs8Vp2YiG zi)!=br&Sp)!N=y>p=^B}e3vZpzu!7LX&opQ<$bkaha6x1*%%y=yaKK<2^K9uynvt8 zryH6h&bKSFctV|-C}o$e(awU8S`D{|k0A}Ij!R!N5ESFSBAd_8E+|ldBzM|;2(|>i z!yB-(Zm|x|brhABFowJe`})JP$AFrAUE`q5o&oN^&d|%BPtgB8Lx)9GK$CR&Jy&q3 zzn34x-X_YyIyzFz%pzLB*2Xg4-`&F_z&9!^PSMIHF+9{iEI1%2(9_4)+0w?r=Fuy$ ztCO9+eDbsnmIh-UIv0$M>@ZXl?1A?nP$P{@(y(rTG-wY!)~XFbnO>p5I)UiLkbuS1 z$;Y81O~|GJdS&}O9ASAbh~I^~#IIHAv%i*IzkTv3iNI1rDSnX8H5DBSO;f+1KuWl& z+!~a);S5*MwbaGeJ7Sr9V`H&HAp&?8WjfSpM?&e?ca8bDfP$_YP_FBmQiK+>_HRcZpURwW^WA!V0 z-+~RB)5f~9={w@s=Y#6S!Jl$7l12GqdV;&JEt;vDUyXD+q`wxLXB~DqkP1c1^Y}Ug z_(fqza5W_%Ec^1^yb=Oz#*nPv%d2PfQ3VX!uu&HMRYG{!19fUQXl837G};dmu%u5? zr8|r*r=DL*E)Qp-lM(%A&OH7e{go53+Rp(fIPm}p-1U4J(M1rkF-AWA^^ zZ(ge)ugWcQ7BuTR^`gUuyrT2&%XTK9Jq?|*GcfR{XhuzhsBQM2$a-3x7Y7T@t$)f~ ze87$x&c2Kj)U&Da#S|RcB& z!~5J{ClB>F$uEIeqj}-J8ol#HOLGI<$tTI}i3>ze5GO}x7KfNUK0wseoDa~@cm+S% zQzMO`*hY=G)pze*;(tE2Wm^84rHZR20KUC(?USBtYF zlznxVYp;&-LFB4=U(R-<9xJKpGi7C)l-F$-M!0ssnM;e{LS;Lp!NBWg9z9^b@di2e ztyGuB?_aHR5uCXoidU;BhJGTTY$r-eHf6+l9R`&KwnJa{tia~X0~7_jY)N4gGA|9U z9N{)*Lguc&bLZdPx_>atKbgbZ)K6BUgnbx}tH=`ADgp>Z+^nn5)5!pb7HfAMpT&kqk`k83kzC`5ofG6 zOU}IH_ef?)Q;hgK8ylEOkp&4PYujVFF@F>(y|CR+dI~+HolP;7bd-v0vqm&qm+i< z>Ks;Ds~`nTA9U06slHCEC%KKHmF+AEHNGw)uWxBR-*^qz& z+NoY2EH6Eg?I!FtJ+r&RqBnzKA^+~S>f-|Tb- zJ4n7sM3VJ0{kuUH_rTXHE!$*ceDnA79P+!b#tCknT|A}%&m4?|2Q_u z1HZg458gca_!gci{3ItLGcZ4WvC1-1VZ-rWJE*}|_SXYb@naz4^J|RZu-W@7%RuGh zWt?!vaqCV3ZNN`I;b9EzPl1gTu2bG3El2mKGby@j6+yYP{#SuWvEGZFUwyL*vySyq zaOWtY8iU1Z5+PY755h%9^TAsL-|jlzGDv)QauC_6Po3;8#5#WCun>ri=@Yrs8m^#{ zxDNJOlB@iK7n8Vxtz+-W$1&_1Mf=qs0NfU);7;2UDzh0M>{7eesFxhpbfU>SNop`D zU*DAoaYkZ4KE~M%KjEqRhf)&R!hKH3(Xr8Eim5)8;GMi#`(7m(+x2B=)1P>;Qt?kX zDNpgn$DDSza+8<*@2Vv!3AW1AwAtMoV?<8|5aSy>ahQhjrypij7Y=bOBMV}NS|&1D z1oSeeQQgr1pHU+oDIrTw$^|1-ltuu#6DSVbn6^cosf^KLfkmTzSlv}==OoB?t z+Q^36z6(;F^0uyG{zW`UhDsD9>6@PtL)J_BFl7H(ZpZN&+u9>H$`;P1+s`n{4Z2}C z7zPRu?F9Y#L}UArg&y+9*$?k&i-zCYsaeXTogo4C+4aH;|1y<)-_sEkM2svBKnI##-+O`qHy!}! zL{e3p<7J7{Vv`|LZwdYlRev4Ll$82+>9yd}ih(j$>9FM=h1-1d<`u4%V_~C8za<@v zjr+CNW|@<-Es7+NzV@k@zfD!i*w^gW`lW4ClNpf=L+c-E9e$w5s*ir?LHW{kqP4+` zA}l4kSj*5>gShH^8Suy|joiN2DLO(@mZ z=TIp8!|-o1d7Wv?g!4Bu88KSd8~&cOh2o+==XIN{{k-uz(GR~pH?ia9{)(Gx{KkQ2 zB9N8|S^Ks~5ddVHg3=Kk*e#2k!rn~RCb1nWeK$IN`p_nVFBn0!24J_HXAzA&}=CMd@c=6LOSJ}L6tVUS* zNx51*`HxS=oc)tJWm9~BOo$ctW0+vv^w#qs!$i;`sF(orElUn>V5>*~mcs-1!~xH*sk<^g^Wpei zI+gIvY<3NS7j^r}h~@9&CU)Fa4$CRjcM^K_;_%wreuJwRWAB~F-kn&Dw>VVd9xTJz zp5$$eV3T*qO)8FJKEMNwbJ6};Ai{wpUcrfy;S3B~*kOp}#jeaE{0bQz z(!lX3O7q_~Bfqs*s|dh_Qx&8RLHpkBcX8V=@oSyzg_-WjC&n&^i=6pc%No8P9Erpp zx>~+mrUKTc_v3Ul_NxC~cxFm_Ic|qa*(1s`{xBSAoss`<0M~E~u zW|}=?5~QF+Oyr8Smw~Wv^X_)Ch*PJhQMnYYDiM+8m!z(fa;7i2yisgan$87Q51|H> zh4Wrc%No|9_Zq5IuGou}Q=zm=-#71%lCOihSH+dzZ=m59N(FNLFv$1yS)31(*o#7V z1efDYx!L2n>|Y}(b#`D`xMZ^`6qI9j-jJhyJ@2Cr>XLyI)l<4D_3zxyK;j4K5tPDd@C$XFlkj8J0Q!j#u#jOy+7`)seP5Dv0!s;aOP z$Fz#5iHKZeH_}~So23Cn(`#c48;9Xs&JMzEF*5McfcNmln1sW4Yb(>Kn|pmPQD?RT z5c%;GhgDCiS^_GBu0vD3L1)Srd{1*h6?JJ1B!S{PW*2hA*B&ynm(muyCq3W$R)EG! z^GYEjyHJl1B~2pPq;N^c`VoI;=Z|RypHc56+IA~i1oCpfbhrSb&9yNGy_s=@f}VCK z`#7J*Fy>;jgw<jhZEkz}rHJR+DdrxnHz1S`?7e0NcZDcIb#@CB{$%q97%IF-f z5n)yR`z=0zs~Ke(1FkXE`x0rpGS)b>rMkM@^mxB31^J1<7mTH40%dmCFR z@B%Jf<=pc~^|!>jJK(?Fy!%px%?C(X`L>{i!bw+HPL}Xs#R>51y%X!;8_<)Jsu#8U z95aC`i_(4jfmoWd9ZK-)lGz#r5V0&>i?`&wlXJURI++Z#S4y)X&lVAXWvf{s;c|U0 zQ^!|1_4EAly>{9$O1C_-Zq!@nMjuOhbWBws&EA^!PRi`3?=4-Z>9vRNu)|NOb5yrp zd$i-k{l8Gi-{ISbz#rmDw?3jNvW56&RD#mHu@S_|^bv$o-Bjxy5&}IKmZ9)Gj-ODAb`<{g#7(nYo6LYhA z5~G3c8{sC-7t5WJ@KoNYBg?z)`IDB0_oQ*uY*x#L@PNL^{cvlc#5ZKv$8=L+M+SbP zBWT3u)bL4d;W=9Ob}Vx7P3Rb;rQQc^Yi6CF^)SzES>W-)fFRDpISS@oMy)+xgQ#l?gUxEu%l_@yT8|; zZ0W=lQaYj8B7YKXJ$64}PTU)XcC@+KwN@{^I9x}qe)5V>?!u>)le#zU}A|b?w1CNH3j(~V1-$c!{Xu^`{MEXQ_5fNG$cSb z_s8HufS)(R{rnq|{jeWYjAi~+J??m!Ae?9n109~?w~WL<$-aL*S`O;zVb`lf_Ji5=A325co94gj+G z$6fOeSB#~56ANDM;OX-kIxaSY7Q@SVipeI{gro%KgNEHHX1tmK`1W*ZiUXlpgo>U| znodI*%IMkj%=y+piY|k4I)V`Ur;^X&A8PhnF;N0|R`?T&}QA}Hzm^Bj_xBR@6 z{HgT5@$|e10^uX?f}o#!#QZ1wJH;<$c(nBp5xoe_r$^SK>-%*lAO>?YdFUmaS?tc; zM9SaWb&qAQ*R%+LcUD8dOxqls?|sv$K#=!9Mlo{nWr}S8> z)Gn}kl&-iGqpbYwg?7U$yS?-AL*}p9kSC#Pje}UZsSyOq+3-8ZJ2ok*MOw zzxGL4RL}Evt6uO|EDE}|I6d-L(XF*YT+Vp6v$9yjtMuh5)m3K!U&mtwQyyh7w<`QV zD_daep3aS&K{mOCKg)E5X_g}EfGvwSg`q;){9CilsyZ5vJBOn~Pmm~Bn4{BvLDCJ` zoG(3yog86M3a&N=u}!`0HAOjr%KL^gw)KlCcIJnYi8fTabcHf`h`@Zuoyu>1gjcAs zWfU$93y1PXW)`W{&U``=-boBx_3!T17QOc!y{3iQYS|nxV#>axlxCeTtslA)e?ypT z#?o>zRM<;T8T>x|X;Y;b^mrpA7r3gXk^iOb)=RzlJswA-Qj(oq3$vLEYp7Um!Bl(v z`tji5FtL%p92Y|A-J_e02!ElhdPDX1OPav)jbXtr#nK8SwLLgsrok~wYgIK)`M zz@2ahg|~Oy7oMyoe-{6?$57+#gW=>;mHXNfH1vrI;p?9srjEnsBJ?&Tfgu%qevUt6 z8;AN_IbjoPv%ukWi^{o8`PO$M1n?qv%8X;i`A430-)loP+=Am~Ug{tEcrOrYXK1>$Jcp1_fJqFC3ZUf+}2DLwv( z{Hz&6-(+2!D>tP2F?rl<)_hmIG*>R&eq*~l^IqS=zGq%)1Sd%3>Rpr0w`#>UvhnVs zGdcMWTrw@=@6Vmlv@rjm{eS>uHLOQ` z(g7OLl!`rq=7%11%JtG3>+5y~bEwnXamw{|)O|7hMc<%nRmmWw%i`Txk`&uV=gACi zwL4UR!=4uH6Pn6&wU72DBWFeJtSQ~m<5h3oHAqyL?MHv1`1Z$8h-JV9ip|rp@zr}j zE}k%fq6N+`9Ixw>0_;m8qHI&;^_c?V8U2jy)xL}`xg;%D$ z5qC=nQmW4Kwk5K}rTmk7(Z;6{iFXk_`DL=|364M6X0k0*xt+Z19%5fft{xQd^*!EC z@!?7mu{A*gR?G#1_yD>_3Y-zgMK{m;hoZ$rOlr(G1|)4RrwF$$Q$jlQz0Aa4O-NMk ztsCIIJkY?^))tKDZPs0C5^2*nHmx&gw=OLE6l1eVzfcF=ghyz%ch4oE^zp31^W0RG zuA*u^P+(o_c!+@Kd3y<7mNW=8~_BFNt}zn9m)J26c(7b3Qsk^sR_vPL40b% z@{igL0{NR743C_ZSYq4GC|=V#id?4Q8s+O4iau!XhxUXW@p>(=ZZ*ddY%;;GB$Tar zGEb?UkXUW8mH+a4f_)s~M7wB12>kPw00F3Zen;@{TY~2=_WO3);Nh(-OxlsX))4?K zH=x|@N4;%0UwJbX$smtSG^@?Yml=7^EtKE(XJ21$ZZcHl^YecNym@m#IqYTLvdM#d z=wmXtj<`MAk`4|(w4+5N7dRK}N|HbE2a)+@GgOXyhQ}ReEb)QYc!Jd?xIKaPKF<&Y zacAkpI48Jl*Pc=0;>{FY+q2^|1`__<_7?GkWav0{CBk>n_p& literal 0 HcmV?d00001 diff --git a/assets/audio/dictations/ce2_a_a_dictee_03.ogg.import b/assets/audio/dictations/ce2_a_a_dictee_03.ogg.import new file mode 100644 index 0000000..dec1ddc --- /dev/null +++ b/assets/audio/dictations/ce2_a_a_dictee_03.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bg6ibneb5aaiy" +path="res://.godot/imported/ce2_a_a_dictee_03.ogg-80a2255c95c28802233d735380aad83f.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/dictations/ce2_a_a_dictee_03.ogg" +dest_files=["res://.godot/imported/ce2_a_a_dictee_03.ogg-80a2255c95c28802233d735380aad83f.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/dictations/ce2_et_est_dictee_01.ogg b/assets/audio/dictations/ce2_et_est_dictee_01.ogg new file mode 100644 index 0000000000000000000000000000000000000000..68f237c0a17855e4c44d68231f00d42989f471cf GIT binary patch literal 11311 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 literal 0 HcmV?d00001 diff --git a/assets/audio/dictations/ce2_et_est_dictee_01.ogg.import b/assets/audio/dictations/ce2_et_est_dictee_01.ogg.import new file mode 100644 index 0000000..967f547 --- /dev/null +++ b/assets/audio/dictations/ce2_et_est_dictee_01.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://c054inea2nemu" +path="res://.godot/imported/ce2_et_est_dictee_01.ogg-0a747dd75ce3de470d038d5249d93be6.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/dictations/ce2_et_est_dictee_01.ogg" +dest_files=["res://.godot/imported/ce2_et_est_dictee_01.ogg-0a747dd75ce3de470d038d5249d93be6.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/dictations/ce2_et_est_dictee_02.ogg b/assets/audio/dictations/ce2_et_est_dictee_02.ogg new file mode 100644 index 0000000000000000000000000000000000000000..85032a75f5a03f21e018a5833b6fbf2ec2055542 GIT binary patch literal 15710 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 literal 0 HcmV?d00001 diff --git a/assets/audio/dictations/ce2_et_est_dictee_03.ogg.import b/assets/audio/dictations/ce2_et_est_dictee_03.ogg.import new file mode 100644 index 0000000..f01cacf --- /dev/null +++ b/assets/audio/dictations/ce2_et_est_dictee_03.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cra7otuuf1km3" +path="res://.godot/imported/ce2_et_est_dictee_03.ogg-bb5fadb44e691dfe913e94cd201c004d.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/dictations/ce2_et_est_dictee_03.ogg" +dest_files=["res://.godot/imported/ce2_et_est_dictee_03.ogg-bb5fadb44e691dfe913e94cd201c004d.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/dictations/ce2_on_ont_dictee_01.ogg b/assets/audio/dictations/ce2_on_ont_dictee_01.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5e371305429a3a17b5e81dbc69346d286a06068c GIT binary patch literal 9434 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 literal 0 HcmV?d00001 diff --git a/assets/audio/dictations/ce2_on_ont_dictee_02.ogg.import b/assets/audio/dictations/ce2_on_ont_dictee_02.ogg.import new file mode 100644 index 0000000..833d038 --- /dev/null +++ b/assets/audio/dictations/ce2_on_ont_dictee_02.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bd8dacvr2g65k" +path="res://.godot/imported/ce2_on_ont_dictee_02.ogg-35c46d7ff9cad84a68318b3927056213.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/dictations/ce2_on_ont_dictee_02.ogg" +dest_files=["res://.godot/imported/ce2_on_ont_dictee_02.ogg-35c46d7ff9cad84a68318b3927056213.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/dictations/ce2_on_ont_dictee_03.ogg b/assets/audio/dictations/ce2_on_ont_dictee_03.ogg new file mode 100644 index 0000000000000000000000000000000000000000..61e7339d0322c7e70892244d4c0b02f29f3aac72 GIT binary patch literal 20060 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 literal 0 HcmV?d00001 diff --git a/assets/audio/dictations/ce2_son_sont_dictee_02.ogg.import b/assets/audio/dictations/ce2_son_sont_dictee_02.ogg.import new file mode 100644 index 0000000..12db1f8 --- /dev/null +++ b/assets/audio/dictations/ce2_son_sont_dictee_02.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://biadxbqjmyiy5" +path="res://.godot/imported/ce2_son_sont_dictee_02.ogg-9834d789d13a637e16ac2a3b23a088b2.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/dictations/ce2_son_sont_dictee_02.ogg" +dest_files=["res://.godot/imported/ce2_son_sont_dictee_02.ogg-9834d789d13a637e16ac2a3b23a088b2.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/dictations/ce2_son_sont_dictee_03.ogg b/assets/audio/dictations/ce2_son_sont_dictee_03.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f92f0556c93ff1747ed1f0e8aeebeae8bb2f6c8b GIT binary patch literal 18507 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 literal 0 HcmV?d00001 diff --git a/assets/audio/dictations/ce2_son_sont_dictee_03.ogg.import b/assets/audio/dictations/ce2_son_sont_dictee_03.ogg.import new file mode 100644 index 0000000..171da4d --- /dev/null +++ b/assets/audio/dictations/ce2_son_sont_dictee_03.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dw86r4ojpclqe" +path="res://.godot/imported/ce2_son_sont_dictee_03.ogg-ba13de9e25817aaee2363e5c935ace5f.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/dictations/ce2_son_sont_dictee_03.ogg" +dest_files=["res://.godot/imported/ce2_son_sont_dictee_03.ogg-ba13de9e25817aaee2363e5c935ace5f.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/autoload/exercise_engine.gd b/autoload/exercise_engine.gd index 0f6bf4a..db1f1f0 100644 --- a/autoload/exercise_engine.gd +++ b/autoload/exercise_engine.gd @@ -34,6 +34,16 @@ func get_missions() -> Array[Dictionary]: return missions +## Missions dont la regle appartient au niveau scolaire demande (le niveau +## d'une mission est celui de sa regle, pas un champ de plus a tenir a jour). +func get_missions_for_level(level: String) -> Array[Dictionary]: + var missions: Array[Dictionary] = [] + for mission in get_missions(): + if get_rule(mission["rule_id"]).get("level", "") == level: + missions.append(mission) + return missions + + func get_mission(mission_id: String) -> Dictionary: return _missions.get(mission_id, {}) diff --git a/autoload/progress_manager.gd b/autoload/progress_manager.gd index 8a623e9..9748e3c 100644 --- a/autoload/progress_manager.gd +++ b/autoload/progress_manager.gd @@ -54,6 +54,11 @@ func get_skill_state(skill_id: String) -> Dictionary: return skills.get(skill_id, ReviewScheduler.initial_state()) +## Niveau scolaire du profil courant ("CE1" par defaut si aucun profil charge). +func school_level() -> String: + return _current_save.get("school_level", "CE1") + + func current_save() -> Dictionary: return _current_save diff --git a/data/curriculum/ce2_homophones_grammaticaux.json b/data/curriculum/ce2_homophones_grammaticaux.json new file mode 100644 index 0000000..726a165 --- /dev/null +++ b/data/curriculum/ce2_homophones_grammaticaux.json @@ -0,0 +1,13 @@ +{ + "level": "CE2", + "region_id": "marais_des_homophones", + "chapter_id": "homophones_grammaticaux", + "title": "Les homophones grammaticaux", + "rule_ids": [ + "regle_homophone_a_a", + "regle_homophone_et_est", + "regle_homophone_son_sont", + "regle_homophone_on_ont" + ], + "review_status": "draft" +} diff --git a/data/dictations/ce2_a_a_dictee_01.json b/data/dictations/ce2_a_a_dictee_01.json new file mode 100644 index 0000000..a84ee30 --- /dev/null +++ b/data/dictations/ce2_a_a_dictee_01.json @@ -0,0 +1,30 @@ +{ + "id": "ce2_a_a_dictee_01", + "level": "CE2", + "domain": "orthographe", + "rule_ids": [ + "regle_homophone_a_a" + ], + "difficulty": 1, + "target_text": "Léa a un chat.", + "words": [ + { + "text": "Léa", + "expects_capital": true + }, + { + "text": "a", + "rule_id": "regle_homophone_a_a" + }, + { + "text": "un" + }, + { + "text": "chat." + } + ], + "audio_id": "ce2_a_a_dictee_01", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce2_a_a_dictee_02.json b/data/dictations/ce2_a_a_dictee_02.json new file mode 100644 index 0000000..902aa2a --- /dev/null +++ b/data/dictations/ce2_a_a_dictee_02.json @@ -0,0 +1,33 @@ +{ + "id": "ce2_a_a_dictee_02", + "level": "CE2", + "domain": "orthographe", + "rule_ids": [ + "regle_homophone_a_a" + ], + "difficulty": 2, + "target_text": "Nous allons à la piscine.", + "words": [ + { + "text": "Nous", + "expects_capital": true + }, + { + "text": "allons" + }, + { + "text": "à", + "rule_id": "regle_homophone_a_a" + }, + { + "text": "la" + }, + { + "text": "piscine." + } + ], + "audio_id": "ce2_a_a_dictee_02", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce2_a_a_dictee_03.json b/data/dictations/ce2_a_a_dictee_03.json new file mode 100644 index 0000000..278d045 --- /dev/null +++ b/data/dictations/ce2_a_a_dictee_03.json @@ -0,0 +1,40 @@ +{ + "id": "ce2_a_a_dictee_03", + "level": "CE2", + "domain": "orthographe", + "rule_ids": [ + "regle_homophone_a_a" + ], + "difficulty": 3, + "target_text": "Papa a donné un cadeau à Léa.", + "words": [ + { + "text": "Papa", + "expects_capital": true + }, + { + "text": "a", + "rule_id": "regle_homophone_a_a" + }, + { + "text": "donné" + }, + { + "text": "un" + }, + { + "text": "cadeau" + }, + { + "text": "à", + "rule_id": "regle_homophone_a_a" + }, + { + "text": "Léa." + } + ], + "audio_id": "ce2_a_a_dictee_03", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce2_et_est_dictee_01.json b/data/dictations/ce2_et_est_dictee_01.json new file mode 100644 index 0000000..f34a315 --- /dev/null +++ b/data/dictations/ce2_et_est_dictee_01.json @@ -0,0 +1,30 @@ +{ + "id": "ce2_et_est_dictee_01", + "level": "CE2", + "domain": "orthographe", + "rule_ids": [ + "regle_homophone_et_est" + ], + "difficulty": 1, + "target_text": "Le chat est noir.", + "words": [ + { + "text": "Le", + "expects_capital": true + }, + { + "text": "chat" + }, + { + "text": "est", + "rule_id": "regle_homophone_et_est" + }, + { + "text": "noir." + } + ], + "audio_id": "ce2_et_est_dictee_01", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce2_et_est_dictee_02.json b/data/dictations/ce2_et_est_dictee_02.json new file mode 100644 index 0000000..1d833a9 --- /dev/null +++ b/data/dictations/ce2_et_est_dictee_02.json @@ -0,0 +1,33 @@ +{ + "id": "ce2_et_est_dictee_02", + "level": "CE2", + "domain": "orthographe", + "rule_ids": [ + "regle_homophone_et_est" + ], + "difficulty": 2, + "target_text": "Paul et Marie jouent ensemble.", + "words": [ + { + "text": "Paul", + "expects_capital": true + }, + { + "text": "et", + "rule_id": "regle_homophone_et_est" + }, + { + "text": "Marie" + }, + { + "text": "jouent" + }, + { + "text": "ensemble." + } + ], + "audio_id": "ce2_et_est_dictee_02", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce2_et_est_dictee_03.json b/data/dictations/ce2_et_est_dictee_03.json new file mode 100644 index 0000000..8dbc802 --- /dev/null +++ b/data/dictations/ce2_et_est_dictee_03.json @@ -0,0 +1,37 @@ +{ + "id": "ce2_et_est_dictee_03", + "level": "CE2", + "domain": "orthographe", + "rule_ids": [ + "regle_homophone_et_est" + ], + "difficulty": 3, + "target_text": "Mon frère est petit et blond.", + "words": [ + { + "text": "Mon", + "expects_capital": true + }, + { + "text": "frère" + }, + { + "text": "est", + "rule_id": "regle_homophone_et_est" + }, + { + "text": "petit" + }, + { + "text": "et", + "rule_id": "regle_homophone_et_est" + }, + { + "text": "blond." + } + ], + "audio_id": "ce2_et_est_dictee_03", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce2_on_ont_dictee_01.json b/data/dictations/ce2_on_ont_dictee_01.json new file mode 100644 index 0000000..4b243ba --- /dev/null +++ b/data/dictations/ce2_on_ont_dictee_01.json @@ -0,0 +1,27 @@ +{ + "id": "ce2_on_ont_dictee_01", + "level": "CE2", + "domain": "orthographe", + "rule_ids": [ + "regle_homophone_on_ont" + ], + "difficulty": 1, + "target_text": "On joue dehors.", + "words": [ + { + "text": "On", + "expects_capital": true, + "rule_id": "regle_homophone_on_ont" + }, + { + "text": "joue" + }, + { + "text": "dehors." + } + ], + "audio_id": "ce2_on_ont_dictee_01", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce2_on_ont_dictee_02.json b/data/dictations/ce2_on_ont_dictee_02.json new file mode 100644 index 0000000..1bf5c99 --- /dev/null +++ b/data/dictations/ce2_on_ont_dictee_02.json @@ -0,0 +1,30 @@ +{ + "id": "ce2_on_ont_dictee_02", + "level": "CE2", + "domain": "orthographe", + "rule_ids": [ + "regle_homophone_on_ont" + ], + "difficulty": 2, + "target_text": "Les enfants ont faim.", + "words": [ + { + "text": "Les", + "expects_capital": true + }, + { + "text": "enfants" + }, + { + "text": "ont", + "rule_id": "regle_homophone_on_ont" + }, + { + "text": "faim." + } + ], + "audio_id": "ce2_on_ont_dictee_02", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce2_on_ont_dictee_03.json b/data/dictations/ce2_on_ont_dictee_03.json new file mode 100644 index 0000000..9e2ded6 --- /dev/null +++ b/data/dictations/ce2_on_ont_dictee_03.json @@ -0,0 +1,46 @@ +{ + "id": "ce2_on_ont_dictee_03", + "level": "CE2", + "domain": "orthographe", + "rule_ids": [ + "regle_homophone_on_ont" + ], + "difficulty": 3, + "target_text": "Les enfants ont sommeil et on lit une histoire.", + "words": [ + { + "text": "Les", + "expects_capital": true + }, + { + "text": "enfants" + }, + { + "text": "ont", + "rule_id": "regle_homophone_on_ont" + }, + { + "text": "sommeil" + }, + { + "text": "et" + }, + { + "text": "on", + "rule_id": "regle_homophone_on_ont" + }, + { + "text": "lit" + }, + { + "text": "une" + }, + { + "text": "histoire." + } + ], + "audio_id": "ce2_on_ont_dictee_03", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce2_son_sont_dictee_01.json b/data/dictations/ce2_son_sont_dictee_01.json new file mode 100644 index 0000000..c45c99b --- /dev/null +++ b/data/dictations/ce2_son_sont_dictee_01.json @@ -0,0 +1,30 @@ +{ + "id": "ce2_son_sont_dictee_01", + "level": "CE2", + "domain": "orthographe", + "rule_ids": [ + "regle_homophone_son_sont" + ], + "difficulty": 1, + "target_text": "Les chats sont gentils.", + "words": [ + { + "text": "Les", + "expects_capital": true + }, + { + "text": "chats" + }, + { + "text": "sont", + "rule_id": "regle_homophone_son_sont" + }, + { + "text": "gentils." + } + ], + "audio_id": "ce2_son_sont_dictee_01", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce2_son_sont_dictee_02.json b/data/dictations/ce2_son_sont_dictee_02.json new file mode 100644 index 0000000..a9ec8f7 --- /dev/null +++ b/data/dictations/ce2_son_sont_dictee_02.json @@ -0,0 +1,30 @@ +{ + "id": "ce2_son_sont_dictee_02", + "level": "CE2", + "domain": "orthographe", + "rule_ids": [ + "regle_homophone_son_sont" + ], + "difficulty": 2, + "target_text": "Paul range son cartable.", + "words": [ + { + "text": "Paul", + "expects_capital": true + }, + { + "text": "range" + }, + { + "text": "son", + "rule_id": "regle_homophone_son_sont" + }, + { + "text": "cartable." + } + ], + "audio_id": "ce2_son_sont_dictee_02", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce2_son_sont_dictee_03.json b/data/dictations/ce2_son_sont_dictee_03.json new file mode 100644 index 0000000..44c65d0 --- /dev/null +++ b/data/dictations/ce2_son_sont_dictee_03.json @@ -0,0 +1,40 @@ +{ + "id": "ce2_son_sont_dictee_03", + "level": "CE2", + "domain": "orthographe", + "rule_ids": [ + "regle_homophone_son_sont" + ], + "difficulty": 3, + "target_text": "Léa et Paul sont dans son jardin.", + "words": [ + { + "text": "Léa", + "expects_capital": true + }, + { + "text": "et" + }, + { + "text": "Paul" + }, + { + "text": "sont", + "rule_id": "regle_homophone_son_sont" + }, + { + "text": "dans" + }, + { + "text": "son", + "rule_id": "regle_homophone_son_sont" + }, + { + "text": "jardin." + } + ], + "audio_id": "ce2_son_sont_dictee_03", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_a_a_correction_01.json b/data/exercises/ce2/ce2_a_a_correction_01.json new file mode 100644 index 0000000..81bb917 --- /dev/null +++ b/data/exercises/ce2/ce2_a_a_correction_01.json @@ -0,0 +1,45 @@ +{ + "id": "ce2_a_a_correction_01", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_a_a", + "difficulty": 1, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Le", + "correct": true + }, + { + "text": "chat", + "correct": true + }, + { + "text": "à", + "correct": false, + "expected": "a", + "rule_id": "regle_homophone_a_a" + }, + { + "text": "faim", + "correct": true + }, + { + "text": "ce", + "correct": true + }, + { + "text": "soir.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « avait ».", + "explanation": "« avait » convient ici : c'est le verbe avoir, on écrit « a » sans accent.", + "review_tags": [ + "homophone", + "a_a" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_a_a_correction_02.json b/data/exercises/ce2/ce2_a_a_correction_02.json new file mode 100644 index 0000000..b37241a --- /dev/null +++ b/data/exercises/ce2/ce2_a_a_correction_02.json @@ -0,0 +1,41 @@ +{ + "id": "ce2_a_a_correction_02", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_a_a", + "difficulty": 1, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Nous", + "correct": true + }, + { + "text": "allons", + "correct": true + }, + { + "text": "a", + "correct": false, + "expected": "à", + "rule_id": "regle_homophone_a_a" + }, + { + "text": "la", + "correct": true + }, + { + "text": "piscine.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « avait ».", + "explanation": "« avait » ne convient pas ici : c'est le petit mot « à », avec un accent.", + "review_tags": [ + "homophone", + "a_a" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_a_a_correction_03.json b/data/exercises/ce2/ce2_a_a_correction_03.json new file mode 100644 index 0000000..0839f4a --- /dev/null +++ b/data/exercises/ce2/ce2_a_a_correction_03.json @@ -0,0 +1,45 @@ +{ + "id": "ce2_a_a_correction_03", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_a_a", + "difficulty": 2, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Mon", + "correct": true + }, + { + "text": "voisin", + "correct": true + }, + { + "text": "à", + "correct": false, + "expected": "a", + "rule_id": "regle_homophone_a_a" + }, + { + "text": "un", + "correct": true + }, + { + "text": "grand", + "correct": true + }, + { + "text": "jardin.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « avait ».", + "explanation": "« avait » convient ici : c'est le verbe avoir, on écrit « a » sans accent.", + "review_tags": [ + "homophone", + "a_a" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_a_a_correction_04.json b/data/exercises/ce2/ce2_a_a_correction_04.json new file mode 100644 index 0000000..399a7e3 --- /dev/null +++ b/data/exercises/ce2/ce2_a_a_correction_04.json @@ -0,0 +1,49 @@ +{ + "id": "ce2_a_a_correction_04", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_a_a", + "difficulty": 3, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Marie", + "correct": true + }, + { + "text": "pense", + "correct": true + }, + { + "text": "a", + "correct": false, + "expected": "à", + "rule_id": "regle_homophone_a_a" + }, + { + "text": "son", + "correct": true + }, + { + "text": "ami", + "correct": true + }, + { + "text": "depuis", + "correct": true + }, + { + "text": "hier.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « avait ». Relis la phrase en entier avant d'essayer.", + "explanation": "« avait » ne convient pas ici : c'est le petit mot « à », avec un accent.", + "review_tags": [ + "homophone", + "a_a" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_a_a_qcm_01.json b/data/exercises/ce2/ce2_a_a_qcm_01.json new file mode 100644 index 0000000..72c5c5b --- /dev/null +++ b/data/exercises/ce2/ce2_a_a_qcm_01.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_a_a_qcm_01", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_a_a", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Léa ... un chat.", + "answers": [ + "a", + "à" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « avait ».", + "explanation": "« avait » convient ici : c'est le verbe avoir, on écrit « a » sans accent.", + "review_tags": [ + "homophone", + "a_a" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_a_a_qcm_02.json b/data/exercises/ce2/ce2_a_a_qcm_02.json new file mode 100644 index 0000000..578ea1c --- /dev/null +++ b/data/exercises/ce2/ce2_a_a_qcm_02.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_a_a_qcm_02", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_a_a", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Nous allons ... la plage.", + "answers": [ + "a", + "à" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « avait ».", + "explanation": "« avait » ne convient pas ici : c'est le petit mot « à », avec un accent.", + "review_tags": [ + "homophone", + "a_a" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_a_a_qcm_03.json b/data/exercises/ce2/ce2_a_a_qcm_03.json new file mode 100644 index 0000000..49b6d67 --- /dev/null +++ b/data/exercises/ce2/ce2_a_a_qcm_03.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_a_a_qcm_03", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_a_a", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Le chien ... faim.", + "answers": [ + "a", + "à" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « avait ».", + "explanation": "« avait » convient ici : c'est le verbe avoir, on écrit « a » sans accent.", + "review_tags": [ + "homophone", + "a_a" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_a_a_qcm_04.json b/data/exercises/ce2/ce2_a_a_qcm_04.json new file mode 100644 index 0000000..2b7ae06 --- /dev/null +++ b/data/exercises/ce2/ce2_a_a_qcm_04.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_a_a_qcm_04", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_a_a", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Tom joue ... la balle.", + "answers": [ + "a", + "à" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « avait ».", + "explanation": "« avait » ne convient pas ici : c'est le petit mot « à », avec un accent.", + "review_tags": [ + "homophone", + "a_a" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_a_a_qcm_05.json b/data/exercises/ce2/ce2_a_a_qcm_05.json new file mode 100644 index 0000000..2473c10 --- /dev/null +++ b/data/exercises/ce2/ce2_a_a_qcm_05.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_a_a_qcm_05", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_a_a", + "difficulty": 2, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Mon frère ... un vélo rouge.", + "answers": [ + "a", + "à" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « avait ».", + "explanation": "« avait » convient ici : c'est le verbe avoir, on écrit « a » sans accent.", + "review_tags": [ + "homophone", + "a_a" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_a_a_qcm_06.json b/data/exercises/ce2/ce2_a_a_qcm_06.json new file mode 100644 index 0000000..0809bcc --- /dev/null +++ b/data/exercises/ce2/ce2_a_a_qcm_06.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_a_a_qcm_06", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_a_a", + "difficulty": 2, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Elle donne un bonbon ... sa sœur.", + "answers": [ + "a", + "à" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « avait ».", + "explanation": "« avait » ne convient pas ici : c'est le petit mot « à », avec un accent.", + "review_tags": [ + "homophone", + "a_a" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_a_a_qcm_07.json b/data/exercises/ce2/ce2_a_a_qcm_07.json new file mode 100644 index 0000000..bc5e34a --- /dev/null +++ b/data/exercises/ce2/ce2_a_a_qcm_07.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_a_a_qcm_07", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_a_a", + "difficulty": 3, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Ma sœur ... mangé toute la tarte.", + "answers": [ + "a", + "à" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « avait ». Relis la phrase en entier avant d'essayer.", + "explanation": "« avait » convient ici : c'est le verbe avoir, on écrit « a » sans accent.", + "review_tags": [ + "homophone", + "a_a" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_a_a_qcm_08.json b/data/exercises/ce2/ce2_a_a_qcm_08.json new file mode 100644 index 0000000..dfc219e --- /dev/null +++ b/data/exercises/ce2/ce2_a_a_qcm_08.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_a_a_qcm_08", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_a_a", + "difficulty": 3, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Il commence ... lire un livre.", + "answers": [ + "a", + "à" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « avait ». Relis la phrase en entier avant d'essayer.", + "explanation": "« avait » ne convient pas ici : c'est le petit mot « à », avec un accent.", + "review_tags": [ + "homophone", + "a_a" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_et_est_correction_01.json b/data/exercises/ce2/ce2_et_est_correction_01.json new file mode 100644 index 0000000..d40a124 --- /dev/null +++ b/data/exercises/ce2/ce2_et_est_correction_01.json @@ -0,0 +1,45 @@ +{ + "id": "ce2_et_est_correction_01", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_et_est", + "difficulty": 1, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Le", + "correct": true + }, + { + "text": "chien", + "correct": true + }, + { + "text": "et", + "correct": false, + "expected": "est", + "rule_id": "regle_homophone_et_est" + }, + { + "text": "gentil", + "correct": true + }, + { + "text": "avec", + "correct": true + }, + { + "text": "moi.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « était ».", + "explanation": "« était » convient ici : c'est le verbe être, on écrit « est ».", + "review_tags": [ + "homophone", + "et_est" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_et_est_correction_02.json b/data/exercises/ce2/ce2_et_est_correction_02.json new file mode 100644 index 0000000..9dd8b9f --- /dev/null +++ b/data/exercises/ce2/ce2_et_est_correction_02.json @@ -0,0 +1,41 @@ +{ + "id": "ce2_et_est_correction_02", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_et_est", + "difficulty": 1, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Paul", + "correct": true + }, + { + "text": "est", + "correct": false, + "expected": "et", + "rule_id": "regle_homophone_et_est" + }, + { + "text": "Marie", + "correct": true + }, + { + "text": "jouent", + "correct": true + }, + { + "text": "ensemble.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « était ».", + "explanation": "« était » ne convient pas ici, mais « et puis » convient : c'est « et », qui relie deux mots.", + "review_tags": [ + "homophone", + "et_est" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_et_est_correction_03.json b/data/exercises/ce2/ce2_et_est_correction_03.json new file mode 100644 index 0000000..89eafbb --- /dev/null +++ b/data/exercises/ce2/ce2_et_est_correction_03.json @@ -0,0 +1,53 @@ +{ + "id": "ce2_et_est_correction_03", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_et_est", + "difficulty": 2, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Ma", + "correct": true + }, + { + "text": "sœur", + "correct": true + }, + { + "text": "et", + "correct": false, + "expected": "est", + "rule_id": "regle_homophone_et_est" + }, + { + "text": "très", + "correct": true + }, + { + "text": "fière", + "correct": true + }, + { + "text": "de", + "correct": true + }, + { + "text": "son", + "correct": true + }, + { + "text": "dessin.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « était ».", + "explanation": "« était » convient ici : c'est le verbe être, on écrit « est ».", + "review_tags": [ + "homophone", + "et_est" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_et_est_correction_04.json b/data/exercises/ce2/ce2_et_est_correction_04.json new file mode 100644 index 0000000..2c99f00 --- /dev/null +++ b/data/exercises/ce2/ce2_et_est_correction_04.json @@ -0,0 +1,53 @@ +{ + "id": "ce2_et_est_correction_04", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_et_est", + "difficulty": 3, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Le", + "correct": true + }, + { + "text": "lapin", + "correct": true + }, + { + "text": "mange", + "correct": true + }, + { + "text": "une", + "correct": true + }, + { + "text": "carotte", + "correct": true + }, + { + "text": "est", + "correct": false, + "expected": "et", + "rule_id": "regle_homophone_et_est" + }, + { + "text": "un", + "correct": true + }, + { + "text": "chou.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « était ». Relis la phrase en entier avant d'essayer.", + "explanation": "« était » ne convient pas ici, mais « et puis » convient : c'est « et », qui relie deux mots.", + "review_tags": [ + "homophone", + "et_est" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_et_est_qcm_01.json b/data/exercises/ce2/ce2_et_est_qcm_01.json new file mode 100644 index 0000000..a84309f --- /dev/null +++ b/data/exercises/ce2/ce2_et_est_qcm_01.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_et_est_qcm_01", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_et_est", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Le chat ... noir.", + "answers": [ + "et", + "est" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « était ».", + "explanation": "« était » convient ici : c'est le verbe être, on écrit « est ».", + "review_tags": [ + "homophone", + "et_est" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_et_est_qcm_02.json b/data/exercises/ce2/ce2_et_est_qcm_02.json new file mode 100644 index 0000000..1f6778a --- /dev/null +++ b/data/exercises/ce2/ce2_et_est_qcm_02.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_et_est_qcm_02", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_et_est", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Un chat ... un chien jouent.", + "answers": [ + "et", + "est" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « était ».", + "explanation": "« était » ne convient pas ici, mais « et puis » convient : c'est « et », qui relie deux mots.", + "review_tags": [ + "homophone", + "et_est" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_et_est_qcm_03.json b/data/exercises/ce2/ce2_et_est_qcm_03.json new file mode 100644 index 0000000..060bccd --- /dev/null +++ b/data/exercises/ce2/ce2_et_est_qcm_03.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_et_est_qcm_03", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_et_est", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Ma maison ... grande.", + "answers": [ + "et", + "est" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « était ».", + "explanation": "« était » convient ici : c'est le verbe être, on écrit « est ».", + "review_tags": [ + "homophone", + "et_est" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_et_est_qcm_04.json b/data/exercises/ce2/ce2_et_est_qcm_04.json new file mode 100644 index 0000000..3cf65ba --- /dev/null +++ b/data/exercises/ce2/ce2_et_est_qcm_04.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_et_est_qcm_04", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_et_est", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Je mange du pain ... du fromage.", + "answers": [ + "et", + "est" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « était ».", + "explanation": "« était » ne convient pas ici, mais « et puis » convient : c'est « et », qui relie deux mots.", + "review_tags": [ + "homophone", + "et_est" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_et_est_qcm_05.json b/data/exercises/ce2/ce2_et_est_qcm_05.json new file mode 100644 index 0000000..b3acff1 --- /dev/null +++ b/data/exercises/ce2/ce2_et_est_qcm_05.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_et_est_qcm_05", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_et_est", + "difficulty": 2, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Papa ... maman sont partis.", + "answers": [ + "et", + "est" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « était ».", + "explanation": "« était » ne convient pas ici, mais « et puis » convient : c'est « et », qui relie deux mots.", + "review_tags": [ + "homophone", + "et_est" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_et_est_qcm_06.json b/data/exercises/ce2/ce2_et_est_qcm_06.json new file mode 100644 index 0000000..7f532f3 --- /dev/null +++ b/data/exercises/ce2/ce2_et_est_qcm_06.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_et_est_qcm_06", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_et_est", + "difficulty": 2, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Le gâteau ... sur la table.", + "answers": [ + "et", + "est" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « était ».", + "explanation": "« était » convient ici : c'est le verbe être, on écrit « est ».", + "review_tags": [ + "homophone", + "et_est" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_et_est_qcm_07.json b/data/exercises/ce2/ce2_et_est_qcm_07.json new file mode 100644 index 0000000..fc2ee4d --- /dev/null +++ b/data/exercises/ce2/ce2_et_est_qcm_07.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_et_est_qcm_07", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_et_est", + "difficulty": 3, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Mon petit frère ... très content de son cadeau.", + "answers": [ + "et", + "est" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « était ». Relis la phrase en entier avant d'essayer.", + "explanation": "« était » convient ici : c'est le verbe être, on écrit « est ».", + "review_tags": [ + "homophone", + "et_est" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_et_est_qcm_08.json b/data/exercises/ce2/ce2_et_est_qcm_08.json new file mode 100644 index 0000000..7aebbd9 --- /dev/null +++ b/data/exercises/ce2/ce2_et_est_qcm_08.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_et_est_qcm_08", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_et_est", + "difficulty": 3, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Le chat dort sur le canapé ... le chien dort sur le tapis.", + "answers": [ + "et", + "est" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « était ». Relis la phrase en entier avant d'essayer.", + "explanation": "« était » ne convient pas ici, mais « et puis » convient : c'est « et », qui relie deux mots.", + "review_tags": [ + "homophone", + "et_est" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_on_ont_correction_01.json b/data/exercises/ce2/ce2_on_ont_correction_01.json new file mode 100644 index 0000000..986016a --- /dev/null +++ b/data/exercises/ce2/ce2_on_ont_correction_01.json @@ -0,0 +1,45 @@ +{ + "id": "ce2_on_ont_correction_01", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_on_ont", + "difficulty": 1, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Les", + "correct": true + }, + { + "text": "chats", + "correct": true + }, + { + "text": "on", + "correct": false, + "expected": "ont", + "rule_id": "regle_homophone_on_ont" + }, + { + "text": "peur", + "correct": true + }, + { + "text": "du", + "correct": true + }, + { + "text": "chien.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « avaient », ou par « il ».", + "explanation": "« avaient » convient ici : c'est le verbe avoir, on écrit « ont ».", + "review_tags": [ + "homophone", + "on_ont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_on_ont_correction_02.json b/data/exercises/ce2/ce2_on_ont_correction_02.json new file mode 100644 index 0000000..db85e5d --- /dev/null +++ b/data/exercises/ce2/ce2_on_ont_correction_02.json @@ -0,0 +1,41 @@ +{ + "id": "ce2_on_ont_correction_02", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_on_ont", + "difficulty": 1, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Ont", + "correct": false, + "expected": "On", + "rule_id": "regle_homophone_on_ont" + }, + { + "text": "joue", + "correct": true + }, + { + "text": "dans", + "correct": true + }, + { + "text": "la", + "correct": true + }, + { + "text": "cour.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « avaient », ou par « il ».", + "explanation": "« avaient » ne convient pas ici, mais « il » convient : c'est le pronom « on ».", + "review_tags": [ + "homophone", + "on_ont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_on_ont_correction_03.json b/data/exercises/ce2/ce2_on_ont_correction_03.json new file mode 100644 index 0000000..8a77b9d --- /dev/null +++ b/data/exercises/ce2/ce2_on_ont_correction_03.json @@ -0,0 +1,45 @@ +{ + "id": "ce2_on_ont_correction_03", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_on_ont", + "difficulty": 2, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Mes", + "correct": true + }, + { + "text": "cousins", + "correct": true + }, + { + "text": "on", + "correct": false, + "expected": "ont", + "rule_id": "regle_homophone_on_ont" + }, + { + "text": "un", + "correct": true + }, + { + "text": "grand", + "correct": true + }, + { + "text": "chien.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « avaient », ou par « il ».", + "explanation": "« avaient » convient ici : c'est le verbe avoir, on écrit « ont ».", + "review_tags": [ + "homophone", + "on_ont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_on_ont_correction_04.json b/data/exercises/ce2/ce2_on_ont_correction_04.json new file mode 100644 index 0000000..e8ef06b --- /dev/null +++ b/data/exercises/ce2/ce2_on_ont_correction_04.json @@ -0,0 +1,57 @@ +{ + "id": "ce2_on_ont_correction_04", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_on_ont", + "difficulty": 3, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Le", + "correct": true + }, + { + "text": "soir,", + "correct": true + }, + { + "text": "ont", + "correct": false, + "expected": "on", + "rule_id": "regle_homophone_on_ont" + }, + { + "text": "lit", + "correct": true + }, + { + "text": "une", + "correct": true + }, + { + "text": "histoire", + "correct": true + }, + { + "text": "à", + "correct": true + }, + { + "text": "la", + "correct": true + }, + { + "text": "maison.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « avaient », ou par « il ». Relis la phrase en entier avant d'essayer.", + "explanation": "« avaient » ne convient pas ici, mais « il » convient : c'est le pronom « on ».", + "review_tags": [ + "homophone", + "on_ont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_on_ont_qcm_01.json b/data/exercises/ce2/ce2_on_ont_qcm_01.json new file mode 100644 index 0000000..1c4825a --- /dev/null +++ b/data/exercises/ce2/ce2_on_ont_qcm_01.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_on_ont_qcm_01", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_on_ont", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "... joue dehors.", + "answers": [ + "On", + "Ont" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « avaient », ou par « il ».", + "explanation": "« avaient » ne convient pas ici, mais « il » convient : c'est le pronom « on ».", + "review_tags": [ + "homophone", + "on_ont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_on_ont_qcm_02.json b/data/exercises/ce2/ce2_on_ont_qcm_02.json new file mode 100644 index 0000000..e493fe5 --- /dev/null +++ b/data/exercises/ce2/ce2_on_ont_qcm_02.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_on_ont_qcm_02", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_on_ont", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Les enfants ... faim.", + "answers": [ + "on", + "ont" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « avaient », ou par « il ».", + "explanation": "« avaient » convient ici : c'est le verbe avoir, on écrit « ont ».", + "review_tags": [ + "homophone", + "on_ont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_on_ont_qcm_03.json b/data/exercises/ce2/ce2_on_ont_qcm_03.json new file mode 100644 index 0000000..c5f3b39 --- /dev/null +++ b/data/exercises/ce2/ce2_on_ont_qcm_03.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_on_ont_qcm_03", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_on_ont", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Ce soir, ... mange des pâtes.", + "answers": [ + "on", + "ont" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « avaient », ou par « il ».", + "explanation": "« avaient » ne convient pas ici, mais « il » convient : c'est le pronom « on ».", + "review_tags": [ + "homophone", + "on_ont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_on_ont_qcm_04.json b/data/exercises/ce2/ce2_on_ont_qcm_04.json new file mode 100644 index 0000000..ca82d61 --- /dev/null +++ b/data/exercises/ce2/ce2_on_ont_qcm_04.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_on_ont_qcm_04", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_on_ont", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Les chiens ... soif.", + "answers": [ + "on", + "ont" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « avaient », ou par « il ».", + "explanation": "« avaient » convient ici : c'est le verbe avoir, on écrit « ont ».", + "review_tags": [ + "homophone", + "on_ont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_on_ont_qcm_05.json b/data/exercises/ce2/ce2_on_ont_qcm_05.json new file mode 100644 index 0000000..8b768ab --- /dev/null +++ b/data/exercises/ce2/ce2_on_ont_qcm_05.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_on_ont_qcm_05", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_on_ont", + "difficulty": 2, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Paul et Léa ... un nouveau vélo.", + "answers": [ + "on", + "ont" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « avaient », ou par « il ».", + "explanation": "« avaient » convient ici : c'est le verbe avoir, on écrit « ont ».", + "review_tags": [ + "homophone", + "on_ont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_on_ont_qcm_06.json b/data/exercises/ce2/ce2_on_ont_qcm_06.json new file mode 100644 index 0000000..30a20db --- /dev/null +++ b/data/exercises/ce2/ce2_on_ont_qcm_06.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_on_ont_qcm_06", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_on_ont", + "difficulty": 2, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "À la récréation, ... saute à la corde.", + "answers": [ + "on", + "ont" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « avaient », ou par « il ».", + "explanation": "« avaient » ne convient pas ici, mais « il » convient : c'est le pronom « on ».", + "review_tags": [ + "homophone", + "on_ont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_on_ont_qcm_07.json b/data/exercises/ce2/ce2_on_ont_qcm_07.json new file mode 100644 index 0000000..57bf2c2 --- /dev/null +++ b/data/exercises/ce2/ce2_on_ont_qcm_07.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_on_ont_qcm_07", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_on_ont", + "difficulty": 3, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Les enfants de ma classe ... fini leur travail.", + "answers": [ + "on", + "ont" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « avaient », ou par « il ». Relis la phrase en entier avant d'essayer.", + "explanation": "« avaient » convient ici : c'est le verbe avoir, on écrit « ont ».", + "review_tags": [ + "homophone", + "on_ont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_on_ont_qcm_08.json b/data/exercises/ce2/ce2_on_ont_qcm_08.json new file mode 100644 index 0000000..12f13af --- /dev/null +++ b/data/exercises/ce2/ce2_on_ont_qcm_08.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_on_ont_qcm_08", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_on_ont", + "difficulty": 3, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Quand il pleut, ... reste à la maison.", + "answers": [ + "on", + "ont" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « avaient », ou par « il ». Relis la phrase en entier avant d'essayer.", + "explanation": "« avaient » ne convient pas ici, mais « il » convient : c'est le pronom « on ».", + "review_tags": [ + "homophone", + "on_ont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_son_sont_correction_01.json b/data/exercises/ce2/ce2_son_sont_correction_01.json new file mode 100644 index 0000000..107f3dd --- /dev/null +++ b/data/exercises/ce2/ce2_son_sont_correction_01.json @@ -0,0 +1,45 @@ +{ + "id": "ce2_son_sont_correction_01", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_son_sont", + "difficulty": 1, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Les", + "correct": true + }, + { + "text": "oiseaux", + "correct": true + }, + { + "text": "son", + "correct": false, + "expected": "sont", + "rule_id": "regle_homophone_son_sont" + }, + { + "text": "dans", + "correct": true + }, + { + "text": "le", + "correct": true + }, + { + "text": "nid.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « étaient », ou par « mon ».", + "explanation": "« étaient » convient ici : c'est le verbe être, on écrit « sont ».", + "review_tags": [ + "homophone", + "son_sont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_son_sont_correction_02.json b/data/exercises/ce2/ce2_son_sont_correction_02.json new file mode 100644 index 0000000..896cb38 --- /dev/null +++ b/data/exercises/ce2/ce2_son_sont_correction_02.json @@ -0,0 +1,37 @@ +{ + "id": "ce2_son_sont_correction_02", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_son_sont", + "difficulty": 1, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Paul", + "correct": true + }, + { + "text": "mange", + "correct": true + }, + { + "text": "sont", + "correct": false, + "expected": "son", + "rule_id": "regle_homophone_son_sont" + }, + { + "text": "pain.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « étaient », ou par « mon ».", + "explanation": "« étaient » ne convient pas ici, mais « mon » convient : c'est « son », qui accompagne un nom.", + "review_tags": [ + "homophone", + "son_sont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_son_sont_correction_03.json b/data/exercises/ce2/ce2_son_sont_correction_03.json new file mode 100644 index 0000000..3b2083c --- /dev/null +++ b/data/exercises/ce2/ce2_son_sont_correction_03.json @@ -0,0 +1,45 @@ +{ + "id": "ce2_son_sont_correction_03", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_son_sont", + "difficulty": 2, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Mes", + "correct": true + }, + { + "text": "voisins", + "correct": true + }, + { + "text": "son", + "correct": false, + "expected": "sont", + "rule_id": "regle_homophone_son_sont" + }, + { + "text": "partis", + "correct": true + }, + { + "text": "ce", + "correct": true + }, + { + "text": "matin.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « étaient », ou par « mon ».", + "explanation": "« étaient » convient ici : c'est le verbe être, on écrit « sont ».", + "review_tags": [ + "homophone", + "son_sont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_son_sont_correction_04.json b/data/exercises/ce2/ce2_son_sont_correction_04.json new file mode 100644 index 0000000..83c3531 --- /dev/null +++ b/data/exercises/ce2/ce2_son_sont_correction_04.json @@ -0,0 +1,49 @@ +{ + "id": "ce2_son_sont_correction_04", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_son_sont", + "difficulty": 3, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Ma", + "correct": true + }, + { + "text": "sœur", + "correct": true + }, + { + "text": "cherche", + "correct": true + }, + { + "text": "sont", + "correct": false, + "expected": "son", + "rule_id": "regle_homophone_son_sont" + }, + { + "text": "petit", + "correct": true + }, + { + "text": "chien", + "correct": true + }, + { + "text": "noir.", + "correct": true + } + ], + "hint": "Essaie de remplacer par « étaient », ou par « mon ». Relis la phrase en entier avant d'essayer.", + "explanation": "« étaient » ne convient pas ici, mais « mon » convient : c'est « son », qui accompagne un nom.", + "review_tags": [ + "homophone", + "son_sont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_son_sont_qcm_01.json b/data/exercises/ce2/ce2_son_sont_qcm_01.json new file mode 100644 index 0000000..f858bfb --- /dev/null +++ b/data/exercises/ce2/ce2_son_sont_qcm_01.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_son_sont_qcm_01", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_son_sont", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Les chats ... gentils.", + "answers": [ + "son", + "sont" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « étaient », ou par « mon ».", + "explanation": "« étaient » convient ici : c'est le verbe être, on écrit « sont ».", + "review_tags": [ + "homophone", + "son_sont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_son_sont_qcm_02.json b/data/exercises/ce2/ce2_son_sont_qcm_02.json new file mode 100644 index 0000000..da52cb5 --- /dev/null +++ b/data/exercises/ce2/ce2_son_sont_qcm_02.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_son_sont_qcm_02", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_son_sont", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Léa mange ... gâteau.", + "answers": [ + "son", + "sont" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « étaient », ou par « mon ».", + "explanation": "« étaient » ne convient pas ici, mais « mon » convient : c'est « son », qui accompagne un nom.", + "review_tags": [ + "homophone", + "son_sont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_son_sont_qcm_03.json b/data/exercises/ce2/ce2_son_sont_qcm_03.json new file mode 100644 index 0000000..fdc1cb5 --- /dev/null +++ b/data/exercises/ce2/ce2_son_sont_qcm_03.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_son_sont_qcm_03", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_son_sont", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Les fleurs ... belles.", + "answers": [ + "son", + "sont" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « étaient », ou par « mon ».", + "explanation": "« étaient » convient ici : c'est le verbe être, on écrit « sont ».", + "review_tags": [ + "homophone", + "son_sont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_son_sont_qcm_04.json b/data/exercises/ce2/ce2_son_sont_qcm_04.json new file mode 100644 index 0000000..14601e9 --- /dev/null +++ b/data/exercises/ce2/ce2_son_sont_qcm_04.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_son_sont_qcm_04", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_son_sont", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Paul range ... cartable.", + "answers": [ + "son", + "sont" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « étaient », ou par « mon ».", + "explanation": "« étaient » ne convient pas ici, mais « mon » convient : c'est « son », qui accompagne un nom.", + "review_tags": [ + "homophone", + "son_sont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_son_sont_qcm_05.json b/data/exercises/ce2/ce2_son_sont_qcm_05.json new file mode 100644 index 0000000..1d84a16 --- /dev/null +++ b/data/exercises/ce2/ce2_son_sont_qcm_05.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_son_sont_qcm_05", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_son_sont", + "difficulty": 2, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Mes amis ... en retard.", + "answers": [ + "son", + "sont" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « étaient », ou par « mon ».", + "explanation": "« étaient » convient ici : c'est le verbe être, on écrit « sont ».", + "review_tags": [ + "homophone", + "son_sont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_son_sont_qcm_06.json b/data/exercises/ce2/ce2_son_sont_qcm_06.json new file mode 100644 index 0000000..ad7dcc8 --- /dev/null +++ b/data/exercises/ce2/ce2_son_sont_qcm_06.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_son_sont_qcm_06", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_son_sont", + "difficulty": 2, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Le chien boit dans ... bol.", + "answers": [ + "son", + "sont" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « étaient », ou par « mon ».", + "explanation": "« étaient » ne convient pas ici, mais « mon » convient : c'est « son », qui accompagne un nom.", + "review_tags": [ + "homophone", + "son_sont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_son_sont_qcm_07.json b/data/exercises/ce2/ce2_son_sont_qcm_07.json new file mode 100644 index 0000000..abdd708 --- /dev/null +++ b/data/exercises/ce2/ce2_son_sont_qcm_07.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_son_sont_qcm_07", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_son_sont", + "difficulty": 3, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Les enfants de la classe ... allés à la piscine.", + "answers": [ + "son", + "sont" + ], + "correct_answer": 1, + "hint": "Essaie de remplacer par « étaient », ou par « mon ». Relis la phrase en entier avant d'essayer.", + "explanation": "« étaient » convient ici : c'est le verbe être, on écrit « sont ».", + "review_tags": [ + "homophone", + "son_sont" + ], + "review_status": "draft" +} diff --git a/data/exercises/ce2/ce2_son_sont_qcm_08.json b/data/exercises/ce2/ce2_son_sont_qcm_08.json new file mode 100644 index 0000000..594e8a8 --- /dev/null +++ b/data/exercises/ce2/ce2_son_sont_qcm_08.json @@ -0,0 +1,23 @@ +{ + "id": "ce2_son_sont_qcm_08", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "rule_id": "regle_homophone_son_sont", + "difficulty": 3, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Marie a perdu ... joli stylo bleu.", + "answers": [ + "son", + "sont" + ], + "correct_answer": 0, + "hint": "Essaie de remplacer par « étaient », ou par « mon ». Relis la phrase en entier avant d'essayer.", + "explanation": "« étaient » ne convient pas ici, mais « mon » convient : c'est « son », qui accompagne un nom.", + "review_tags": [ + "homophone", + "son_sont" + ], + "review_status": "draft" +} diff --git a/data/localization/fr.json b/data/localization/fr.json index fd7baf0..634882d 100644 --- a/data/localization/fr.json +++ b/data/localization/fr.json @@ -17,6 +17,9 @@ "profile_create.cancel_button": "Retour", "profile_create.name_required_error": "Choisis un prénom avant de continuer.", "world_map.title": "La forêt des accords", + "world_map.title_ce2": "Le marais des homophones", + "world_map.review_ce1_button": "Revoir le CE1", + "world_map.back_to_ce2_button": "Retour au CE2", "world_map.status_decouverte": "À découvrir", "world_map.status_en_acquisition": "En entraînement", "world_map.status_en_consolidation": "En progrès", diff --git a/data/missions/mission_10_gue_petits_mots.json b/data/missions/mission_10_gue_petits_mots.json new file mode 100644 index 0000000..d64bcbc --- /dev/null +++ b/data/missions/mission_10_gue_petits_mots.json @@ -0,0 +1,12 @@ +{ + "mission_id": "mission_10_gue_petits_mots", + "title": "Le gué des petits mots", + "narrative_context": "Pour traverser le gué, il faut poser le bon petit mot sur chaque pierre : « a » ou « à » ? Fais le test du remplacement avant de choisir.", + "rule_id": "regle_homophone_a_a", + "exercise_type": "multiple_choice", + "map_position": { + "x": 0.12, + "y": 0.15 + }, + "review_status": "draft" +} diff --git a/data/missions/mission_11_moulin_pales.json b/data/missions/mission_11_moulin_pales.json new file mode 100644 index 0000000..6a3b0e9 --- /dev/null +++ b/data/missions/mission_11_moulin_pales.json @@ -0,0 +1,12 @@ +{ + "mission_id": "mission_11_moulin_pales", + "title": "Le moulin aux pales mélangées", + "narrative_context": "Les pales du moulin portent des mots, mais un « a » et un « à » se sont échangés. Trouve l'intrus et remets-le en place.", + "rule_id": "regle_homophone_a_a", + "exercise_type": "sentence_correction", + "map_position": { + "x": 0.12, + "y": 0.5 + }, + "review_status": "draft" +} diff --git a/data/missions/mission_12_grotte_resonante.json b/data/missions/mission_12_grotte_resonante.json new file mode 100644 index 0000000..b803bf8 --- /dev/null +++ b/data/missions/mission_12_grotte_resonante.json @@ -0,0 +1,12 @@ +{ + "mission_id": "mission_12_grotte_resonante", + "title": "La grotte résonante", + "narrative_context": "La grotte te répète une phrase, une seule fois. Écoute bien et écris-la en pensant à tes petits mots.", + "rule_id": "regle_homophone_a_a", + "exercise_type": "dictation", + "map_position": { + "x": 0.12, + "y": 0.85 + }, + "review_status": "draft" +} diff --git a/data/missions/mission_13_pont_levis.json b/data/missions/mission_13_pont_levis.json new file mode 100644 index 0000000..f42acae --- /dev/null +++ b/data/missions/mission_13_pont_levis.json @@ -0,0 +1,12 @@ +{ + "mission_id": "mission_13_pont_levis", + "title": "Le pont-levis des mots", + "narrative_context": "Le pont-levis ne s'abaisse que si tu choisis le bon mot : « et » ou « est » ? Essaie de remplacer par « était ».", + "rule_id": "regle_homophone_et_est", + "exercise_type": "multiple_choice", + "map_position": { + "x": 0.375, + "y": 0.15 + }, + "review_status": "draft" +} diff --git a/data/missions/mission_14_tour_horloge.json b/data/missions/mission_14_tour_horloge.json new file mode 100644 index 0000000..caa8b47 --- /dev/null +++ b/data/missions/mission_14_tour_horloge.json @@ -0,0 +1,12 @@ +{ + "mission_id": "mission_14_tour_horloge", + "title": "La tour de l'horloge", + "narrative_context": "Les aiguilles de l'horloge sont déréglées : un « et » et un « est » ont changé de place. Remets-les d'aplomb.", + "rule_id": "regle_homophone_et_est", + "exercise_type": "sentence_correction", + "map_position": { + "x": 0.375, + "y": 0.5 + }, + "review_status": "draft" +} diff --git a/data/missions/mission_15_source_chantante.json b/data/missions/mission_15_source_chantante.json new file mode 100644 index 0000000..9ba6ea6 --- /dev/null +++ b/data/missions/mission_15_source_chantante.json @@ -0,0 +1,12 @@ +{ + "mission_id": "mission_15_source_chantante", + "title": "La source chantante", + "narrative_context": "La source chante une phrase, une seule fois. Écoute-la bien et écris exactement ce qu'elle chante.", + "rule_id": "regle_homophone_et_est", + "exercise_type": "dictation", + "map_position": { + "x": 0.375, + "y": 0.85 + }, + "review_status": "draft" +} diff --git a/data/missions/mission_16_verger_bons_choix.json b/data/missions/mission_16_verger_bons_choix.json new file mode 100644 index 0000000..40c6d55 --- /dev/null +++ b/data/missions/mission_16_verger_bons_choix.json @@ -0,0 +1,12 @@ +{ + "mission_id": "mission_16_verger_bons_choix", + "title": "Le verger des bons choix", + "narrative_context": "Dans le verger, chaque fruit attend son étiquette : « son » ou « sont » ? Aide le jardinier à ne pas se tromper.", + "rule_id": "regle_homophone_son_sont", + "exercise_type": "multiple_choice", + "map_position": { + "x": 0.625, + "y": 0.15 + }, + "review_status": "draft" +} diff --git a/data/missions/mission_17_serre_etiquettes.json b/data/missions/mission_17_serre_etiquettes.json new file mode 100644 index 0000000..612ee7e --- /dev/null +++ b/data/missions/mission_17_serre_etiquettes.json @@ -0,0 +1,12 @@ +{ + "mission_id": "mission_17_serre_etiquettes", + "title": "La serre aux étiquettes", + "narrative_context": "Dans la serre, des étiquettes ont été mal posées. Repère celle qui ne va pas et remplace-la par la bonne.", + "rule_id": "regle_homophone_son_sont", + "exercise_type": "sentence_correction", + "map_position": { + "x": 0.625, + "y": 0.5 + }, + "review_status": "draft" +} diff --git a/data/missions/mission_18_fontaine_murmures.json b/data/missions/mission_18_fontaine_murmures.json new file mode 100644 index 0000000..a7870b2 --- /dev/null +++ b/data/missions/mission_18_fontaine_murmures.json @@ -0,0 +1,12 @@ +{ + "mission_id": "mission_18_fontaine_murmures", + "title": "La fontaine aux murmures", + "narrative_context": "La fontaine murmure une phrase, une seule fois. Tends l'oreille et écris-la sans faute.", + "rule_id": "regle_homophone_son_sont", + "exercise_type": "dictation", + "map_position": { + "x": 0.625, + "y": 0.85 + }, + "review_status": "draft" +} diff --git a/data/missions/mission_19_foire_petits_mots.json b/data/missions/mission_19_foire_petits_mots.json new file mode 100644 index 0000000..b6382f4 --- /dev/null +++ b/data/missions/mission_19_foire_petits_mots.json @@ -0,0 +1,12 @@ +{ + "mission_id": "mission_19_foire_petits_mots", + "title": "La foire aux petits mots", + "narrative_context": "À la foire, un jeu demande de choisir entre « on » et « ont ». Fais le test du remplacement pour gagner !", + "rule_id": "regle_homophone_on_ont", + "exercise_type": "multiple_choice", + "map_position": { + "x": 0.88, + "y": 0.15 + }, + "review_status": "draft" +} diff --git a/data/missions/mission_20_atelier_conteur.json b/data/missions/mission_20_atelier_conteur.json new file mode 100644 index 0000000..869d91d --- /dev/null +++ b/data/missions/mission_20_atelier_conteur.json @@ -0,0 +1,12 @@ +{ + "mission_id": "mission_20_atelier_conteur", + "title": "L'atelier du conteur", + "narrative_context": "Dans l'atelier, une histoire a des mots échangés. Trouve le mot qui ne va pas et corrige-le.", + "rule_id": "regle_homophone_on_ont", + "exercise_type": "sentence_correction", + "map_position": { + "x": 0.88, + "y": 0.5 + }, + "review_status": "draft" +} diff --git a/data/missions/mission_21_colline_echos.json b/data/missions/mission_21_colline_echos.json new file mode 100644 index 0000000..d8f6aba --- /dev/null +++ b/data/missions/mission_21_colline_echos.json @@ -0,0 +1,12 @@ +{ + "mission_id": "mission_21_colline_echos", + "title": "La colline aux échos", + "narrative_context": "La colline répète une phrase, une seule fois. Écoute bien et écris-la en entier.", + "rule_id": "regle_homophone_on_ont", + "exercise_type": "dictation", + "map_position": { + "x": 0.88, + "y": 0.85 + }, + "review_status": "draft" +} diff --git a/data/rules/regle_homophone_a_a.json b/data/rules/regle_homophone_a_a.json new file mode 100644 index 0000000..1e390da --- /dev/null +++ b/data/rules/regle_homophone_a_a.json @@ -0,0 +1,9 @@ +{ + "rule_id": "regle_homophone_a_a", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "statement": "Pour choisir entre « a » et « à », essaie de remplacer par « avait ». Si ça marche, c'est le verbe avoir : on écrit « a » sans accent. Sinon, on écrit « à » avec un accent.", + "example": "Léa a un chat. Léa va à la plage.", + "review_status": "draft" +} diff --git a/data/rules/regle_homophone_et_est.json b/data/rules/regle_homophone_et_est.json new file mode 100644 index 0000000..4dee53a --- /dev/null +++ b/data/rules/regle_homophone_et_est.json @@ -0,0 +1,9 @@ +{ + "rule_id": "regle_homophone_et_est", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "statement": "Pour choisir entre « et » et « est », essaie de remplacer par « était ». Si ça marche, c'est le verbe être : on écrit « est ». Sinon, c'est « et », qui relie deux mots.", + "example": "Le chat est noir et blanc.", + "review_status": "draft" +} diff --git a/data/rules/regle_homophone_on_ont.json b/data/rules/regle_homophone_on_ont.json new file mode 100644 index 0000000..1a2239b --- /dev/null +++ b/data/rules/regle_homophone_on_ont.json @@ -0,0 +1,9 @@ +{ + "rule_id": "regle_homophone_on_ont", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "statement": "Pour choisir entre « on » et « ont », essaie de remplacer par « avaient ». Si ça marche, c'est le verbe avoir : on écrit « ont ». Sinon, on peut remplacer par « il » : on écrit « on ».", + "example": "Les enfants ont faim. On mange des pommes.", + "review_status": "draft" +} diff --git a/data/rules/regle_homophone_son_sont.json b/data/rules/regle_homophone_son_sont.json new file mode 100644 index 0000000..a06f42f --- /dev/null +++ b/data/rules/regle_homophone_son_sont.json @@ -0,0 +1,9 @@ +{ + "rule_id": "regle_homophone_son_sont", + "level": "CE2", + "domain": "orthographe", + "skill": "homophones_grammaticaux", + "statement": "Pour choisir entre « son » et « sont », essaie de remplacer par « étaient ». Si ça marche, c'est le verbe être : on écrit « sont ». Sinon, on peut remplacer par « mon » : on écrit « son ».", + "example": "Les chats sont gentils. Paul range son cartable.", + "review_status": "draft" +} diff --git a/docs/review/content-review.md b/docs/review/content-review.md index 8c401d1..15d3a35 100644 --- a/docs/review/content-review.md +++ b/docs/review/content-review.md @@ -188,6 +188,378 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne - Audio : provisoire - Statut : draft +## regle_homophone_a_a (CE2, orthographe) + +**Enonce** : Pour choisir entre « a » et « à », essaie de remplacer par « avait ». Si ça marche, c'est le verbe avoir : on écrit « a » sans accent. Sinon, on écrit « à » avec un accent. + +**Exemple** : Léa a un chat. Léa va à la plage. + +**Statut** : draft + +### Choix multiples + +- **ce2_a_a_qcm_01** (difficulte 1) : Léa ... un chat. + - Reponses : a, à + - Reponse attendue : a + - Indice : Essaie de remplacer par « avait ». + - Explication : « avait » convient ici : c'est le verbe avoir, on écrit « a » sans accent. + - Statut : draft +- **ce2_a_a_qcm_02** (difficulte 1) : Nous allons ... la plage. + - Reponses : a, à + - Reponse attendue : à + - Indice : Essaie de remplacer par « avait ». + - Explication : « avait » ne convient pas ici : c'est le petit mot « à », avec un accent. + - Statut : draft +- **ce2_a_a_qcm_03** (difficulte 1) : Le chien ... faim. + - Reponses : a, à + - Reponse attendue : a + - Indice : Essaie de remplacer par « avait ». + - Explication : « avait » convient ici : c'est le verbe avoir, on écrit « a » sans accent. + - Statut : draft +- **ce2_a_a_qcm_04** (difficulte 1) : Tom joue ... la balle. + - Reponses : a, à + - Reponse attendue : à + - Indice : Essaie de remplacer par « avait ». + - Explication : « avait » ne convient pas ici : c'est le petit mot « à », avec un accent. + - Statut : draft +- **ce2_a_a_qcm_05** (difficulte 2) : Mon frère ... un vélo rouge. + - Reponses : a, à + - Reponse attendue : a + - Indice : Essaie de remplacer par « avait ». + - Explication : « avait » convient ici : c'est le verbe avoir, on écrit « a » sans accent. + - Statut : draft +- **ce2_a_a_qcm_06** (difficulte 2) : Elle donne un bonbon ... sa sœur. + - Reponses : a, à + - Reponse attendue : à + - Indice : Essaie de remplacer par « avait ». + - Explication : « avait » ne convient pas ici : c'est le petit mot « à », avec un accent. + - Statut : draft +- **ce2_a_a_qcm_07** (difficulte 3) : Ma sœur ... mangé toute la tarte. + - Reponses : a, à + - Reponse attendue : a + - Indice : Essaie de remplacer par « avait ». Relis la phrase en entier avant d'essayer. + - Explication : « avait » convient ici : c'est le verbe avoir, on écrit « a » sans accent. + - Statut : draft +- **ce2_a_a_qcm_08** (difficulte 3) : Il commence ... lire un livre. + - Reponses : a, à + - Reponse attendue : à + - Indice : Essaie de remplacer par « avait ». Relis la phrase en entier avant d'essayer. + - Explication : « avait » ne convient pas ici : c'est le petit mot « à », avec un accent. + - Statut : draft + +### Corrections de phrase + +- **ce2_a_a_correction_01** (difficulte 1) : Le chat [à -> a] faim ce soir. + - Indice : Essaie de remplacer par « avait ». + - Explication : « avait » convient ici : c'est le verbe avoir, on écrit « a » sans accent. + - Statut : draft +- **ce2_a_a_correction_02** (difficulte 1) : Nous allons [a -> à] la piscine. + - Indice : Essaie de remplacer par « avait ». + - Explication : « avait » ne convient pas ici : c'est le petit mot « à », avec un accent. + - Statut : draft +- **ce2_a_a_correction_03** (difficulte 2) : Mon voisin [à -> a] un grand jardin. + - Indice : Essaie de remplacer par « avait ». + - Explication : « avait » convient ici : c'est le verbe avoir, on écrit « a » sans accent. + - Statut : draft +- **ce2_a_a_correction_04** (difficulte 3) : Marie pense [a -> à] son ami depuis hier. + - Indice : Essaie de remplacer par « avait ». Relis la phrase en entier avant d'essayer. + - Explication : « avait » ne convient pas ici : c'est le petit mot « à », avec un accent. + - Statut : draft + +### Dictees + +- **ce2_a_a_dictee_01** : Léa a un chat. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft +- **ce2_a_a_dictee_02** : Nous allons à la piscine. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft +- **ce2_a_a_dictee_03** : Papa a donné un cadeau à Léa. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft + +## regle_homophone_et_est (CE2, orthographe) + +**Enonce** : Pour choisir entre « et » et « est », essaie de remplacer par « était ». Si ça marche, c'est le verbe être : on écrit « est ». Sinon, c'est « et », qui relie deux mots. + +**Exemple** : Le chat est noir et blanc. + +**Statut** : draft + +### Choix multiples + +- **ce2_et_est_qcm_01** (difficulte 1) : Le chat ... noir. + - Reponses : et, est + - Reponse attendue : est + - Indice : Essaie de remplacer par « était ». + - Explication : « était » convient ici : c'est le verbe être, on écrit « est ». + - Statut : draft +- **ce2_et_est_qcm_02** (difficulte 1) : Un chat ... un chien jouent. + - Reponses : et, est + - Reponse attendue : et + - Indice : Essaie de remplacer par « était ». + - Explication : « était » ne convient pas ici, mais « et puis » convient : c'est « et », qui relie deux mots. + - Statut : draft +- **ce2_et_est_qcm_03** (difficulte 1) : Ma maison ... grande. + - Reponses : et, est + - Reponse attendue : est + - Indice : Essaie de remplacer par « était ». + - Explication : « était » convient ici : c'est le verbe être, on écrit « est ». + - Statut : draft +- **ce2_et_est_qcm_04** (difficulte 1) : Je mange du pain ... du fromage. + - Reponses : et, est + - Reponse attendue : et + - Indice : Essaie de remplacer par « était ». + - Explication : « était » ne convient pas ici, mais « et puis » convient : c'est « et », qui relie deux mots. + - Statut : draft +- **ce2_et_est_qcm_05** (difficulte 2) : Papa ... maman sont partis. + - Reponses : et, est + - Reponse attendue : et + - Indice : Essaie de remplacer par « était ». + - Explication : « était » ne convient pas ici, mais « et puis » convient : c'est « et », qui relie deux mots. + - Statut : draft +- **ce2_et_est_qcm_06** (difficulte 2) : Le gâteau ... sur la table. + - Reponses : et, est + - Reponse attendue : est + - Indice : Essaie de remplacer par « était ». + - Explication : « était » convient ici : c'est le verbe être, on écrit « est ». + - Statut : draft +- **ce2_et_est_qcm_07** (difficulte 3) : Mon petit frère ... très content de son cadeau. + - Reponses : et, est + - Reponse attendue : est + - Indice : Essaie de remplacer par « était ». Relis la phrase en entier avant d'essayer. + - Explication : « était » convient ici : c'est le verbe être, on écrit « est ». + - Statut : draft +- **ce2_et_est_qcm_08** (difficulte 3) : Le chat dort sur le canapé ... le chien dort sur le tapis. + - Reponses : et, est + - Reponse attendue : et + - Indice : Essaie de remplacer par « était ». Relis la phrase en entier avant d'essayer. + - Explication : « était » ne convient pas ici, mais « et puis » convient : c'est « et », qui relie deux mots. + - Statut : draft + +### Corrections de phrase + +- **ce2_et_est_correction_01** (difficulte 1) : Le chien [et -> est] gentil avec moi. + - Indice : Essaie de remplacer par « était ». + - Explication : « était » convient ici : c'est le verbe être, on écrit « est ». + - Statut : draft +- **ce2_et_est_correction_02** (difficulte 1) : Paul [est -> et] Marie jouent ensemble. + - Indice : Essaie de remplacer par « était ». + - Explication : « était » ne convient pas ici, mais « et puis » convient : c'est « et », qui relie deux mots. + - Statut : draft +- **ce2_et_est_correction_03** (difficulte 2) : Ma sœur [et -> est] très fière de son dessin. + - Indice : Essaie de remplacer par « était ». + - Explication : « était » convient ici : c'est le verbe être, on écrit « est ». + - Statut : draft +- **ce2_et_est_correction_04** (difficulte 3) : Le lapin mange une carotte [est -> et] un chou. + - Indice : Essaie de remplacer par « était ». Relis la phrase en entier avant d'essayer. + - Explication : « était » ne convient pas ici, mais « et puis » convient : c'est « et », qui relie deux mots. + - Statut : draft + +### Dictees + +- **ce2_et_est_dictee_01** : Le chat est noir. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft +- **ce2_et_est_dictee_02** : Paul et Marie jouent ensemble. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft +- **ce2_et_est_dictee_03** : Mon frère est petit et blond. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft + +## regle_homophone_on_ont (CE2, orthographe) + +**Enonce** : Pour choisir entre « on » et « ont », essaie de remplacer par « avaient ». Si ça marche, c'est le verbe avoir : on écrit « ont ». Sinon, on peut remplacer par « il » : on écrit « on ». + +**Exemple** : Les enfants ont faim. On mange des pommes. + +**Statut** : draft + +### Choix multiples + +- **ce2_on_ont_qcm_01** (difficulte 1) : ... joue dehors. + - Reponses : On, Ont + - Reponse attendue : On + - Indice : Essaie de remplacer par « avaient », ou par « il ». + - Explication : « avaient » ne convient pas ici, mais « il » convient : c'est le pronom « on ». + - Statut : draft +- **ce2_on_ont_qcm_02** (difficulte 1) : Les enfants ... faim. + - Reponses : on, ont + - Reponse attendue : ont + - Indice : Essaie de remplacer par « avaient », ou par « il ». + - Explication : « avaient » convient ici : c'est le verbe avoir, on écrit « ont ». + - Statut : draft +- **ce2_on_ont_qcm_03** (difficulte 1) : Ce soir, ... mange des pâtes. + - Reponses : on, ont + - Reponse attendue : on + - Indice : Essaie de remplacer par « avaient », ou par « il ». + - Explication : « avaient » ne convient pas ici, mais « il » convient : c'est le pronom « on ». + - Statut : draft +- **ce2_on_ont_qcm_04** (difficulte 1) : Les chiens ... soif. + - Reponses : on, ont + - Reponse attendue : ont + - Indice : Essaie de remplacer par « avaient », ou par « il ». + - Explication : « avaient » convient ici : c'est le verbe avoir, on écrit « ont ». + - Statut : draft +- **ce2_on_ont_qcm_05** (difficulte 2) : Paul et Léa ... un nouveau vélo. + - Reponses : on, ont + - Reponse attendue : ont + - Indice : Essaie de remplacer par « avaient », ou par « il ». + - Explication : « avaient » convient ici : c'est le verbe avoir, on écrit « ont ». + - Statut : draft +- **ce2_on_ont_qcm_06** (difficulte 2) : À la récréation, ... saute à la corde. + - Reponses : on, ont + - Reponse attendue : on + - Indice : Essaie de remplacer par « avaient », ou par « il ». + - Explication : « avaient » ne convient pas ici, mais « il » convient : c'est le pronom « on ». + - Statut : draft +- **ce2_on_ont_qcm_07** (difficulte 3) : Les enfants de ma classe ... fini leur travail. + - Reponses : on, ont + - Reponse attendue : ont + - Indice : Essaie de remplacer par « avaient », ou par « il ». Relis la phrase en entier avant d'essayer. + - Explication : « avaient » convient ici : c'est le verbe avoir, on écrit « ont ». + - Statut : draft +- **ce2_on_ont_qcm_08** (difficulte 3) : Quand il pleut, ... reste à la maison. + - Reponses : on, ont + - Reponse attendue : on + - Indice : Essaie de remplacer par « avaient », ou par « il ». Relis la phrase en entier avant d'essayer. + - Explication : « avaient » ne convient pas ici, mais « il » convient : c'est le pronom « on ». + - Statut : draft + +### Corrections de phrase + +- **ce2_on_ont_correction_01** (difficulte 1) : Les chats [on -> ont] peur du chien. + - Indice : Essaie de remplacer par « avaient », ou par « il ». + - Explication : « avaient » convient ici : c'est le verbe avoir, on écrit « ont ». + - Statut : draft +- **ce2_on_ont_correction_02** (difficulte 1) : [Ont -> On] joue dans la cour. + - Indice : Essaie de remplacer par « avaient », ou par « il ». + - Explication : « avaient » ne convient pas ici, mais « il » convient : c'est le pronom « on ». + - Statut : draft +- **ce2_on_ont_correction_03** (difficulte 2) : Mes cousins [on -> ont] un grand chien. + - Indice : Essaie de remplacer par « avaient », ou par « il ». + - Explication : « avaient » convient ici : c'est le verbe avoir, on écrit « ont ». + - Statut : draft +- **ce2_on_ont_correction_04** (difficulte 3) : Le soir, [ont -> on] lit une histoire à la maison. + - Indice : Essaie de remplacer par « avaient », ou par « il ». Relis la phrase en entier avant d'essayer. + - Explication : « avaient » ne convient pas ici, mais « il » convient : c'est le pronom « on ». + - Statut : draft + +### Dictees + +- **ce2_on_ont_dictee_01** : On joue dehors. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft +- **ce2_on_ont_dictee_02** : Les enfants ont faim. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft +- **ce2_on_ont_dictee_03** : Les enfants ont sommeil et on lit une histoire. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft + +## regle_homophone_son_sont (CE2, orthographe) + +**Enonce** : Pour choisir entre « son » et « sont », essaie de remplacer par « étaient ». Si ça marche, c'est le verbe être : on écrit « sont ». Sinon, on peut remplacer par « mon » : on écrit « son ». + +**Exemple** : Les chats sont gentils. Paul range son cartable. + +**Statut** : draft + +### Choix multiples + +- **ce2_son_sont_qcm_01** (difficulte 1) : Les chats ... gentils. + - Reponses : son, sont + - Reponse attendue : sont + - Indice : Essaie de remplacer par « étaient », ou par « mon ». + - Explication : « étaient » convient ici : c'est le verbe être, on écrit « sont ». + - Statut : draft +- **ce2_son_sont_qcm_02** (difficulte 1) : Léa mange ... gâteau. + - Reponses : son, sont + - Reponse attendue : son + - Indice : Essaie de remplacer par « étaient », ou par « mon ». + - Explication : « étaient » ne convient pas ici, mais « mon » convient : c'est « son », qui accompagne un nom. + - Statut : draft +- **ce2_son_sont_qcm_03** (difficulte 1) : Les fleurs ... belles. + - Reponses : son, sont + - Reponse attendue : sont + - Indice : Essaie de remplacer par « étaient », ou par « mon ». + - Explication : « étaient » convient ici : c'est le verbe être, on écrit « sont ». + - Statut : draft +- **ce2_son_sont_qcm_04** (difficulte 1) : Paul range ... cartable. + - Reponses : son, sont + - Reponse attendue : son + - Indice : Essaie de remplacer par « étaient », ou par « mon ». + - Explication : « étaient » ne convient pas ici, mais « mon » convient : c'est « son », qui accompagne un nom. + - Statut : draft +- **ce2_son_sont_qcm_05** (difficulte 2) : Mes amis ... en retard. + - Reponses : son, sont + - Reponse attendue : sont + - Indice : Essaie de remplacer par « étaient », ou par « mon ». + - Explication : « étaient » convient ici : c'est le verbe être, on écrit « sont ». + - Statut : draft +- **ce2_son_sont_qcm_06** (difficulte 2) : Le chien boit dans ... bol. + - Reponses : son, sont + - Reponse attendue : son + - Indice : Essaie de remplacer par « étaient », ou par « mon ». + - Explication : « étaient » ne convient pas ici, mais « mon » convient : c'est « son », qui accompagne un nom. + - Statut : draft +- **ce2_son_sont_qcm_07** (difficulte 3) : Les enfants de la classe ... allés à la piscine. + - Reponses : son, sont + - Reponse attendue : sont + - Indice : Essaie de remplacer par « étaient », ou par « mon ». Relis la phrase en entier avant d'essayer. + - Explication : « étaient » convient ici : c'est le verbe être, on écrit « sont ». + - Statut : draft +- **ce2_son_sont_qcm_08** (difficulte 3) : Marie a perdu ... joli stylo bleu. + - Reponses : son, sont + - Reponse attendue : son + - Indice : Essaie de remplacer par « étaient », ou par « mon ». Relis la phrase en entier avant d'essayer. + - Explication : « étaient » ne convient pas ici, mais « mon » convient : c'est « son », qui accompagne un nom. + - Statut : draft + +### Corrections de phrase + +- **ce2_son_sont_correction_01** (difficulte 1) : Les oiseaux [son -> sont] dans le nid. + - Indice : Essaie de remplacer par « étaient », ou par « mon ». + - Explication : « étaient » convient ici : c'est le verbe être, on écrit « sont ». + - Statut : draft +- **ce2_son_sont_correction_02** (difficulte 1) : Paul mange [sont -> son] pain. + - Indice : Essaie de remplacer par « étaient », ou par « mon ». + - Explication : « étaient » ne convient pas ici, mais « mon » convient : c'est « son », qui accompagne un nom. + - Statut : draft +- **ce2_son_sont_correction_03** (difficulte 2) : Mes voisins [son -> sont] partis ce matin. + - Indice : Essaie de remplacer par « étaient », ou par « mon ». + - Explication : « étaient » convient ici : c'est le verbe être, on écrit « sont ». + - Statut : draft +- **ce2_son_sont_correction_04** (difficulte 3) : Ma sœur cherche [sont -> son] petit chien noir. + - Indice : Essaie de remplacer par « étaient », ou par « mon ». Relis la phrase en entier avant d'essayer. + - Explication : « étaient » ne convient pas ici, mais « mon » convient : c'est « son », qui accompagne un nom. + - Statut : draft + +### Dictees + +- **ce2_son_sont_dictee_01** : Les chats sont gentils. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft +- **ce2_son_sont_dictee_02** : Paul range son cartable. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft +- **ce2_son_sont_dictee_03** : Léa et Paul sont dans son jardin. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft + ## regle_pluriel_nom (CE1, grammaire) **Enonce** : Le plus souvent, on forme le pluriel d'un nom en ajoutant un -s a la fin du mot. diff --git a/docs/specs/decisions.md b/docs/specs/decisions.md index 34cb164..e8e3ad4 100644 --- a/docs/specs/decisions.md +++ b/docs/specs/decisions.md @@ -244,3 +244,13 @@ Ajouts à l'arborescence proposée : **Correction** : les 9 missions sont replacées sur une grille régulière 3x3 (x, y ∈ {0.15, 0.5, 0.85}), avec un écart de 0.35 entre positions adjacentes — largement supérieur à la largeur/hauteur des marqueurs rapportée à la fenêtre par défaut. Les trois missions historiques (`mission_01` à `_03`) sont déplacées elles aussi, pas seulement les nouvelles, pour que la grille soit cohérente partout plutôt que patchée au cas par cas. **Garde-fou** : nouveau test headless (`tests/data/test_mission_positions.gd`) qui échoue si deux missions ont un écart fractionnel inférieur à 0.3 sur les deux axes — ne remplace pas une vérification visuelle (l'écart réel en pixels dépend de la taille de fenêtre réelle, non fixée), mais attrape la classe d'erreur qui vient de se produire avant qu'elle ne soit signalée à la main. + +## 27. Chapitre CE2 « homophones grammaticaux » et carte par niveau + +**Décision** : le chapitre CE2 est traité avec les mêmes directives que le CE1 (point 25), sans question préalable (autorisation explicite de ne s'arrêter que sur une contradiction de la spécification ou un changement du format des données/sauvegardes — aucun des deux ici : `school_level` existait déjà dans la sauvegarde, `skills` accepte tout identifiant de compétence, aucun schéma modifié). + +**Contenu** (tout en `review_status: draft`, accents corrects, un seul niveau d'orthographe `orthographe`) : quatre règles `regle_homophone_a_a` (a/à), `regle_homophone_et_est` (et/est), `regle_homophone_son_sont` (son/sont), `regle_homophone_on_ont` (on/ont), chacune avec son test de substitution dans l'énoncé, l'indice et l'explication (« avait », « était », « étaient »/« mon », « avaient »/« il »). Compétence commune `homophones_grammaticaux` (même granularité que `accord_groupe_nominal` au CE1). Par règle : 8 choix multiples, 4 corrections de phrase, 3 dictées (3 par règle et non 3 par chapitre, comme au CE1, pour que chaque mission de dictée ait de quoi varier) ; 3 missions par règle (12 au total, `mission_10` à `mission_21`). Audio des 12 dictées généré avec Piper (point 20). `data/curriculum/ce2_homophones_grammaticaux.json` ajouté (région `marais_des_homophones`, toujours non consommé par le moteur). + +**Carte par niveau** : 21 missions sur une seule carte ne tiennent pas (marqueurs de 160 px sur 1152 px). `ExerciseEngine.get_missions_for_level()` filtre sur le niveau de la règle de la mission (pas de champ supplémentaire dans les missions), `ProgressManager.school_level()` expose le niveau du profil, et `world_map` n'affiche que les missions du niveau du profil. Le cahier des charges (« un enfant de CE2 qui rencontre une difficulté sur une notion de CE1 pourra revenir à un entraînement adapté ») est respecté par un bouton « Revoir le CE1 » / « Retour au CE2 » visible uniquement pour un profil CE2. Un profil CE1 ne voit pas le CE2. Disposition CE2 : grille 4 colonnes (une par règle) × 3 lignes (QCM, correction, dictée) ; le test d'écart (point 26) vérifie maintenant chaque niveau séparément. + +**Non vérifié** : rendu de la carte CE2 (12 marqueurs), du bouton de bascule, et écoute des 12 voix — voir `docs/testing/manual-checklist.md`. Les textes plus anciens du CE1 (indices/explications) n'ont pas d'accents ; non corrigé ici, à traiter à part. diff --git a/docs/testing/manual-checklist.md b/docs/testing/manual-checklist.md index ddcedd5..1926a82 100644 --- a/docs/testing/manual-checklist.md +++ b/docs/testing/manual-checklist.md @@ -16,6 +16,7 @@ Tout ce qui suit ne peut pas être vérifié sans écran (rendu, mise en page, a 10. Mission « Le pont des phrases » (correction de phrase) : toucher un mot le fait apparaître comme sélectionné (état visuel distinct, pas seulement une couleur) ; un champ de saisie apparaît sous le mot sélectionné ; toucher à nouveau le mot fait disparaître le champ. 11. Mission « La clairière de l'écho » (dictée) : à l'arrivée sur l'exercice, la voix de synthèse doit se faire entendre automatiquement ; le bouton « Réécouter » la rejoue sans planter ; le badge « Voix provisoire » est visible ; la zone de saisie accepte le texte et les accents. Le rappel « N'oublie pas : une majuscule au début de la phrase et un point à la fin ! » doit être visible (point 22 de `decisions.md`) ; taper le texte sans majuscule ou sans point final doit être refusé, avec l'erreur correspondante. 12. Après 3 exercices, écran de récompense avec le nombre d'étoiles, puis retour à la carte. +12ter. Profil **CE2** : la carte affiche « Le marais des homophones » avec 12 lieux (4 colonnes × 3 lignes, sans chevauchement) et un bouton « Revoir le CE1 » qui bascule sur les 9 lieux CE1 (et « Retour au CE2 » revient) ; un profil CE1 n'a pas ce bouton (point 27 de `decisions.md`). Jamais vu à l'écran. Jouer une mission de chaque règle CE2 (a/à, et/est, son/sont, on/ont), dont une dictée : voix claire, rappel majuscule/point visible. 12bis. Répéter rapidement les points 8-12 sur une mission de chacune des deux nouvelles règles (« La ruche qui se multiplie » pour le pluriel du nom, « Le sentier des bons compagnons » pour l'accord du déterminant) : jamais vu à l'écran, seulement validé en headless (point 25 de `decisions.md`). 13. Quitter le jeu puis relancer `make run` : le profil et sa progression doivent être conservés (sélectionner le même profil, vérifier que l'état affiché sur la carte a changé par rapport à l'état initial). 14. Depuis la sélection de profil, supprimer un profil : une confirmation explicite doit apparaître avant la suppression effective ; annuler doit ne rien supprimer. diff --git a/scenes/world/world_map.gd b/scenes/world/world_map.gd index 68a23ff..ae134d9 100644 --- a/scenes/world/world_map.gd +++ b/scenes/world/world_map.gd @@ -1,31 +1,52 @@ extends Control -## Carte des missions. Le prototype initial (cahier des charges §15) se -## limitait a trois lieux ; le perimetre a ete etendu au-dela (voir -## docs/specs/decisions.md, point 25) pour couvrir plus d'une regle par -## chapitre. La position de chaque mission vient de data/missions/*.json -## (fractions 0..1 de la zone de carte), jamais d'une position fixe en dur -## dans le script. +## Carte des missions du niveau scolaire du profil. Le prototype initial +## (cahier des charges §15) se limitait a trois lieux ; le perimetre a ete +## etendu (docs/specs/decisions.md, points 25 et 27). La position de chaque +## mission vient de data/missions/*.json (fractions 0..1 de la zone de +## carte), jamais d'une position fixe en dur dans le script. Un profil CE2 +## peut basculer sur la carte CE1 pour revoir les notions precedentes. const MARKER_HALF_WIDTH := 80.0 const MARKER_HALF_HEIGHT := 36.0 +var _viewed_level := "CE1" + @onready var _title_label: Label = %TitleLabel @onready var _map_area: Control = %MapArea +@onready var _level_toggle_button: Button = %LevelToggleButton func _ready() -> void: - _title_label.text = UIText.get_text("world_map.title") + _viewed_level = ProgressManager.school_level() + _level_toggle_button.visible = _viewed_level == "CE2" + _level_toggle_button.pressed.connect(_on_level_toggle_pressed) + _refresh() + + +func _refresh() -> void: + var title_key := "world_map.title_ce2" if _viewed_level == "CE2" else "world_map.title" + _title_label.text = UIText.get_text(title_key) + var toggle_key := ( + "world_map.review_ce1_button" if _viewed_level == "CE2" else "world_map.back_to_ce2_button" + ) + _level_toggle_button.text = UIText.get_text(toggle_key) _populate_missions() func _populate_missions() -> void: for child in _map_area.get_children(): + _map_area.remove_child(child) child.queue_free() - for mission: Dictionary in ExerciseEngine.get_missions(): + for mission: Dictionary in ExerciseEngine.get_missions_for_level(_viewed_level): _map_area.add_child(_build_marker(mission)) +func _on_level_toggle_pressed() -> void: + _viewed_level = "CE1" if _viewed_level == "CE2" else "CE2" + _refresh() + + func _build_marker(mission: Dictionary) -> Control: var button := Button.new() button.text = "%s\n%s" % [mission["title"], _status_label_for(mission)] diff --git a/scenes/world/world_map.tscn b/scenes/world/world_map.tscn index a07d3ed..e41eb2a 100644 --- a/scenes/world/world_map.tscn +++ b/scenes/world/world_map.tscn @@ -41,6 +41,11 @@ unique_name_in_owner = true layout_mode = 2 size_flags_vertical = 3 +[node name="LevelToggleButton" type="Button" parent="VBox"] +unique_name_in_owner = true +layout_mode = 2 +custom_minimum_size = Vector2(0, 48) + [node name="Guide" type="Control" parent="VBox" instance=ExtResource("2")] unique_name_in_owner = true layout_mode = 2 diff --git a/tests/data/test_mission_positions.gd b/tests/data/test_mission_positions.gd index b04e66b..7acd8e6 100644 --- a/tests/data/test_mission_positions.gd +++ b/tests/data/test_mission_positions.gd @@ -1,28 +1,32 @@ extends GutTest ## Garde-fou contre le chevauchement de marqueurs sur la carte (signale ## manuellement : "La clairiere" et "La cabane" se chevauchaient, voir -## docs/specs/decisions.md). scenes/world/world_map.gd place chaque marqueur -## a une position fractionnelle (map_position.x/y de data/missions/*.json) ; -## sans ecart suffisant entre deux missions, leurs boutons se recouvrent a -## l'ecran. Verifie l'ecart plutot que le rendu reel (non testable sans -## ecran), avec une marge volontairement un peu permissive par rapport a la -## grille 0.35 utilisee dans les donnees. +## docs/specs/decisions.md, point 26). scenes/world/world_map.gd place chaque +## marqueur a une position fractionnelle (map_position.x/y de +## data/missions/*.json) ; sans ecart suffisant entre deux missions affichees +## ensemble (meme niveau), leurs boutons se recouvrent a l'ecran. Verifie +## l'ecart plutot que le rendu reel (non testable sans ecran), a la +## resolution par defaut (1152 px de large : 0.2 = 230 px pour des +## marqueurs de 160 px ; 0.3 de hauteur pour des marqueurs de 72 px). -const MIN_FRACTIONAL_GAP := 0.3 +const MIN_GAP_X := 0.2 +const MIN_GAP_Y := 0.3 -func test_mission_markers_do_not_overlap() -> void: - var missions := ExerciseEngine.get_missions() - for i in missions.size(): - for j in range(i + 1, missions.size()): - var a: Dictionary = missions[i]["map_position"] - var b: Dictionary = missions[j]["map_position"] - var dx: float = abs(float(a["x"]) - float(b["x"])) - var dy: float = abs(float(a["y"]) - float(b["y"])) - assert_true( - dx >= MIN_FRACTIONAL_GAP or dy >= MIN_FRACTIONAL_GAP, - ( - "%s et %s sont trop proches (dx=%s, dy=%s)" - % [missions[i]["mission_id"], missions[j]["mission_id"], dx, dy] - ), - ) +func test_mission_markers_do_not_overlap_within_a_level() -> void: + for level in ["CE1", "CE2"]: + var missions := ExerciseEngine.get_missions_for_level(level) + assert_false(missions.is_empty(), "aucune mission pour %s" % level) + for i in missions.size(): + for j in range(i + 1, missions.size()): + var a: Dictionary = missions[i]["map_position"] + var b: Dictionary = missions[j]["map_position"] + var dx: float = abs(float(a["x"]) - float(b["x"])) + var dy: float = abs(float(a["y"]) - float(b["y"])) + assert_true( + dx >= MIN_GAP_X or dy >= MIN_GAP_Y, + ( + "%s et %s sont trop proches (dx=%s, dy=%s)" + % [missions[i]["mission_id"], missions[j]["mission_id"], dx, dy] + ), + ) diff --git a/tests/exercises/test_exercise_engine.gd b/tests/exercises/test_exercise_engine.gd index ccfd600..4faa105 100644 --- a/tests/exercises/test_exercise_engine.gd +++ b/tests/exercises/test_exercise_engine.gd @@ -15,11 +15,18 @@ func test_unknown_rule_returns_empty_dictionary() -> void: func test_missions_are_loaded_and_sorted() -> void: var missions := ExerciseEngine.get_missions() - assert_eq(missions.size(), 9) + assert_eq(missions.size(), 21) var ids: Array = missions.map(func(m: Dictionary) -> String: return m["mission_id"]) assert_eq(ids, ids.duplicate()) # trivialement vrai, documente l'ordre stable assert_true(ids.has("mission_01_pre_des_mots")) assert_true(ids.has("mission_09_rocher_qui_repete")) + assert_true(ids.has("mission_21_colline_echos")) + + +func test_missions_are_filtered_by_the_level_of_their_rule() -> void: + assert_eq(ExerciseEngine.get_missions_for_level("CE1").size(), 9) + assert_eq(ExerciseEngine.get_missions_for_level("CE2").size(), 12) + assert_eq(ExerciseEngine.get_missions_for_level("CM1").size(), 0) func test_get_mission_returns_the_requested_mission() -> void: diff --git a/tests/world/test_world_map.gd b/tests/world/test_world_map.gd new file mode 100644 index 0000000..a78f5ff --- /dev/null +++ b/tests/world/test_world_map.gd @@ -0,0 +1,45 @@ +extends GutTest +## La carte n'affiche que les missions du niveau du profil ; un profil CE2 peut +## basculer sur la carte CE1 pour revoir les notions precedentes (point 27 de +## docs/specs/decisions.md). + +var _profile_id: String = "" + + +func after_each() -> void: + ProfileManager.delete_profile(_profile_id) + + +func _open_map_for(level: String) -> Control: + _profile_id = ProfileManager.create_profile("Test", level) + ProfileManager.select_profile(_profile_id) + var map: Control = load("res://scenes/world/world_map.tscn").instantiate() + add_child_autofree(map) + return map + + +func test_ce1_profile_sees_only_ce1_missions_and_no_toggle() -> void: + var map := _open_map_for("CE1") + await wait_process_frames(1) + + assert_eq(map.get_node("%MapArea").get_child_count(), 9) + assert_false(map.get_node("%LevelToggleButton").visible) + + +func test_ce2_profile_sees_ce2_missions_and_can_review_ce1() -> void: + var map := _open_map_for("CE2") + await wait_process_frames(1) + + assert_eq(map.get_node("%MapArea").get_child_count(), 12) + assert_eq(map.get_node("%TitleLabel").text, UIText.get_text("world_map.title_ce2")) + var toggle: Button = map.get_node("%LevelToggleButton") + assert_true(toggle.visible) + + toggle.pressed.emit() + await wait_process_frames(1) + assert_eq(map.get_node("%MapArea").get_child_count(), 9) + assert_eq(map.get_node("%TitleLabel").text, UIText.get_text("world_map.title")) + + toggle.pressed.emit() + await wait_process_frames(1) + assert_eq(map.get_node("%MapArea").get_child_count(), 12) diff --git a/tests/world/test_world_map.gd.uid b/tests/world/test_world_map.gd.uid new file mode 100644 index 0000000..03e1ae3 --- /dev/null +++ b/tests/world/test_world_map.gd.uid @@ -0,0 +1 @@ +uid://b07gkjubhbj8w