Files
doodle-mini/skills/update-age-config/SKILL.md
T
2026-05-20 17:57:39 +08:00

244 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: update-age-config
description: >-
基于 cache/page-config.json 更新分龄页 age.config.ts 中的 AGE_ABILITIES 与
AGE_WEEK_PLANS。在用户说「更新分龄页数据」「更新分龄config」「更新分龄学习计划」
或同类表述时使用;每次执行须同时更新上述两个常量。
---
# Skill: update-age-config
> 一次性更新 `miniprogram/pages/age/age.config.ts` 中的 **`AGE_ABILITIES`** 与 **`AGE_WEEK_PLANS`**。
## 触发条件
当用户提到以下内容时**必须**使用本 Skill(不再使用已废弃的 `generate-age-abilities` / `generate-age-weekly-plans`):
- 「更新分龄页数据」
- 「更新分龄 config」
- 「更新分龄学习计划」
- 含义相同的表述(更新分龄能力目标 + 周计划)
## 角色与范围
你是一位拥有 25 年经验的儿童早教专家,专注于 3-8 岁儿童的认知发展和学习能力培养。你需要基于当前系统中**已上线**的所有 worksheet(打印练习册)内容,为 **5 个固定年龄段**生成:
1. 精准的能力目标(`AGE_ABILITIES`
2. 科学的 4 周学习路线(`AGE_WEEK_PLANS`
**每次执行本 Skill,必须同时完成以上两部分**,不得只更新其一。
### 不可改动的约束
- **只修改** `AGE_ABILITIES``AGE_WEEK_PLANS` 两个常量的对象内容。
- **禁止修改**`AGE_TAB_SUB`、类型定义、`age.ts` 逻辑、其他 export。
- 两个常量的 **key 必须且仅能**为以下 5 个(与 `AgeBandKey` 一致,顺序建议保持一致):
- `'3-4'``'4-5'``'5-6'``'6-7'``'7-8'`
- **禁止**新增、删除或重命名年龄段 key。
---
## Step 1:读取 worksheet 数据源
**唯一数据源(必须):** `cache/page-config.json`(项目根目录下,非 `.cache`)。
1. 读取该文件;若不存在,提示用户先同步云存储到 `cache/page-config.json` 后重试,**不要**编造 worksheet。
2. 从 JSON 汇总全部 worksheet
- 优先遍历 `home.sections[].items[]`(按分类聚合的主列表)
- 可对 `home.featured[]``home.hot[]` 做去重合并(以 `id` 为准,避免遗漏仅出现在推荐位的条目)
3. 从每个 item 提取:
- `id`(写入周计划时作为 `_id`
- `title``subtitle``path`
- `category``ageBand``difficulty`
- 若有:`ageMin` / `ageMax``downloads``likes`
执行后**先向用户简报**:worksheet 总数、各 `category` 数量、各年龄段可匹配数量,请用户确认数据为最新。
### 年龄段匹配规则
数据源中 `ageBand` 多为「3-5岁」「4-6岁」等区间文案。映射到 config key 时:
- 使用 `core/data/difficulty.ts``AGE_BANDS``minAge` / `maxAge`
- 若 item 的适龄区间与某 `AgeBandKey` 有重叠,则归入该段(一条 worksheet 可属于多个年龄段)
- 无重叠时跳过,**不要**强行编造
### 分类体系(参考)
| category | 含义 |
| --------- | -------- |
| `math` | 数感启蒙 |
| `puzzle` | 益智游戏 |
| `pinyin` | 汉语拼音 |
| `chinese` | 识字练字 |
| `english` | 英语启蒙 |
| `craft` | 创意手工 |
---
## Step 2:生成 `AGE_ABILITIES`
为每个年龄段生成 **3 个**核心能力维度(`AbilityItem[]`)。
### 生成原则
1. **基于实际内容**:必须反映该年龄段在数据源中**真实存在**的 worksheet,禁止空谈
2. **发展阶梯性**5 个年龄段之间能力描述有明显递进
3. **具体可衡量**:落到可练习技能点,避免笼统
4. **简洁有力**:每个 `desc` ≤ 10 个汉字,顿号分隔 2–3 个技能点
### 能力维度选择参考(可按实际 worksheet 调整)
- 🔢 数感(数字认知、计算)
- ✏️ 书写(笔画、汉字、拼音书写)
- 🧩 思维(逻辑推理、空间想象、专注力)
- 🔤 语言(拼音、英语启蒙)
- 🎨 创造(手工、绘画,若该段有 craft 内容)
若某年龄段内容集中在特定领域,可调整维度名称以更贴合实际。
### 输出数据结构
```ts
export const AGE_ABILITIES: Record<AgeBandKey, AbilityItem[]> = {
'3-4': [
{ icon: '🔢', title: '数感', desc: '认读 1-5、点数对应' },
{ icon: '✏️', title: '书写', desc: '涂鸦线条、简单描红' },
{ icon: '🧩', title: '思维', desc: '找相同、简单配对' },
],
'4-5': [
/* 3 项 */
],
'5-6': [
/* 3 项 */
],
'6-7': [
/* 3 项 */
],
'7-8': [
/* 3 项 */
],
};
```
### 能力目标验证
- [ ] 每个 key 下恰好 3 项
- [ ] `desc` 字数合规
- [ ] 五段递进合理
- [ ] `icon` 为合适 emoji
- [ ] 符合 `AbilityItem` 类型
---
## Step 3:生成 `AGE_WEEK_PLANS`
为每个年龄段设计 **4 周**学习计划(`WeekPlan[]`),每周 **3 个**练习(`WeekExercise`)。
### 编排原则
1. **由易到难**:第 1 周偏入门,逐周提升
2. **跨领域覆盖**4 周合计覆盖该段可用的多个 `category`
3. **主题连贯**:每周有明确 `theme`46 个汉字)
4. **基于实际内容**:每条练习必须来自数据源,**禁止**虚构 `_id` / `path`
5. **合理搭配**:每周 3 个练习尽量来自不同分类
6. **第 4 周综合**:综合巩固前 3 周核心技能
### 主题命名规范
- 46 个汉字,体现当周重点
- 示例:数感启蒙、形状与连线、趣味专注、综合练习、拼音入门
### worksheet 不足时
- 不足 12 条(4×3)时,允许同一条在不同周出现,但同一年龄段内尽量少重复
- 某段完全无匹配项时,可选用相邻年龄段且 **ageBand 最接近** 的真实条目,并在回复中说明
- 仍须使用数据源中的真实 `id``_id``title``subtitle``path`
### 选题优先级
在同一年龄段内,优先 `downloads + likes` 较高、难度与周次匹配的 worksheet。
### 输出数据结构
```ts
export type WeekExercise = {
_id: string; // = 数据源 item.id
title: string;
subtitle: string;
path: string; // 与数据源完全一致,可含 query
};
export const AGE_WEEK_PLANS: Record<AgeBandKey, WeekPlan[]> = {
'3-4': [
{
week: 1,
theme: '数感启蒙',
exercises: [
{
_id: 'number-find',
title: '找数字,涂一涂',
subtitle: '找出目标数字并涂色',
path: '/mathPages/mathDraw/mathDraw?id=number-find',
},
// 共 3 条
],
},
// week: 2, 3, 4
],
// '4-5' … '7-8'
};
```
### 周计划数据规范
- 每个年龄段 **4**`WeekPlan``week` 为 14
- 每个 `WeekPlan` **3**`exercises`
- 四字段齐全:`_id``title``subtitle``path`
- `_id``path``subtitle``cache/page-config.json` **逐字一致**
### 周计划验证
- [ ] 结构:5 段 × 4 周 × 3 练习 = 60 条
- [ ] 抽查 `_id` / `path` 可在数据源中找到
- [ ] 难度与年龄段匹配
- [ ] 同段跨周尽量少重复同一 `_id`
- [ ] 符合 `WeekPlan` / `WeekExercise` 类型
---
## Step 4:写入 `age.config.ts`
1. 读取 `miniprogram/pages/age/age.config.ts`
2. **仅替换** `AGE_ABILITIES``AGE_WEEK_PLANS` 两个常量的完整对象字面量
3. 保持文件其余部分不变(import、类型、注释风格与周边代码一致)
4. 勿改动 `AGE_WEEK_PLANS` 上方关于数据源的注释含义,可将 `.cache` 字样改为 `cache/page-config.json`(若仍存在旧路径描述)
---
## Step 5:交付说明
完成后用中文简要汇报:
- 数据源 worksheet 数量
- 各年龄段入选周计划条数
- 能力目标是否有维度调整(相对旧版)
- 是否有个别年龄段 worksheet 不足及处理方式
---
## 相关文件
| 文件 | 说明 |
| ------------------------------------- | -------------------------- |
| `cache/page-config.json` | **唯一** worksheet 数据源 |
| `miniprogram/pages/age/age.config.ts` | 写入目标 |
| `miniprogram/pages/age/age.ts` | 分龄页引用(只读) |
| `miniprogram/core/data/difficulty.ts` | `AGE_BANDS` / `AgeBandKey` |
| `miniprogram/core/data/categories.ts` | 分类定义 |
| `docs/分龄页内容管理方案.md` | 方案文档(若有) |
## 已废弃 Skill(勿再使用)
- `skills/generate-age-abilities/` → 已合并至本 Skill
- `skills/generate-age-weekly-plans/` → 已合并至本 Skill