feat: A1 短材料复现本单元理解词,并加入黑夜模式

课程内容
- 重写全部 21 个 A1 单元的听读材料,把本单元理解词织进听/读文本,
  单元内理解词复现率从约 20% 提升到约 77%(各单元 56–96%)。
- 修正 U01 房间号与机场大巴同为 thirty 的撞车(改为 17/30/40)。
- 校验器容差按级别读取(A1 为 8%),materials 覆盖率、字数、
  选项子串等校验全部通过;course_content_test 通过。

黑夜模式
- app_theme 拆分明/暗两套调色板,AppColors 随亮度切换;
  main 用 theme/darkTheme/themeMode + builder 镜像已解析亮度;
  主题偏好持久化到快照;进度页新增“外观主题”切换。

文档
- COURSE-PACK-JSON.md 更新 A1 词池覆盖(840/933)与材料复现约定。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-09-18 11:16:09 +09:00
co-authored by Claude Opus 4.8
parent 9ab08c25ef
commit febfd30f49
93 changed files with 72676 additions and 274 deletions
+966
View File
@@ -0,0 +1,966 @@
{
"schemaVersion": 1,
"id": "A1-U11",
"revision": 1,
"level": "A1",
"title": "我的一天",
"categories": [
"日常"
],
"canDo": "说作息和常做的事",
"status": "draft",
"meta": {
"draftedBy": "claude-opus-5",
"draftedAt": "2026-09-17",
"sources": [
"CEFR-J Vocabulary Profile 1.5",
"CEFR-J Grammar Profile 20180315"
],
"reviews": [],
"frozenAt": null
},
"names": [],
"grammar": [
{
"id": "59",
"use": "active"
},
{
"id": "60",
"use": "active"
},
{
"id": "32",
"use": "active"
},
{
"id": "101",
"use": "active"
},
{
"id": "55",
"use": "active",
"reason": "只用 get up、go to bed 等固定搭配"
}
],
"coreItems": [
{
"id": "A1-U11-P01",
"type": "phrase",
"en": "I get up at seven.",
"zh": "我七点起床。",
"sceneWord": false,
"match": [
[
"get up",
"gets up"
]
],
"example": {
"en": "He gets up at six thirty.",
"zh": "他六点半起床。"
},
"review": {
"prompt": "说你几点起床。"
}
},
{
"id": "A1-U11-P02",
"type": "phrase",
"en": "What time do you get up?",
"zh": "你几点起床?",
"sceneWord": false,
"match": [
[
"what time do you",
"what time does"
]
],
"example": {
"en": "What time do you go to work?",
"zh": "你几点去上班?"
},
"review": {
"prompt": "问新室友几点起床。"
}
},
{
"id": "A1-U11-P03",
"type": "phrase",
"en": "I have breakfast at home.",
"zh": "我在家吃早饭。",
"sceneWord": false,
"match": [
[
"have breakfast",
"has breakfast",
"have lunch",
"has lunch",
"have dinner",
"has dinner"
]
],
"example": {
"en": "I have lunch at twelve.",
"zh": "我十二点吃午饭。"
},
"review": {
"prompt": "说你在家吃早饭。"
}
},
{
"id": "A1-U11-P04",
"type": "phrase",
"en": "I go to work at eight.",
"zh": "我八点去上班。",
"sceneWord": false,
"match": [
[
"go to work",
"goes to work",
"go to school",
"goes to school"
]
],
"example": {
"en": "My son goes to school at eight.",
"zh": "我儿子八点去上学。"
},
"review": {
"prompt": "说你几点去上班。"
}
},
{
"id": "A1-U11-W01",
"type": "word",
"en": "usually",
"zh": "通常",
"sceneWord": false,
"match": [
[
"usually"
]
],
"example": {
"en": "I usually go to work by bus.",
"zh": "我通常坐公交车上班。"
},
"review": {
"prompt": "说你通常晚上看电视。"
}
},
{
"id": "A1-U11-W02",
"type": "word",
"en": "always",
"zh": "总是",
"sceneWord": false,
"match": [
[
"always"
]
],
"example": {
"en": "I always have breakfast.",
"zh": "我总是吃早饭。"
},
"review": {
"prompt": "说你总是早上洗澡。"
}
},
{
"id": "A1-U11-W03",
"type": "word",
"en": "never",
"zh": "从不",
"sceneWord": false,
"match": [
[
"never"
]
],
"example": {
"en": "I never watch TV in the morning.",
"zh": "我早上从不看电视。"
},
"review": {
"prompt": "说你从不吃早饭。"
}
},
{
"id": "A1-U11-W04",
"type": "word",
"en": "sometimes",
"zh": "有时候",
"sceneWord": true,
"sceneReason": "sometimes 在 CEFR-J 为 B1,但描述习惯时和 always、usually、never 一样常用",
"match": [
[
"sometimes"
]
],
"example": {
"en": "I sometimes cook dinner.",
"zh": "我有时候做晚饭。"
},
"review": {
"prompt": "说你有时候早上跑步。"
}
},
{
"id": "A1-U11-P05",
"type": "phrase",
"en": "I watch TV in the evening.",
"zh": "我晚上看电视。",
"sceneWord": false,
"match": [
[
"in the evening",
"in the morning",
"in the afternoon",
"at night"
]
],
"example": {
"en": "I run in the morning.",
"zh": "我早上跑步。"
},
"review": {
"prompt": "说你晚上常做的一件事。"
}
},
{
"id": "A1-U11-P06",
"type": "phrase",
"en": "every day",
"zh": "每天",
"sceneWord": false,
"match": [
[
"every day"
]
],
"example": {
"en": "I read the newspaper every day.",
"zh": "我每天看报纸。"
},
"review": {
"prompt": "说你每天都喝咖啡。"
}
},
{
"id": "A1-U11-P07",
"type": "phrase",
"en": "I take a shower.",
"zh": "我洗个澡。",
"sceneWord": false,
"match": [
[
"take a shower",
"takes a shower"
]
],
"example": {
"en": "I always take a shower in the morning.",
"zh": "我总是早上洗澡。"
},
"review": {
"prompt": "说你早上先洗澡。"
}
},
{
"id": "A1-U11-P08",
"type": "phrase",
"en": "I go to bed at eleven.",
"zh": "我十一点睡觉。",
"sceneWord": false,
"match": [
[
"go to bed",
"goes to bed"
]
],
"example": {
"en": "What time do you go to bed?",
"zh": "你几点睡觉?"
},
"review": {
"prompt": "说你通常十二点睡觉。"
}
},
{
"id": "A1-U11-P09",
"type": "phrase",
"en": "In my free time, I read books.",
"zh": "空闲时我看书。",
"sceneWord": false,
"match": [
[
"free time"
]
],
"example": {
"en": "In my free time, I watch videos.",
"zh": "空闲时我玩电子游戏。"
},
"review": {
"prompt": "说你空闲时喜欢做什么。"
}
}
],
"receptiveWords": [
{
"id": "A1-U11-R01",
"en": "wake",
"zh": "醒来(wake up)"
},
{
"id": "A1-U11-R02",
"en": "sleep",
"zh": "睡觉"
},
{
"id": "A1-U11-R03",
"en": "wash",
"zh": "洗"
},
{
"id": "A1-U11-R04",
"en": "clean",
"zh": "打扫;干净的"
},
{
"id": "A1-U11-R05",
"en": "brush",
"zh": "刷"
},
{
"id": "A1-U11-R06",
"en": "tooth",
"zh": "牙齿(复数 teeth)"
},
{
"id": "A1-U11-R07",
"en": "cook",
"zh": "做饭"
},
{
"id": "A1-U11-R08",
"en": "school",
"zh": "学校"
},
{
"id": "A1-U11-R09",
"en": "study",
"zh": "学习"
},
{
"id": "A1-U11-R10",
"en": "teach",
"zh": "教"
},
{
"id": "A1-U11-R11",
"en": "learn",
"zh": "学"
},
{
"id": "A1-U11-R12",
"en": "newspaper",
"zh": "报纸"
},
{
"id": "A1-U11-R13",
"en": "afternoon",
"zh": "下午"
},
{
"id": "A1-U11-R14",
"en": "start",
"zh": "开始"
},
{
"id": "A1-U11-R15",
"en": "finish",
"zh": "完成;结束"
},
{
"id": "A1-U11-R16",
"en": "exercise",
"zh": "锻炼"
},
{
"id": "A1-U11-R17",
"en": "run",
"zh": "跑步"
},
{
"id": "A1-U11-R18",
"en": "homework",
"zh": "作业"
},
{
"id": "A1-U11-R19",
"en": "news",
"zh": "新闻"
},
{
"id": "A1-U11-R20",
"en": "internet",
"zh": "互联网"
},
{
"id": "A1-U11-R21",
"en": "computer",
"zh": "电脑"
},
{
"id": "A1-U11-R22",
"en": "video",
"zh": "视频"
},
{
"id": "A1-U11-R23",
"en": "song",
"zh": "歌曲"
},
{
"id": "A1-U11-R24",
"en": "sing",
"zh": "唱歌"
},
{
"id": "A1-U11-R25",
"en": "dance",
"zh": "跳舞"
},
{
"id": "A1-U11-R26",
"en": "draw",
"zh": "画画"
},
{
"id": "A1-U11-R27",
"en": "swim",
"zh": "游泳"
},
{
"id": "A1-U11-R28",
"en": "weekend",
"zh": "周末"
},
{
"id": "A1-U11-R29",
"en": "week",
"zh": "星期;周"
},
{
"id": "A1-U11-R30",
"en": "life",
"zh": "生活"
}
],
"segments": [
{
"id": "A1-U11-S1",
"title": "早上的安排",
"minutes": 13,
"itemIds": [
"A1-U11-P01",
"A1-U11-P02",
"A1-U11-P03",
"A1-U11-P07",
"A1-U11-P04"
],
"listening": {
"text": "What time do you get up? I get up at six thirty. I take a shower and have breakfast at home. I go to work at seven thirty.",
"question": "说话人几点去上班?",
"options": [
"七点半",
"六点半",
"八点"
]
},
"speaking": [
{
"text": "I get up at seven.",
"tip": "get up 连读成 /ɡe tʌp/"
},
{
"text": "What time do you get up?"
},
{
"text": "I take a shower."
},
{
"text": "I have breakfast at home."
},
{
"text": "I go to work at eight."
}
],
"reading": {
"text": "Mark's morning\nMark wakes up at 6:00. He washes his face and brushes his teeth. He takes a shower. Then he cooks breakfast: eggs and bread.\nAt 7:30, he goes to work. His office is near his home.",
"question": "Mark 早饭吃什么?",
"options": [
"鸡蛋和面包",
"米饭和汤",
"咖啡和蛋糕"
]
},
"writing": {
"prompt": "写两句话:你几点起床、几点去上班。",
"example": "I get up at seven. I go to work at eight.",
"itemIds": [
"A1-U11-P01",
"A1-U11-P04"
]
},
"independent": {
"prompt": "用英语按顺序说说你平时早上做的几件事。",
"itemIds": [
"A1-U11-P01",
"A1-U11-P07",
"A1-U11-P03",
"A1-U11-P04"
]
}
},
{
"id": "A1-U11-S2",
"title": "总是、通常、有时、从不",
"minutes": 13,
"itemIds": [
"A1-U11-W01",
"A1-U11-W02",
"A1-U11-W03",
"A1-U11-W04",
"A1-U11-P06"
],
"listening": {
"text": "I always have breakfast. I usually go to work by bus. I sometimes run in the morning. I never watch TV in the morning.",
"question": "说话人早上从不做什么?",
"options": [
"看电视",
"跑步",
"吃早饭"
]
},
"speaking": [
{
"text": "I always have breakfast."
},
{
"text": "I usually go to work by bus.",
"tip": "usually 读作 /ˈjuːʒuəli/"
},
{
"text": "I sometimes cook dinner."
},
{
"text": "I never watch TV in the morning."
},
{
"text": "I read the newspaper every day."
}
],
"reading": {
"text": "How often do you exercise?\nAnna: I run every day. I always go before work.\nTom: I usually swim on the weekend.\nLily: I sometimes dance at home.\nBen: I never exercise. I'm always busy!",
"question": "谁每天跑步?",
"options": [
"Anna",
"Tom",
"Ben"
]
},
"writing": {
"prompt": "写两句话:说一件你总是做的事和一件你从不做的事。",
"example": "I always have breakfast. I never watch TV in the morning.",
"itemIds": [
"A1-U11-W02",
"A1-U11-W03"
]
},
"independent": {
"prompt": "用 usually、sometimes、never 各说一件你的习惯。",
"itemIds": [
"A1-U11-W01",
"A1-U11-W04",
"A1-U11-W03"
]
}
},
{
"id": "A1-U11-S3",
"title": "晚上和空闲时间",
"minutes": 12,
"itemIds": [
"A1-U11-P05",
"A1-U11-P08",
"A1-U11-P09"
],
"listening": {
"text": "What do you do in the evening? I usually cook dinner and watch TV. In my free time, I read books or watch videos. I go to bed at eleven.",
"question": "说话人几点睡觉?",
"options": [
"十一点",
"十点",
"十二点"
]
},
"speaking": [
{
"text": "I watch TV in the evening."
},
{
"text": "In my free time, I read books."
},
{
"text": "I go to bed at eleven."
},
{
"text": "I study English at night."
}
],
"reading": {
"text": "My week\nI'm a teacher. I teach at a school five days a week. After school, I finish my work and learn English on the computer.\nIn the evening, I listen to the news and songs on the internet. I sometimes sing and draw.\nMy life is busy, but I love it. On the weekend, I sleep late.",
"question": "这位老师晚上做什么?",
"options": [
"在网上听新闻和歌",
"去学校上课",
"很早睡觉"
]
},
"writing": {
"prompt": "写两句话:你晚上常做什么、几点睡觉。",
"example": "I watch TV in the evening. I go to bed at eleven.",
"itemIds": [
"A1-U11-P05",
"A1-U11-P08"
]
},
"independent": {
"prompt": "用英语说说你空闲时喜欢做的两件事。",
"itemIds": [
"A1-U11-P09",
"A1-U11-P05"
]
}
}
],
"scenes": [
{
"id": "A1-U11-C1",
"kind": "main",
"title": "和语言伙伴聊作息",
"learnerRole": "你",
"aiRole": "语言交换伙伴",
"setting": "你和语言交换伙伴视频聊天,互相问对方平时一天怎么过。",
"turns": [
{
"ai": "So, what time do you get up?",
"goal": "说你七点起床",
"model": "I get up at seven.",
"zh": "我七点起床。",
"itemIds": [
"A1-U11-P01"
]
},
{
"ai": "Seven? That's early! What do you do in the morning?",
"goal": "说你洗澡、在家吃早饭",
"model": "I take a shower and have breakfast at home.",
"zh": "我洗个澡,在家吃早饭。",
"itemIds": [
"A1-U11-P07",
"A1-U11-P03"
]
},
{
"ai": "Nice. I never have breakfast. I only have a coffee.",
"goal": "说你八点去上班,再问对方几点起床",
"model": "I go to work at eight. What time do you get up?",
"zh": "我八点去上班。你几点起床?",
"itemIds": [
"A1-U11-P04",
"A1-U11-P02"
]
},
{
"ai": "At nine! I work at home on the computer. In the afternoon, I clean the house. What do you do in the evening?",
"goal": "说你通常晚上看电视",
"model": "I usually watch TV in the evening.",
"zh": "我通常晚上看电视。",
"itemIds": [
"A1-U11-W01",
"A1-U11-P05"
]
},
{
"ai": "Me too. And what time do you go to bed?",
"goal": "说十一点睡觉,从不太晚睡",
"model": "I go to bed at eleven. I never go to bed late.",
"zh": "我十一点睡觉,从不晚睡。",
"itemIds": [
"A1-U11-P08",
"A1-U11-W03"
]
}
]
},
{
"id": "A1-U11-C2",
"kind": "variant",
"title": "体检时回答生活习惯",
"learnerRole": "病人",
"aiRole": "护士",
"setting": "体检时护士问你平时的生活习惯。",
"turns": [
{
"ai": "Hello. I have some questions about your day. Do you exercise?",
"goal": "说你有时候早上跑步",
"model": "Yes, I sometimes run in the morning.",
"zh": "有,我有时候早上跑步。",
"itemIds": [
"A1-U11-W04",
"A1-U11-P05"
]
},
{
"ai": "Good. Do you have breakfast every day?",
"goal": "说你总是吃早饭",
"model": "Yes, I always have breakfast.",
"zh": "是的,我总是吃早饭。",
"itemIds": [
"A1-U11-W02",
"A1-U11-P03"
]
},
{
"ai": "What time do you go to bed?",
"goal": "说通常十二点睡觉",
"model": "I usually go to bed at twelve.",
"zh": "我通常十二点睡觉。",
"itemIds": [
"A1-U11-W01",
"A1-U11-P08"
]
},
{
"ai": "That's late. How many hours do you sleep?",
"goal": "说每天睡七个小时",
"model": "I sleep seven hours every day.",
"zh": "我每天睡七个小时。",
"itemIds": [
"A1-U11-P06"
]
},
{
"ai": "OK. And in your free time?",
"goal": "说空闲时你看书",
"model": "In my free time, I read books.",
"zh": "空闲时我看书。",
"itemIds": [
"A1-U11-P09"
]
}
]
},
{
"id": "A1-U11-C3",
"kind": "variant",
"title": "和新室友商量早上的时间",
"learnerRole": "室友",
"aiRole": "新室友",
"setting": "你和新室友住在一起,商量早上谁先用浴室。",
"turns": [
{
"ai": "Hi! What time do you get up?",
"goal": "说你六点半起床",
"model": "I get up at six thirty.",
"zh": "我六点半起床。",
"itemIds": [
"A1-U11-P01"
]
},
{
"ai": "Oh, I get up at seven. Do you take a shower in the morning?",
"goal": "说你总是早上洗澡",
"model": "Yes, I always take a shower in the morning.",
"zh": "是的,我总是早上洗澡。",
"itemIds": [
"A1-U11-W02",
"A1-U11-P07",
"A1-U11-P05"
]
},
{
"ai": "OK. You can use the bathroom first. What time do you go to work?",
"goal": "说你七点半去上班",
"model": "I go to work at seven thirty.",
"zh": "我七点半去上班。",
"itemIds": [
"A1-U11-P04"
]
},
{
"ai": "I start school at nine. I'm a student. Do you have breakfast at home?",
"goal": "说有时候在家吃,再问对方几点睡觉",
"model": "Sometimes. What time do you go to bed?",
"zh": "有时候。你几点睡觉?",
"itemIds": [
"A1-U11-W04",
"A1-U11-P08"
]
},
{
"ai": "Usually at twelve. I do my homework late.",
"goal": "说你十一点睡觉,请对方晚上安静一点",
"model": "I go to bed at eleven. Please be quiet at night.",
"zh": "我十一点睡觉。晚上请安静一点。",
"itemIds": [
"A1-U11-P08",
"A1-U11-P05"
]
}
]
}
],
"tasks": [
{
"id": "A1-U11-T1",
"sceneId": "A1-U11-C1",
"goal": "和语言伙伴互相介绍一天的作息",
"itemIds": [
"A1-U11-P01",
"A1-U11-P07",
"A1-U11-P03",
"A1-U11-P04",
"A1-U11-P02",
"A1-U11-W01",
"A1-U11-P05",
"A1-U11-P08",
"A1-U11-W03"
],
"slots": [
"起床",
"上班",
"晚上",
"睡觉"
]
},
{
"id": "A1-U11-T2",
"sceneId": "A1-U11-C2",
"goal": "回答护士关于运动、早饭、睡眠和空闲时间的问题",
"itemIds": [
"A1-U11-W04",
"A1-U11-P05",
"A1-U11-W02",
"A1-U11-P03",
"A1-U11-W01",
"A1-U11-P08",
"A1-U11-P06",
"A1-U11-P09"
],
"slots": [
"运动",
"早饭",
"睡眠"
]
},
{
"id": "A1-U11-T3",
"sceneId": "A1-U11-C3",
"goal": "和室友商量早上的时间安排",
"itemIds": [
"A1-U11-P01",
"A1-U11-W02",
"A1-U11-P07",
"A1-U11-P05",
"A1-U11-P04",
"A1-U11-W04",
"A1-U11-P08"
],
"slots": [
"起床时间",
"洗澡",
"睡觉时间"
]
}
],
"materials": [
{
"id": "A1-U11-M1",
"mode": "listening",
"title": "介绍我的一天",
"text": "This is my normal day. I wake up at seven and get up. I wash my face and brush my teeth, then I take a shower. I have breakfast and clean the kitchen. I go to school at eight to study and learn. I usually eat lunch with friends. In the afternoon my classes start again, and I do my homework. I finish at five. In the evening I sometimes cook, read the newspaper, or watch the news on TV. In my free time I run, swim, sing, dance or draw. On the weekend I use the internet and watch videos. I never sleep late; I go to bed at eleven.",
"glosses": {
"normal": "平常的",
"teeth": "牙齿",
"classes": "(复数)课"
},
"questions": [
{
"type": "gist",
"question": "这段话主要讲什么?",
"options": [
"说话人每天的作息和常做的事",
"一次旅行",
"怎么买衣服"
]
},
{
"type": "detail",
"question": "说话人早上先做什么?",
"options": [
"洗脸、刷牙",
"去上学",
"做作业"
]
}
]
},
{
"id": "A1-U11-M2",
"mode": "reading",
"title": "读一段对话:聊日常和爱好",
"text": "Mia: What time do you wake up?\nBen: I usually wake up at six thirty and go for a run. And you?\nMia: I never get up early! I wash and brush my teeth at eight.\nBen: Do you go to school?\nMia: Yes, I study music at college. I teach a small class on the weekend too.\nBen: What do you do in your free time?\nMia: I sing, dance and draw. Sometimes I swim. I like this life! What about you?\nBen: After work I clean the house, cook, and read the news on the internet.\nMia: Do you watch TV?\nBen: No, I never watch TV. But I like videos and songs.\nMia: Me too. Let's swim together this weekend!",
"glosses": {
"together": "一起",
"college": "大学",
"class": "课"
},
"questions": [
{
"type": "detail",
"question": "Mia 空闲时喜欢做什么?",
"options": [
"唱歌、跳舞、画画",
"跑步",
"看电视"
]
},
{
"type": "detail",
"question": "关于看电视,Ben 怎么说?",
"options": [
"他从不看电视",
"他每天看电视",
"他晚上看电视"
]
}
]
}
],
"excluded": [
{
"en": "routine",
"reason": "B1;A1 用 my day 表达"
},
{
"en": "gym",
"reason": "B1;A1 用 exercise / run / swim 表达运动"
}
]
}