# 项目记忆文件

## 课评工作流优化框架（v4.5）
> 创建日期：2026-05-16 | 基于实际跑流度的经验总结
> 更新日期：2026-05-20

### v4.5 更新内容
- **表单直连提交**：网页表单直接 POST 到本地服务器（`src/form_server.py`），AI 通过检测 `.claude/.tmp/EVALUATION_READY.txt` 信号文件自动触发课评生成，彻底取消「复制→粘贴」步骤
- **补课存储规则简化**：取消补课专用目录和双向记录，补课记录统一保存在学生原班级，文件名加 `_补课` 后缀
- **体验课记录扁平化**：体验课记录统一放在 `体验课记录/` 目录，命名格式 `日期-班级-课程主题.md`，一个文件可包含多个学生
- **临时数据清理**：课评保存完成后自动清理 `.claude/.tmp/` 下的 JSON 和信号文件

---

## 课评工作流优化框架（v4.4）
> 创建日期：2026-05-16 | 基于实际跑流度的经验总结

### 优化核心：「Form-First」三步式

```
/周几 → 选班级 → 自动打开网页表单 → 填表提交 → 自动生成保存
```

> **适用范围**：所有上课日（周一~周日），`/周六`、`/周日`、`/周四`、`/周五` 等均按此流程执行

### 关键规则

#### 规则1：自动推演课程进度
选择班级后，系统自动从 `summaries/` 读取最新课次，推算当前课次：
- 若上次课距当前日期>1周且全班请假 → 提示"需补课吗？"供确认
- 否则直接使用下一课次
- **目标：减少1轮"确认课程"的交互**

#### 规则2：默认网页表单输入（Form-First）
选择班级后**默认直接创建并打开网页表单**，不先展示文本输入：
- 表单包含每个学生的：状态按钮（出勤/请假/体验/补课）+ 独立文本区
- 表单显示学生画像摘要（性格特点、上次表现）
- 显示速记符号参考
- **目标：消除"需要输入框→创建表单"的切换摩擦**

#### 规则3：表单直连提交 + 输出头信息
网页表单增加"直接提交"功能，提交后：
- 后台自动接收数据
- 输出内容头部自动包含：班级名称、课程编号·主题、日期
- 系统可自动识别班级和课次，不会搞错
- **目标：消除"复制粘贴回聊天"的中间步骤 + 消除班级/课次识别错误**

#### 规则4：表单辅助功能
- 填写进度条：实时显示已填写/总人数（含补课学生）
- 待填写提示：红色标记未填写的学生
- 输入框状态：填写后自动变绿，视觉反馈
- 一键复制：复制到剪贴板，带成功提示
- **补课/体验学生区** 🆕：虚线边框独立区域，可动态添加多个补课学生，含姓名输入、状态（补课/体验）、表现描述，进度条自动计算在内

#### 规则5：年级感知
根据班级课程类型自动选择输出模板：
- 学龄前（TUBE/DISC/INVENT/CREATE）→ 学龄前格式
- 小学（SPIKE/AICODE03）→ 小学格式

### 已确认优化效果
- 交互轮数：5轮 → 3轮
- 输入方式：聊天文本→临时表单 → **默认网页表单**
- 课程确认：需人工回答 → **自动推算**
- 数据提交：手动复制粘贴 → **一键提交**

### 规则6：课评文字代码块包裹（便于预览复制）
班级总结文件（`*_班级反馈.md`）中，每位学生的课评正文必须用**代码块 ` ``` ` 包裹**，而非引用块 `>` 或纯文本：
- 代码块在 VS Code 预览时右上角显示**复制按钮**，方便一键复制课评文字
- 格式示例：
  ```markdown
  **课评内容**

  ```
  {课评正文}
  ```
  ```
- 请假/体验等无课评正文的学生，用 `**状态**：` 描述即可，无需代码块

## Hard Constraints
- All class days (Monday-Sunday) must follow the Form-First workflow
- Course progress must be automatically matched based on current week's date using semester week mapping (NOT inferred from last session progress)
- Web forms must be created by default for student performance input, no manual text input first
- Web forms must support direct POST submission to local server (`src/form_server.py`) — **no copy-paste required**
- AI detects `.claude/.tmp/EVALUATION_READY.txt` signal file to auto-trigger evaluation generation
- Temporary JSON and signal files in `.claude/.tmp/` are auto-cleaned after save completion
- **补课记录存储规则（v4.5）**：跨班级补课学生，课评文件保存在学生原班级 `feedback/` 目录，文件名加 `_补课` 后缀（如 `20260505_DISC-009_补课.md`），不再创建补课专用目录或双向记录
- **体验课记录规则（v4.5）**：体验课记录统一放在 `.claude/memory/class/体验课记录/` 目录，命名格式 `日期-班级-课程主题.md`（如 `2025-05-17-SPIKE-电动螺丝刀.md`），一个文件可包含多个体验学生

## Engineering Conventions
- Class selection is triggered by "/weekday" (e.g., "/周六", "/周四")
- Class lists display current week's course theme based on semester week number (e.g., Week 11 → DISC-011 鳄鱼)
- Student input forms include individual text areas and attendance status buttons
- Form data is saved as JSON to `.claude/.tmp/evaluation_input_{class}.json` via POST to local server
- Signal file `.claude/.tmp/EVALUATION_READY.txt` triggers AI to read JSON and generate evaluations
- Temporary JSON files and signal files are auto-cleaned after evaluation saving is complete
- **补课记录命名（v4.5）**：`YYYYMMDD_课程编号-课次_补课.md`，保存在学生原班级 `feedback/` 目录
- **体验课记录命名（v4.5）**：`日期-班级-课程主题.md`（如 `2025-05-17-SPIKE-电动螺丝刀.md`），保存在 `.claude/memory/class/体验课记录/` 目录

## Lessons Learned
- Manual course confirmation caused unnecessary interaction rounds; automatic inference saves time
- Chat-based text input was replaced with web forms due to user preference for dedicated input fields
- Course theme should be determined by current week's scheduled theme, not by tracking last session's progress
- Copy-paste from web form to chat was the #1 friction point; local server POST + signal file eliminates it entirely
- Generated form files must be auto-cleaned after use to avoid project directory clutter
- **补课记录简化（v4.5）**：双向记录和补课专用目录造成文件冗余，改为单记录保存在原班级更简洁
- **体验课扁平化（v4.5）**：多层嵌套目录不利于快速查看，扁平化结构更符合使用习惯
