--- name: keping-dir-standardize description: 将课评目录迁移到标准结构。当用户说"规范目录"、"整理目录"、"目录规范化"、"初始化目录"、"初始化项目"时触发。自动识别当前目录范式,创建标准 .claude/memory/class/ 结构,迁移现有数据(不删除原文件),补建缺失目录,配置课程大纲同步。如果是全新仓库,参考标准仓库创建项目。 --- # 课评目录规范化 Skill ## 功能概述 将老师仓库中的课评数据迁移到统一标准目录结构。 - 自动识别 4 种现有目录范式 - 创建标准 `.claude/memory/class/` 结构 - 迁移现有课评和画像文件(移动,不删除) - 补建缺失的 `feedback/`、`profile.md`、`summary/`、`补课/` 目录 - 配置课程大纲同步(从独立仓库同步,不提交到本仓库) - 支持"全新项目"场景(参考标准仓库创建) - 生成迁移报告 ## 触发条件 用户说出以下任意表达时触发: - "规范目录" - "整理目录" - "目录规范化" - "初始化目录" - "初始化项目" - "标准化目录" - "迁移目录" ## 安全原则 1. **绝不删除文件** — 只移动(mv)到新位置,原位置的文件迁移后不再保留副本 2. **绝不修改文件内容** — 只改变文件路径和文件名 3. **先报告再执行** — 必须先向用户展示迁移计划,确认后再执行 4. **遇到不确定的情况就停下问** — 不要猜测 ## 参考仓库(标准范例) **克力老师的仓库**是最完整的标准范例: `https://git.qonnwolf.com/keli/ClassFeedback` 新老师或需要补充项目的老师,克隆这个仓库来参考目录结构和配置,但**不是照抄**——只参照结构,数据用自己的。 ## 目标结构 ``` .claude/ ├── memory/ │ ├── class/ # 【核心 - 所有班级课评数据】 │ │ ├── CSP05克力周六1600/ # 班级名 = 课程编号+老师+星期+时间 │ │ │ ├── summaries/ # 班级总结/群发文案 │ │ │ │ ├── YYYYMMDD_CSP05-07_班级反馈.md │ │ │ │ └── YYYYMMDD_CSP05-07_微信群.txt │ │ │ ├── 张三/ # 本班学生 │ │ │ │ ├── feedback/ # 个人课评目录 │ │ │ │ │ ├── YYYYMMDD_CSP05-07.md # 正常课评 │ │ │ │ │ ├── YYYYMMDD_CSP05-07(请假).md # 请假记录 │ │ │ │ │ ├── YYYYMMDD_CSP05-07(补课-去AI03茄子周六1900).md # 补课追踪 │ │ │ │ │ └── ... │ │ │ │ ├── profile.md # 学生画像 │ │ │ │ └── summary/ # 阶段性总结 │ │ │ │ └── 2026-05_月度总结.md │ │ │ ├── 李四/ │ │ │ │ └── ... │ │ │ └── 补课/ # 补课学生专用目录 │ │ │ └── 王五/ # 来自其他班级的补课学生 │ │ │ └── feedback/ │ │ │ └── YYYYMMDD_CSP05-07.md │ │ ├── AICODE03菠萝周六1600/ │ │ │ └── ...(结构同上) │ │ ├── SPIKE02小Q周六1400/ │ │ │ └── ...(结构同上) │ │ └── KITTEN04洋芋周六1600/ │ │ └── ...(结构同上) │ ├── lesson/ # 课程大纲(从独立仓库同步,不提交) │ │ ├── README.md │ │ ├── CSP/ ← 信息学奥赛课 │ │ │ ├── CSP01/ │ │ │ └── ... │ │ ├── AICODE/ ← AI人工智能课 │ │ │ ├── AICODE01/ │ │ │ └── ... │ │ ├── SPIKE/ ← 乐高搭建课 │ │ ├── KITTEN/ ← 图形化编程课 │ │ ├── VEXIQ/ ← VEX机器人课 │ │ └── GESP/ ← 竞赛项目课 │ └── oj/ # OJ数据分析(仅 CSP 班级,可选) │ └── analysis/ └── skills/ # 技能脚本(可选) ``` ### 班级命名规则 格式:`课程编号+老师+星期+时间` | 类目 | 前缀 | 示例班级名 | |------|------|-----------| | 信息学奥赛课 | CSP | `CSP05克力周六1600`、`CSP01六六周六1045` | | AI人工智能课 | AICODE、AIMAKE | `AICODE03菠萝周六1600`、`AIMAKE02东东周五1630` | | 乐高搭建课 | SPIKE、WEDO、FAXIAN 等 | `SPIKE02菠萝周六1400`、`WEDO01小Q周六1030` | | 图形化编程课 | KITTEN、SCRATCH | `KITTEN04洋芋周六1600`、`SCRATCH03橙子周五1900` | | VEX机器人课 | VEXIQ、VEXGO 等 | `VEXIQ01菠萝周六1400` | | 竞赛项目课 | GESP、ENJOYAI 等 | `GESP03克力周日0900`、`ENJOYAI01东东周六1400` | ### 课程类目与编号前缀 用于从课程编号前缀识别课程类目,规范班级命名和分类: | 类目 | 课程前缀(不含数字) | |------|---------------------| | 乐高搭建课 | YISHI、HUOCHE、MATATA、FAXIAN、FAMING、WEDO、ROCKET、SPIKE | | 图形化编程课 | KITTEN、SCRATCH | | VEX机器人课 | VEXGO、VEXPRE、VEXIQ、V5RC | | AI人工智能课 | AICODE、AIMAKE | | 信息学奥赛课 | CSP | | 竞赛项目课 | ENJOYAI、BOTBALL、ROBORAVE、GOC、GESP、CSP-J、NCT、CSP-S、INFOR、LABOR、FSHH | | 杂项类目课 | XITI、CUSTOM、FESTIVAL | ### 考勤状态说明 每次课后,每位学生必须有且仅有一条 feedback 文件: | 状态 | 文件名 | 说明 | |------|--------|------| | 正常 | `YYYYMMDD_课程编号.md` | 完整课评 | | 请假 | `YYYYMMDD_课程编号(请假).md` | 简要记录 | | 补课 | `YYYYMMDD_课程编号(补课).md` | 记录补课 | ### 补课双向追踪 **1) 接收补课(外班学生来本班)**: - 存放在 `补课/学生名/feedback/YYYYMMDD_课程编号.md` - 不建 `profile.md` 和 `summary/` - 课评开头注明来源:`(补课,来自 CSP05克力周六1600)` **2) 外出补课(本班学生去别班)**: - 存放在学生自己的 `feedback/YYYYMMDD_课程编号(补课).md` - AI 读取后知道该学生当天的课评在补课班级 ### 课程大纲同步 `.claude/memory/lesson/` 从独立仓库同步,**不提交到老师自己的仓库**: | 目录 | 类目 | 来源 | |------|------|------| | `lesson/CSP/` | 信息学奥赛课 | `https://git.qonnwolf.com/keli/CSP2026` | | `lesson/AICODE/` | AI人工智能课 | `https://git.qonnwolf.com/keli/AICODE2026` | | `lesson/GESP/` | 竞赛项目课 | 按实际仓库配置 | | 其他前缀目录 | 对应类目 | 按实际仓库配置 | 需在 `.gitignore` 中添加:`.claude/memory/lesson/` ## 执行流程 ### 场景判断 先判断属于哪种场景: | 场景 | 判断条件 | 处理方式 | |------|---------|---------| | **全新项目** | 没有 `.claude/memory/class/` 或任何课评数据 | 参考标准仓库创建 | | **已有项目** | 有课评数据但结构不标准 | 识别范式后迁移 | ### ===== 场景一:全新项目 ===== 适用于:刚加入协作的老师,或者还没有建立 ClassFeedback 仓库的老师。 #### 第 1 步:确认老师信息 向用户询问: 1. 老师昵称/真名 2. 手机号(用于远端仓库地址) 3. 负责的班级列表(课程编号+上课时间) 4. 每个班级的学生名单 #### 第 2 步:参考标准仓库创建结构 克隆标准仓库作为参考: ```bash git clone https://git.qonnwolf.com/keli/ClassFeedback /tmp/standard-ref ``` **从标准仓库中参考的部分**(只参考结构,不复制数据): - `.claude/memory/class/` 的目录组织方式 - `.claude/memory/class/班级/学生/feedback/` + `profile.md` + `summary/` - `.claude/memory/class/班级/summaries/` 班级总结目录 - `.claude/memory/class/班级/补课/` 补课目录 - `.claude/memory/lesson/README.md` 大纲来源说明 - `.gitignore` 中的忽略规则 **不需要参考的部分**(每个老师自己维护): - `.claude/memory/class/` 下的实际学生数据 - `.claude/memory/oj/` OJ 数据(仅 CSP 老师需要) - `.claude/rules/` 规则文件(各老师可能有不同风格) - `.claude/skills/` 技能文件 #### 第 3 步:创建目录结构 ```bash # 为每个班级创建结构(示例覆盖不同课程类目) for class in "CSP05克力周六1600" "AICODE03菠萝周六1600" "SPIKE02小Q周六1400" "KITTEN04洋芋周六1600"; do mkdir -p ".claude/memory/class/${class}/summaries" mkdir -p ".claude/memory/class/${class}/补课" # 为每个学生创建结构 for student in 张三 李四 王五; do mkdir -p ".claude/memory/class/${class}/${student}/feedback" mkdir -p ".claude/memory/class/${class}/${student}/summary" # 创建画像模板 cp profile_template.md ".claude/memory/class/${class}/${student}/profile.md" done done # 创建课程大纲目录(按实际需要的课程前缀创建) mkdir -p ".claude/memory/lesson/CSP" mkdir -p ".claude/memory/lesson/AICODE" mkdir -p ".claude/memory/lesson/GESP" # 其他课程前缀按需创建:SPIKE、KITTEN、VEXIQ 等 ``` #### 第 4 步:创建基础文件 1. **创建 `.gitignore`**: ```gitignore .claude/ !.claude/memory/ !.claude/memory/class/ !.claude/memory/lesson/README.md .claude/memory/lesson/*/ ``` 2. **创建 lesson/README.md**(记录大纲来源) 3. **同步课程大纲**(如果网络可用) 4. **创建 CLAUDE.md**(可选,记录本仓库的基本信息) ### ===== 场景二:已有项目迁移 ===== #### 第 1 步:识别当前目录范式 扫描当前仓库,判断属于哪种范式: | 范式 | 特征 | |------|------| | **A: 标准型** | `.claude/memory/class/` 下有班级目录 | | **B: 三件套型** | `memory/student/` 或 `memory/学生/`,每学生"画像+素材+历史课评" | | **C: 分离式** | 课评在 `.claude/课评/`,画像在 `.claude/memory/用户画像/` | | **D: 散落型** | `课堂记录/`、`ClassFeedback/` 或根目录级 | **识别方法**(按优先级检测): 1. 存在 `.claude/memory/class/` → 范式 A 2. 存在 `memory/student/` 或 `memory/学生/` → 范式 B 3. 存在 `.claude/课评/` → 范式 C 4. 存在 `课堂记录/` 或 `ClassFeedback/` → 范式 D 5. 以上都不存在 → 按场景一(全新项目)处理 #### 第 2 步:收集班级和学生信息 **从目录结构中提取**: - 扫描现有目录,列出所有班级名和学生名 **从 CLAUDE.md 或 README.md 补充**: - 读取本仓库的 CLAUDE.md,查找班级/课程信息 **与用户确认**: - 如果班级名缺少"星期+时间"(如只有 `AICODE03班`),询问用户补全 - 格式参考:`CSP05克力周六1600` #### 第 3 步:生成迁移计划 向用户展示迁移计划,包含: 1. 范式识别结果 2. 将创建的目录结构预览 3. 文件迁移清单(原路径 → 新路径) 4. 不迁移的文件(保留原位) **必须等用户确认后再执行。** #### 第 4 步:执行迁移 用户确认后,按计划执行: **范式 A**(已接近标准,微调即可): - 重命名班级目录(如果名称不规范) - 确保每个学生有 feedback/、profile.md、summary/ - 创建 summaries/ 和 补课/ 目录 **范式 B**(三件套型): - 创建标准 `.claude/memory/class/` 结构 - `用户画像.md` → `profile.md` - `历史课评记录.md` → `summary/历史课评记录.md` - `成长素材.md` → `summary/成长素材.md` - 单次课程记录 → `feedback/YYYYMMDD_课程编号.md` **范式 C**(分离式): - 创建标准结构 - 从集中画像目录迁移到各班级下 - 课评文件迁移到 feedback/ **范式 D**(散落型): - 创建标准结构 - 全班课评汇总 → `summaries/` - 从校宝 API 或人员名单获取学生列表,创建个人目录 #### 第 5 步:补建缺失内容 1. **profile.md 模板** — 对没有画像的学生创建空模板 2. **补课目录** — 每个班级下创建 `补课/` 3. **summaries 目录** — 每个班级下确保有 `summaries/` #### 第 6 步:配置课程大纲同步 1. 创建 `lesson/` 目录和子目录 2. 创建 `lesson/README.md`(记录来源仓库) 3. 更新 `.gitignore`,添加 `.claude/memory/lesson/*/`(忽略所有课程大纲子目录) 4. 如果网络可用,克隆并同步大纲 #### 第 7 步:更新 CLAUDE.md 更新仓库的 CLAUDE.md(如果存在): - 更新目录结构说明 - 添加课程大纲同步说明 - 添加考勤状态记录说明(请假/补课) #### 第 8 步:生成迁移报告 输出迁移报告,包含: - 仓库信息(老师、范式变化) - 迁移统计(班级数、学生数、文件数) - 班级结构表 - 后续建议 ## profile.md 空模板 ```markdown # {学生姓名} - 画像 ## 基本信息 - 班级:{班级名} - 入班时间: - 年龄/年级: ## 性格特点 (待观察填写) ## 学习风格 (待观察填写) ## 课堂表现 (待观察填写) ## 编程能力 - 理解力: - 动手能力: - 创造力: - 调试能力: ## 家长沟通 (待记录) ``` ## 请假记录模板 ```markdown # 请假记录 **日期**: {YYYY-MM-DD} **课程**: {课程编号} **学生**: {学生姓名} **状态**: 请假 **原因**: (如有) ``` ## 补课追踪模板(原班级侧) ```markdown # 补课记录 **日期**: {YYYY-MM-DD} **原课程**: {原课程编号} **学生**: {学生姓名} **状态**: 补课 **补课班级**: {目标班级名} **补课老师**: {目标老师} ``` ## 注意事项 1. **处理所有课程类型** — 按课程类目表覆盖全部前缀(乐高搭建、图形化编程、VEX机器人、AI人工智能、信息学奥赛、竞赛项目、杂项),全部统一规范 2. **CSP 特殊处理** — CSP 班级可能有 `oj/` 数据目录,保持不动 3. **文件名中的课程编号** — 统一用 `课程编号-课次` 格式(如 `CSP05-07`、`AICODE03-02`、`SPIKE02-05`、`KITTEN04-03`) 4. **补课学生** — 在补课班级只有 feedback/,不建 profile.md 和 summary/ 5. **全班课评** — 范式 D 的全班课评放到 summaries/ 下,不强行拆分为个人课评 6. **不确定就问** — 如果班级时间信息缺失、学生归属不明,停下来问用户 7. **不碰 .claude/rules/ 和 .claude/skills/** — 这些是配置文件,不在迁移范围内 8. **lesson 不提交** — 课程大纲目录加入 .gitignore,大纲从独立仓库同步