# 2026-05-12 工作日志

## 会话记录

### 刘彦江 — 021301-021801 图片描述修正 + 技能更新（09:35 ~ 09:45）
- **问题：** 021301-021801 信息匹配题的图片描述缺少 `【Notice Type】` 标签，格式不符合参考规范
- **处理：**
  1. 查询 bitable 获取6条记录当前图片描述（tblCgfYDnnqwLfgH）
  2. 按每道题的上下文匹配对应的标识/通知类型标签（如 Show Poster、Wanted Notice、School Notice 等）
  3. 批量更新6条记录的图片描述字段，全部10个 `【Type】` 标签验证通过
  4. 脚本：`scripts/fix_matchInfo_0213_0218_desc.py`
- **技能更新：** 将图片描述规范（格式要求、核心规则、参考示例、常用类型标签参考表）更新到 `business_production/单元挑战/skills/unit_challenge/questions/reading/reading_info_match/SKILL.md`
- **规范要点：**
  - 每张图片 → `图片材料文本：\n【Type】\nActual text`
  - 图片必须是真实标识/通知（非标签式）
  - L2 B级及以上图片文字需为完整陈述句（3-5词+）

### 刘彦江 — L1 配置表审校 + 技能沉淀（11:50 ~ 12:10）
- **数据源：** 飞书多维表格「互动知识点 - 句子」→「Level 1 配置表」(`Nq3Zb258aae7SRs2QfXcqsQYnxJ` / `tblTxGpf6GQ5c7DZ`)
- **ID 编码规则：** 7位 = 前2位(Season) + 中2位(Unit) + 后3位(序列号)
  - 例: 1214001 = L1S2(12) + U14(14) + 001
- **审校记录 1214001 (You need to...) 发现：**
  1. ❌ classificationInfo 值互换: cambridgeLevel=A1 vs cefrLevel=YLE（与列字段反了）
  2. ❌ sentenceStructureSort 题2: 单词库有need无needs，三单主语Otis语法错误
  3. ⚠️ sentenceStructureClozeWordMcq: "put your toys" 省略 away 不够自然
- **技能沉淀：**
  - 脚本: `scripts/audit_l1_config.py` — 7项自动检查
  - SKILL.md: `business_production/_shared/audit_l1_config/SKILL.md` — 含完整审校流程 + 4项人工审核清单
# 2026-05-12 工作日志

## 会话记录

### 刘彦江 — 021301-021801 图片描述修正 + 技能更新（09:35 ~ 09:45）
- **问题：** 021301-021801 信息匹配题的图片描述缺少 `【Notice Type】` 标签，格式不符合参考规范
- **处理：**
  1. 查询 bitable 获取6条记录当前图片描述（tblCgfYDnnqwLfgH）
  2. 按每道题的上下文匹配对应的标识/通知类型标签（如 Show Poster、Wanted Notice、School Notice 等）
  3. 批量更新6条记录的图片描述字段，全部10个 `【Type】` 标签验证通过
  4. 脚本：`scripts/fix_matchInfo_0213_0218_desc.py`
- **技能更新：** 将图片描述规范（格式要求、核心规则、参考示例、常用类型标签参考表）更新到 `business_production/单元挑战/skills/unit_challenge/questions/reading/reading_info_match/SKILL.md`
- **规范要点：**
  - 每张图片 → `图片材料文本：\n【Type】\nActual text`
  - 图片必须是真实标识/通知（非标签式）
  - L2 B级及以上图片文字需为完整陈述句（3-5词+）

### 刘彦江 — L1 配置表审校 + 技能沉淀（11:50 ~ 12:10）
- **数据源：** 飞书多维表格「互动知识点 - 句子」→「Level 1 配置表」(`Nq3Zb258aae7SRs2QfXcqsQYnxJ` / `tblTxGpf6GQ5c7DZ`)
- **ID 编码规则：** 7位 = 前2位(Season) + 中2位(Unit) + 后3位(序列号)
  - 例: 1214001 = L1S2(12) + U14(14) + 001
- **审校记录 1214001 (You need to...) 发现：**
  1. ❌ classificationInfo 值互换: cambridgeLevel=A1 vs cefrLevel=YLE（与列字段反了）
  2. ❌ sentenceStructureSort 题2: 单词库有need无needs，三单主语Otis语法错误
  3. ⚠️ sentenceStructureClozeWordMcq: "put your toys" 省略 away 不够自然
- **技能沉淀：**
  - 脚本: `scripts/audit_l1_config.py` — 7项自动检查
  - SKILL.md: `business_production/_shared/audit_l1_config/SKILL.md` — 含完整审校流程 + 4项人工审核清单

### 刘彦江 — 1213001-1216010 批量审校 40 条（12:10 ~ 14:00）
- **范围：** L1S2 Units 13-16，每单元 10 条，共 40 条
- **方法：** `scripts/audit_l1_config.py` 自动化扫描 → 误报排除 → 分类汇总 → 逐条审校回填
- **脚本修复（过程中）：**
  1. sentenceStructureSort 单词对比大小写误报 → 添加 normalize（首字母大写 + 去标点）
  2. ID 末尾空格敏感 → strip 比较
  3. 句子朗读/跟读题误报 options/answer 缺失 → 跳过这两种题型

#### 审校结果汇总
- **🔴 系统性问题（40/40，100%）：** classificationInfo JSON 内 cambridgeLevel="A1" 与 cefrLevel="YLE" 值互换，列字段正确但 JSON 存储写反，疑似模板/formula 级别 bug
- **🟡 具体错误（17/40）：**
  - sentenceMeaningMeaning JSON 解析失败 × 10：1213004, 1213006, 1213010, 1214008, 1215005, 1216001, 1216004, 1216007, 1216008, 1216010（后8题含中文引号冲突）
  - ID 字段末尾空格 × 3：1213001, 1215001, 1216001
  - 看图选择题有CN无JSON × 3：1213008, 1215010, 1216005
  - sentenceStructureSort 语法/格式错误 × 3：1213004(缺逗号clean Otis→clean, Otis), 1213005(bird?连写应拆为bird+?), 1214001(need→needs三单)
  - 缺少 pointId 字段 × 1：1213001(sort 题2)
- **🟢 仅有系统性问题的 23 条：** 其余 23 条仅 classificationInfo 互换问题，其他题型均通过自动化检查
- **回填：** 全部 40 条审校结果已写入 bitable「审校结果」列，逐条验证通过
- **脚本回填脚本：** `scripts/audit_batch_1213001_1216010.py`
# 2026-05-12 工作日志

## 会话记录

### 刘彦江 — 021301-021801 图片描述修正 + 技能更新（09:35 ~ 09:45）
- **问题：** 021301-021801 信息匹配题的图片描述缺少 `【Notice Type】` 标签，格式不符合参考规范
- **处理：**
  1. 查询 bitable 获取6条记录当前图片描述（tblCgfYDnnqwLfgH）
  2. 按每道题的上下文匹配对应的标识/通知类型标签（如 Show Poster、Wanted Notice、School Notice 等）
  3. 批量更新6条记录的图片描述字段，全部10个 `【Type】` 标签验证通过
  4. 脚本：`scripts/fix_matchInfo_0213_0218_desc.py`
- **技能更新：** 将图片描述规范（格式要求、核心规则、参考示例、常用类型标签参考表）更新到 `business_production/单元挑战/skills/unit_challenge/questions/reading/reading_info_match/SKILL.md`
- **规范要点：**
  - 每张图片 → `图片材料文本：\n【Type】\nActual text`
  - 图片必须是真实标识/通知（非标签式）
  - L2 B级及以上图片文字需为完整陈述句（3-5词+）

### 刘彦江 — L1 配置表审校 + 技能沉淀（11:50 ~ 12:10）
- **数据源：** 飞书多维表格「互动知识点 - 句子」→「Level 1 配置表」(`Nq3Zb258aae7SRs2QfXcqsQYnxJ` / `tblTxGpf6GQ5c7DZ`)
- **ID 编码规则：** 7位 = 前2位(Season) + 中2位(Unit) + 后3位(序列号)
  - 例: 1214001 = L1S2(12) + U14(14) + 001
- **审校记录 1214001 (You need to...) 发现：**
  1. ❌ classificationInfo 值互换: cambridgeLevel=A1 vs cefrLevel=YLE（与列字段反了）
  2. ❌ sentenceStructureSort 题2: 单词库有need无needs，三单主语Otis语法错误
  3. ⚠️ sentenceStructureClozeWordMcq: "put your toys" 省略 away 不够自然
- **技能沉淀：**
  - 脚本: `scripts/audit_l1_config.py` — 7项自动检查
  - SKILL.md: `business_production/_shared/audit_l1_config/SKILL.md` — 含完整审校流程 + 4项人工审核清单

### 刘彦江 — 1213001-1216010 批量审校 40 条（12:10 ~ 14:00）
- **范围：** L1S2 Units 13-16，每单元 10 条，共 40 条
- **方法：** `scripts/audit_l1_config.py` 自动化扫描 → 误报排除 → 分类汇总 → 逐条审校回填
- **脚本修复（过程中）：**
  1. sentenceStructureSort 单词对比大小写误报 → 添加 normalize（首字母大写 + 去标点）
  2. ID 末尾空格敏感 → strip 比较
  3. 句子朗读/跟读题误报 options/answer 缺失 → 跳过这两种题型

#### 审校结果汇总（初版）
- **🔴 系统性问题（40/40，100%）：** classificationInfo JSON 内 cambridgeLevel="A1" 与 cefrLevel="YLE" 值互换
- **🟡 具体错误（17/40）：**
  - sentenceMeaningMeaning JSON 解析失败 × 10：1213004, 1213006, 1213010, 1214008, 1215005, 1216001, 1216004, 1216007, 1216008, 1216010
  - ID 字段末尾空格 × 3：1213001, 1215001, 1216001
  - 看图选择题有CN无JSON × 3：1213008, 1215010, 1216005
  - sentenceStructureSort 语法/格式错误 × 3：1213004(缺逗号clean Otis→clean, Otis), 1213005(bird?连写应拆为bird+?), 1214001(need→needs三单)
  - 缺少 pointId 字段 × 1：1213001(sort 题2)
- **🟢 仅有系统性问题的 23 条**
- **回填：** 全部 40 条审校结果已写入 bitable「审校结果」列，逐条验证通过
- **脚本回填脚本：** `scripts/audit_batch_1213001_1216010.py`

### 刘彦江 — 审校结果修正 + 解析一致检查 + JSON 修复（14:00 ~ 15:38）
- **YLE↔A1 误报排除：** 刘彦江确认 YLE 与 A1 等级可互通，classificationInfo 值互换不视为错误
  - 全部 40 条审校结果已更新，移除 classificationInfo 互换相关告警
  - 23 条变为 `✅ 通过`（无其他问题），17 条保留具体错误

- **解析与题目/答案对应性检查（人工审核项）：**
  - 检查题型：句意选择题 ×30、句子补全题、听句作答题、场景选择题、看图选择题
  - 验证方法：提取 explanation 中的英文引句 vs question 中的英文句子、正则提取"空处应填X" vs options[answer]
  - 结果：✅ **0 条实质性不对应**

- **10 条 sentenceMeaningMeaning JSON 修复：**
  - **根因：** explanation 文本中的 ASCII `"` (U+0022) 被当作中文双引号使用，JSON 解析器将其视为字符串终止符
  - **修复策略：** 从「句意选择题」中文列提取英文原句和选项 → json.dumps 重建标准 JSON（只修格式，不修内容）
  - **1216007 特殊处理：** 原始 JSON 损坏严重，需从中文列完全重建
  - **二次修复（Q2 丢失问题）：** 首次不完全修复导致 9 条记录的 Q2 被覆盖丢失，且 Q1 被 JSON 垃圾污染 → 从中文列全面重建 Q1+Q2
  - **最终结果：10/10 条记录 sentenceMeaningMeaning 均可 json.loads 正确解析，每条含 2 题，无残留垃圾数据**
  - **受影响记录：** 1213004, 1213006, 1213010, 1214008, 1215005, 1216001, 1216004, 1216007, 1216008, 1216010
  - **审校结果同步更新：** 移除所有 10 条的 `❌ JSON 解析失败` 标记
  - **注意：** Q1 explanation 在重建时词表述可能微调（内容含义一致），如需精确原始 wording 可从中文列恢复后人工微调

## 经验教训

### bitable 写入需严格流程管控（2026-05-12）
- 批量更新 JSON 字段时必须：写入前完整提取原始数据 → 写入后逐字段 diff 验证 → 发现异常立即回滚
- 本次 JSON 修复中首次写入不完整导致 Q2 丢失，原因：修复脚本未正确处理多题 JSON 结构
- **教训：** 任何涉及 JSON 重建/修复的批量操作，先单条试运行验证通过后再批量执行，不可并行甩出多条

### sentenceMeaningMeaning 的 explanation 引号规范（2026-05-12）
- explanation 字段中的中文双引号极易被误用为 ASCII `"` (U+0022)
- 建议生产侧统一使用中文引号 `"` (U+201C) 和 `"` (U+201D)，或在 explanation 写入前做引号归一化预处理
- 此类问题在常规 JSON 校验中不会被发现（JSON 仍有概率合法，取决于引号出现位置），一旦出现在 JSON 字符串边界附近即导致全段解析失败

### 刘彦江 — 核心互动全题型 JSON 配置标准沉淀（17:05 ~ 17:50）
- **目标：** 从互动内容库遍历全部核心互动题型，提取 JSON 配置结构，沉淀为统一 Skill
- **方式：** 先写 `bitable-reader` 通用读取 Skill → 遍历 15 个 bitable → 归纳通用字段 → 分类录入各题型

#### 架构决策
- **统一入口，通用在上：** 一个 `core-content-json-standard` Skill 覆盖全部题型，不拆分为题型独立 Skill
- **五大分类：** 📖阅读(2) / 🎧听力(3) / 🗣口语(4) / ✏️写作(5) / 未完成(1)
- **通用字段提取：** ID/dataStatus/kpStatus/kpInfo/taskData 是所有题型共用的基础结构

#### 覆盖率
- 14 种题型已录入 ✅（1 种无数据：口语探讨）
- 4 个一级板块：通用结构 / 题型专区 / 审校规则 / 扩展指南
- 每个题型：cType + bitable 定位 + JSON 字段表 + 结构特点 + 与同类题型的差异说明

#### 发现
- 写作互动和邮件组句 cType 相同（`core_writing_questionMakeSentence`），通过 textInfo 区分素材
- 口语快答/妙问 JSON 结构几乎相同，差异在 prompt 配置和对话样例内容
- 合作阅读和合作听力的核心差异：`textData.text[]` ↔ `textData.audio[]`
- meaning 标签（合作阅读）为开放型自由文本，非受控词表

#### 产出文件
- `business_production/_shared/bitable-reader/SKILL.md` — 通用 bitable 读取技能（164行）
- `business_knowledge/skills/core-content-json-standard/SKILL.md` — 全题型 JSON 标准 v2.0（393行）
- `scripts/audit_core_reading_S0.py` — 合作阅读 S0 审校脚本（含审校发现）
# 2026-05-12 工作日志

## 会话记录

### 刘彦江 — 021301-021801 图片描述修正 + 技能更新（09:35 ~ 09:45）
- **问题：** 021301-021801 信息匹配题的图片描述缺少 `【Notice Type】` 标签
- **处理：** 批量更新6条记录的图片描述字段，全部10个标签验证通过
- **脚本：** `scripts/fix_matchInfo_0213_0218_desc.py`
- **技能更新：** 图片描述规范写入 `business_production/单元挑战/skills/unit_challenge/questions/reading/reading_info_match/SKILL.md`

### 刘彦江 — L1 配置表审校 + 技能沉淀（11:50 ~ 12:10）
- **数据源：** `Nq3Zb258aae7SRs2QfXcqsQYnxJ` / `tblTxGpf6GQ5c7DZ`
- **ID 编码：** 7位 = S(2位) + U(2位) + 序列号(3位)
- **技能沉淀：** `scripts/audit_l1_config.py` + `business_production/_shared/audit_l1_config/SKILL.md`

### 刘彦江 — 1213001-1216010 批量审校 40 条（12:10 ~ 14:00）
- **范围：** L1S2 Units 13-16
- **脚本修复（过程中）：** sort 大小写误报 / ID 末尾空格 / 朗读跟读题误报
- **结果：** 系统性 classificationInfo 互换(已标记不视为错误) + 17条具体错误 + 23条通过
- **脚本：** `scripts/audit_l1_config.py` + `scripts/audit_batch_1213001_1216010.py`

### 刘彦江 — 审校结果修正 + JSON 修复（14:00 ~ 15:38）
- **YLE↔A1 误报排除：** 确认等级互通，40条审校结果已更新
- **解析与题目一致性检查：** ✅ 0条不对应
- **10 条 sentenceMeaningMeaning JSON 修复：**
  - 根因：explanation 中 ASCII `"` 被用作中文引号
  - 修复策略演变：状态机拆分失败 → 正则重建 → 发现Q2丢失 → 从中文列完整重建
  - 最终：10/10 可正确解析，审校结果同步更新
  - 受影响：1213004/1213006/1213010/1214008/1215005/1216001/1216004/1216007/1216008/1216010

### 刘彦江 — 核心互动全题型 JSON 配置标准沉淀（17:05 ~ 17:50）
- **产出 Skill 1：** `business_production/_shared/bitable-reader/SKILL.md` — 通用 bitable 读取（任何 bitable 通用）
- **产出 Skill 2：** `business_knowledge/skills/core-content-json-standard/SKILL.md` v2.0 — 全题型 JSON 标准（393行）
- **架构：** 通用字段在前（ID/kpInfo/taskData）+ 5大题型分类（📖阅读2 🎧听力3 🗣口语4 ✏️写作5）+ 审校规则 + 扩展指南
- **覆盖率：** 14/15 种题型（口语探讨 S0 无数据）
- **产出脚本：** `scripts/audit_core_reading_S0.py` — 合作阅读 S0 审校

## 经验教训

### bitable 写入需严格流程管控（2026-05-12）
- 批量更新 JSON：写入前完整提取 → 写入后逐字段 diff → 异常立即回滚
- 首次修复多题 JSON 导致 Q2 丢失 → 先单条试跑验证再批量

### sentenceMeaningMeaning 引号规范（2026-05-12）
- explanation 中 ASCII `"` 与中文引号混用导致 JSON 解析失败
- 建议：生产侧统一用中文引号 `""`（U+201C/D），或写入前做引号归一化

### 写作互动 / 邮件组句 cType 相同（2026-05-12）
- 两者 cType 均为 `core_writing_questionMakeSentence`，通过 textInfo.textList[].type 区分素材

### 刘彦江 — 中互动全题型录入（18:00 ~ 18:25）

#### 发现
- **中互动结构高度统一：** 全部 27 类都用 `jsonData`（主配置）+ `kpInfo`（知识点绑定），没有核心互动那种多字段分散结构
- **6 大分类：** 🗨对话(7) / 📋信息(6) / 📦词汇(2) / 🖼图片选择(4) / 📝语法(3) / 🔧其他(5)
- **对话类公共字段：** cType, cId, title, resourceMapping, preDialog, imgShowTimingList
- 写作互动和邮件组句 cType 相同（`core_writing_questionMakeSentence`）

#### 产出文件
- `skills/interactive-component-json/references/json_structure_guide.md` — 27 种中互动 jsonData 字段结构（8736 bytes）
- `skills/interactive-component-json/references/component_registry.md` — 核心互动部分从🔲更新为完整注册表（含 cType+bitable_token）
- 与 `business_knowledge/skills/core-content-json-standard/SKILL.md` 双向关联

#### 覆盖率
- 核心互动：15/15 ✅（口语探讨 S0 无数据已标注）
- 中互动：27/27 ✅
- 关联文件：3 个（core-content-json-standard + component_registry + json_structure_guide）
## 刘彦江 — 中互动+核心互动 回填任务（18:37 待继续）

### 上下文
- 用户提供剧本文档: `https://makee-interactive.feishu.cn/wiki/YqzzwpjwjihK9YkyRhXccaqLnzu`
- 要求：识别文档中的 3 个中互动 + 1 个核心互动，回填到对应位置
- 上次已读取文档，找到 1 个核心互动标记（第4幕 听力拖拽），但 3 个中互动标记不明显
- 用户让我"Continue"继续处理

### 当前状态
- 需要重新拉取文档，仔细识别所有互动标记
- 文档位于 space_id=7487521512283799556
- 上次发现的场景：太空故事 / 太空船起飞 / 小行星带 / 发光的星球 + 尾声
## 中互动+核心互动 回填任务 — 继续（18:37）

### 本轮 Session — 实际写入 bitable

上一轮已确认：文档中 4 个场景对应 4 个互动类型（3中+1核），标签已写入文档。但用户说的"回填到对应为止"指的是**写入 bitable 多维表格记录**，而非仅文档标签。

### 需要写入的 4 条记录

| 场景 | 互动类型 | cType | bitable_token |
|------|---------|-------|---------------|
| 第1幕 太空故事 | 对话朗读互动 | `mid_dialog_repeat` | `MuwubKXoSaJe55sO4k9c63VSnmh` |
| 第2幕 太空船起飞 | 对话互动 | `mid_sentence_dialogue` | `GH0hbBT0ZavkCesaVQ7c40Zfnub` |
| 第3幕 小行星带 | 指令互动 | `mid_vocab_instruction` | `UorxbVCNYaqpx3sOUdTcF6bUnAh` |
| 第4幕 发光的星球 | 听力拖拽 | `core_listening_drag` | `Uey8bhdLBa66TIsGrFBcIQKRnsg` |

### 下一步
1. 读取 4 个 bitable 的表结构（字段名）
2. 基于剧本内容和 JSON 结构标准，构造 jsonData/kpInfo 等字段
3. 调用 Bot API create_record 写入
4. 写后回读验证
