Skip to content
Back to skills

Transcript Merge

ASecurity

把课堂录音转录(本地 Whisper 或 Notta 导出的带时间戳 txt)合并进已有的 v0.9 讲义笔记、升级为 v1.0 的完整流程与验收标准(CityU vault 专用)。当 <课程>/transcripts/ 出现新文件、用户说"转录到了 / 合并转录 / 回填 🎙️ / 升 v1.0"、或笔记 frontmatter 是 transcript: pending 而转录文件已存在时使用。任何模型(Claude 任一档、Codex、其他 agent)执行都必须逐步照做,产出用 _meta/tools/transcript_check.py 机器验收。

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 24, 2026
ai-agentspythongoshellgit

Works with

  • claude code

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned October 5, 2026

npx -y skills add CercaTrovato/cityu-ai-course-notes --skill transcript-merge --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Transcript Merge?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Transcript Merge
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/cercatrovato-transcript-merge/badge)](https://www.skillsdirectory.com/skills/cercatrovato-transcript-merge)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: transcript-merge
description: 把课堂录音转录(本地 Whisper 或 Notta 导出的带时间戳 txt)合并进已有的 v0.9 讲义笔记、升级为 v1.0 的完整流程与验收标准(CityU vault 专用)。当 <课程>/transcripts/ 出现新文件、用户说"转录到了 / 合并转录 / 回填 🎙️ / 升 v1.0"、或笔记 frontmatter 是 transcript: pending 而转录文件已存在时使用。任何模型(Claude 任一档、Codex、其他 agent)执行都必须逐步照做,产出用 _meta/tools/transcript_check.py 机器验收。
---

# 转录融合(v0.9 → v1.0)

> 本技能是 `_meta/转录处理规则.md`(原理层:为什么、提取什么)的**执行层**(做什么、写成什么样、怎么验收)。两份都要读;冲突时以本技能为准并在回执里指出冲突。
> 质量标杆:`AC6761_Artificial_Intelligence_Accounting/notes/M02-交易的会计处理.md`(v1.0)及其顺延回填 `M01-会计与商业.md` §2.8.5。**"和之前一样的质量"= 与这两篇形态一致且 `transcript_check.py audit` PASS。**
> 所有面向用户的文字用简体中文;转录原话保留英文。
> **2026-09-18 起默认按 §11「分片并行模式」执行**:主代理登记与切分 → 2–3 个分片代理并行产出 patch + findings(不写 vault)→ `merge_apply.py` 合并验收、一次写入 → 1 个验收代理做语义核对。§2–§7 仍是每个分片必须遵守的内容规范;单体模式只在转录很短(<40 分钟)时用。

---

## 0. 三条底线(违反任何一条 = 返工)

1. **可回溯**:笔记里每一处来自转录的内容都带 `` `时间戳` ``(反引号包住),每句教授原话都是 *"斜体直引号"*;脚本会逐个核对时间戳是否真实存在、原话能否在转录里匹配到。
2. **不编造**:转录没说的不写成"教授说";听不清的标 `[?]`;对 ASR 的改写和补词放在 `[ ]` 里;没录到 ≠ 没讲(❓ 不是 ⏭️)。
3. **不省格**:每个「🎙️ 课堂补充」格都要落到五种状态之一(§4.1),结束时"待转录补充"必须为 0;不许删格、不许写"已核对"敷衍。

4. **文件安全**:改笔记只用 `_meta/tools/safe_write.py` 的 `atomic_write`(禁止 `open(path,'w')`);开工先 `backup_vault.py` + `integrity_check.py snapshot`,收工 `integrity_check.py verify`;**发现任何文件损坏(解码失败、行数骤减、结尾不是 §9/相关)立即停下报告,不许凭记忆重建**;开工前确认用户已关闭 Remotely Save 自动同步。

其它硬约束(来自 vault 总规则):不改动 `course_files_export/` 下任何文件;不 `git init`;计算出的数字必须来自脚本并注明脚本名;Notion 的 `👁️ 已通读` / `✅ 自测通过` / `复习次数` 不动;跨课程术语走 `<课程>/_meta/待并入术语总表.md`,不直接改根 `_meta/术语总表.md`。

---

## 1. 开工前必读(按顺序,读完再动手)

| # | 文件 | 读什么 |
|---|---|---|
| 1 | 任务单(若用户或主代理给了,通常在 `<课程>/_meta/转录融合任务-M0N.md`) | 顺延边界、上一讲遗留的 ❓、优先搜索的问题 |
| 2 | `_meta/转录处理规则.md` | §2 四类差集、§3 ASR 校正、§4 噪音、§5 命名、§8 各课转录状态(读完后你要在 §8 加/改自己这一行) |
| 3 | 目标笔记全文(v0.9) | 记下:🎙️ 格位置与数量、§9.2 的"转录到手后要做的事"清单、§6.1 现状、§8 表的列结构 |
| 4 | 标杆 `AC6761 M02` 的:文首提示块、§0 的 🎙️ 课堂实况、§2.2.2 与 §2.7.2 的 🎙️ 格、§6.2、§8 全部、§9.1 / 9.2 / 9.5 | 形态——你的产出要长这样 |
| 5 | `reference/formats.md`(本技能目录) | 每个块的固定模板 |
| 6 | `reference/asr-dictionary.md` | 该课程的已知 ASR 错误;你要往里追加 |
| 7 | 上一讲笔记的 §9.1 / §9.5 | 有没有标 ❓ 的页——本次转录可能补上了(顺延) |

---

## 2. 阶段 0 · 接收与登记(脚本 + 人读)

```
PYTHONIOENCODING=utf-8 /d/anaconda3/python.exe _meta/tools/transcript_check.py scan <课程>/transcripts/<文件>.txt [part2 ...]
```

做五件事,结果写进工作目录的 `PROGRESS.md`(见 §9)。**在此之前先跑** `backup_vault.py` 与 `integrity_check.py snapshot 融合前`,并确认同步已关。**多个独立录音时钟都先分别 scan,再核内容/音频接缝;已确认先后才标 partN,大范围重叠才标 A/B。保留原始时钟;多文件 audit 的时间戳并集不能替代逐源引文核对或计算课堂总时长。两段 partN 如需现有逐源脚本,文首固定 A=part1、B=part2,全文引文逐条带别名;脚本未覆盖的结构块还须人工核。**

0. **来源登记与课程归属**:登记每源原文件/录音 ID、设备、原课程元数据、实际课程/module、错误 hotwords 风险与判定依据。设备切换接缝按连续/重叠/缺口/未知登记,长度未知不猜。误选课程先按《转录处理规则》§5.1 更正路由再导出。

1. **改名**:按 `转录处理规则` §5 改成 `M0N-transcript.txt`(分段 `-part1/2`,不完整 `-partial`)。本地 Whisper 产出的与音频同名的 `.txt` 改名为 `M0N-transcript.txt`(或直接 `cd E:\AIworkspace\lecture-transcribe; uv run lt.py export <id> --module M0N`,见 `转录处理规则` §5.1;同目录的源音频 mp3 / wav **不要动**,也不进仓库);早期 Notta 的内容标题式文件名同样改掉。`transcripts/` 不是 `course_files_export/`,可以改名。
2. **时序**:段数、起止、时长、时序倒退、≥120 秒空档。每个空档都要**读前后原文**判断性质(课堂练习时间 / 课间 / 录音暂停 / 内容丢失),写成 §9.5 的一行。
3. **完整性(内容判断,脚本做不了)**:读首 3 段——第一句是不是一堂课该有的开头(问候 / 议程 / 上节回顾)?已在讲课中段 = **缺开头**;读末 3 段——有没有下课语 / 布置作业?半句或噪声 = **缺结尾**。"时间戳连续"只证明文件没截断,不证明覆盖整堂课。
4. **顺延边界**:读前 15 分钟,对照**上一讲**的讲义——如果教授在补上周没讲完的页,记下切换到本讲讲义的时间戳。顺延段的内容回填到**上一讲**笔记(§5.4),本讲 §8 只做索引。

---

## 3. 阶段 1 · 通读与对齐(本技能最花时间的一步,不许跳)

**必须读完转录全文**,按 10–15 分钟一块推进,每块读完就在工作目录 `align.md` 追加对齐行,块与块之间的时间区间必须首尾相接(不允许出现没解释的 >3 分钟断档):

```
| 转录区间 | 讲义页 | 覆盖 | 值得引用的原话(时间戳) | 学生提问 / 互动 | 信号(考试/作业/行政) |
```

- **讲义页**:对照笔记 §8 的页码表定位;教授不按顺序讲很常见,按内容对,不按顺序猜。
- **覆盖**六选一(定义见 §3.1)。
- **原话**:一块至少挑 2–4 句最有信息量的(定义的口语版、例子、强调、降权信号),记原始时间戳。
- **学生提问**:记问题本身(这是「⚠️ 常见误解」格最真实的来源)。
- **ASR**:遇到明显错的专名,查 `reference/asr-dictionary.md`;新错误追加进去(转录原文 → 应为,附时间戳)。拿不准的写 `[?]`,**不猜**。

读完全文后再开始写笔记。写到一半才发现后面推翻前面,是不读完就动笔的典型后果。

**对齐表的粒度上限**:`align.md` 只写上面那六列、**每 10–15 分钟一行、全程不超过 60 行**;**不在对齐表里草拟引文或笔记文字**——引文在写各自小节时再用 `transcript_check.py window / quote` 从转录取。(教训:2026-09-17 一个代理把对齐和 35 个格的草稿放在一轮里想完,7 分钟无任何落盘,中断即全废。)取转录段用脚本,不用自己写解析:

```
PYTHONIOENCODING=utf-8 /d/anaconda3/python.exe _meta/tools/transcript_check.py window <转录> 49:04 01:14:37   # 打印时间窗内所有段
PYTHONIOENCODING=utf-8 /d/anaconda3/python.exe _meta/tools/transcript_check.py quote  <转录> 01:15:01 4      # 某时间戳前后 ±4 段(Whisper 逐句分段,±2 不够上下文)
```

### 3.1 覆盖状态的定义与证据标准

| 标记 | 含义 | 需要的证据 | 写在哪 |
|---|---|---|---|
| ✅ 详讲 / 简讲 / 一句带过 | 讲义页在课上讲了 | 时间区间 + 用时 | §8 覆盖列;🎙️ 格 |
| 🎙️ 纯课堂内容 | 讲义没有、课上讲了 | 时间区间 + 用时 + 内容摘要 | §8 加**(讲义无对应页)**行;正文对应小节;§9.2 |
| ⏭️ 略过 | 教授在场、翻过去没讲 | 前后页都有时间戳、中间没有;或教授明说 "skip / don't have to" | §8;§9.1(给依据 + 建议) |
| ❓ 未录到 / 转录无对应 | 所有音源均缺失或听不清 | 说明缺失区间(缺开头 / 缺结尾 / 空档 / 噪声) | §8;§9.1(**注明不可降权**) |
| ↪️ 明确顺延 | 教授明说后续留到下一讲,且录到本讲收束 | 停课/下讲继续的原话时间戳 + 最后实讲页 | §8;§9.1(**保留讲义自学内容,下一讲回填**) |
| ⚪ 封面 / 分隔页 | 无实质内容 | — | §8 |

**⏭️ / ❓ / ↪️ 的分界**:只有"教授在场且有证据翻过去了"才是 ⏭️;所有录音都缺该段时才是 ❓;教授明确说下讲续讲、并录到本讲收束时是 ↪️。判断依据必须写进 §9.1 的「依据」列。宁可保留不确定,也不可误判略过或顺延。

---

## 4. 阶段 2 · 写回正文

### 4.1 「🎙️ 课堂补充」格的五种状态(每格必居其一)

| 状态 | 什么时候 | 最少要写什么 |
|---|---|---|
| **A 课上展开** | 教授讲了讲义没有的东西 / 口语解释 / 例子 | `(时间区间,约 N 分钟)` + 1–3 句原话 *"…"*(各带时间戳)+ 中文转述 + **这段改变了什么理解**(确认了笔记推断 / 推翻了 / 新增了) |
| **B 讲了同讲义** | 教授照念或简讲,没有增量 | `(时间区间)` + 一句概括("照 p.N 念了定义,用时 40 秒")+ 至少一句原话或降权信号(如 *"we already know"*)。**不许只写"已核对"** |
| **C ⏭️ 略过** | 有证据翻过去了 | `⏭️` + 依据(前后时间戳)+ 对读者的建议(降权到什么程度) |
| **D ❓ 未录到** | 所有录音均缺失该区间 | `❓` + 缺失原因 + **"不可降权"** + 这一节只能靠讲义与笔记 |
| **E ↪️ 顺延** | 教授明确把后续页留到下一讲 | `↪️` + 停课与下讲继续的原话时间戳 + 本讲最后实讲页 + **不可降权**、下讲回填位置 |

模板与标杆例句见 `reference/formats.md` §1。脚本 A3 检查:每格要么有时间戳,要么有 ❓/⏭️ 且 ≥20 字理由。

### 4.2 引原话的规则(脚本 A5 按此核对)

- 格式:`*"英文原话"*`——星号 + 直引号;中文转述放在引文外。讲义引文用 `**"…"**` 或 📄 标记以示区别(脚本不查讲义引文)。
- 对 ASR 的**改写、补词、省略**都用 `[ ]`:*"we debit [the] cash account"*、*"[the] ledger is a collection of all accounts"*。整句乱码则不引,改为转述 + `(ASR 乱码,按讲义 p.N 还原)`。
- 省略用 `…`;每段引文 ≤ 60 词;同一格里引文不超过正文的一半——引文是证据,不是正文。
- 一律引**英文转录**;Notta 的中文翻译版不引、不参考(它继承全部 ASR 错误并叠加翻译误差)。Whisper 转录里与上下文无关的短句(`Thank you for watching`、重复句)是幻觉,不引;≥12 秒只剩几个词的段在回执里报时间戳(可重转)。
- 引文后紧跟时间戳:*"…"*(`58:09`)。多句连引给区间(`01:04:43`–`01:05:25`)。

### 4.3 差集信息的落位

| 转录里的东西 | 落到 |
|---|---|
| 教授的口语解释、比喻 | 该小节「💡 换个说法」格,句首标 🎙️,带时间戳 |
| 学生提问、教授纠正的错误 | 该小节「⚠️ 常见误解」格,写成"❌ 误解 → ✅ 纠正(🎙️ `时间戳`)" |
| 讲义没有的例子、案例、行业经历 | 对应小节正文 + 🎙️ 格;价值高的在 §9.2 排名 |
| 会考 / 要记 / 答题格式 / 评分 | §6.2 🔴 行(原话 + 时间戳)+ 课程 `_meta/考点库.md` |
| "不用背 / 不考 / skip" | §6.2 「🔴(反向)」行,原 ⚪/🟡 条目降级并注明 |
| 作业、提交渠道、截止、课堂参与记录方式 | `_meta/作业与DDL.md` + 笔记 §9.5 + Notion DDL 库 |
| 教授口误、与讲义矛盾 | §9.3(讲义问题)或 §9.5(待核对),**以讲义为准**并说明 |
| 课堂练习(题面 + 解答) | 正文新增 `**🎙️ 课堂练习 N(区间)**` 块;答案栏空白的讲义练习题,课堂解答是唯一答案,必须完整记录 |

### 4.4 顺延内容(上一讲没讲完、这堂课补讲)

1. 回填到**上一讲**笔记:在对应小节下新增 `#### 2.x.y <内容>(讲义 p.a–b)`,开头一句说明 "W1 `时间戳` 下课顺延,W2 `00:02`–`18:21` 补讲";🎙️ 格、§8 行、§9.2 条目都写在上一讲。
2. 上一讲里原来标 ❓ 的页若这次录到了:把 ❓ 改成 ✅ 并给**本讲转录**的时间戳(写法:"W3 转录 `40:14`–`49:04`"),§9.1 / §9.5 对应行改成 ✅ 并注明。
3. 本讲 §8 表末尾加 `**→ M0(N−1) §2.x.y**` 索引行;§0 课堂实况块说明"前 N 分钟是上周内容"。
4. 上一讲 frontmatter 的 `updated` 改为今天;§9.6 加一行。

---

## 5. 阶段 3 · 结构块(逐块对照 `reference/formats.md`)

| 块 | 位置 | 内容要点 |
|---|---|---|
| 文首提示块 | 标题下 `> ✅ 本笔记为 v1.0` | 转录文件、起止、段数、合并日期;这份转录的 1–3 个特殊之处(缺口 / 顺延 / 截断) |
| 🎙️ 课堂实况 | §0 末尾 | 一段:时间怎么分配的、重心在哪、哪些页没录到 |
| §6.1 | 表 | 🔴 数量与来源;删掉"本讲无转录无法产生 🔴"字样 |
| §6.2 | 表 | 每条 🔴 = 原话 + 时间戳 + 小节;被降权的条目标 🔴(反向) |
| §8 | 映射表 + 统计 + 时间分配 | 「课堂覆盖」列每个内容页行都有值;末尾「课堂覆盖统计」一句;「课堂时间分配」表按内容块列区间 / 用时 / 占比 |
| §9.1 | 表 | ⏭️ 与 ❓ 分开列,列:讲义页 / 内容 / 判定 / 依据 / 建议 |
| §9.2 | 表 | 按价值排序,列:# / 内容 / 时长 / 时间戳 / 小节 / 为什么值钱;🔴 标教授明示 |
| §9.5 | 表 + 反方视角 | #1 转录登记(文件、起止、段数、时长、时序);#2 每个空档的性质;#3 缺口判定(缺开头 / 缺结尾);ASR 错误样本行;`[?]` 待核对项;末尾**反方视角**三问(最薄弱的一节 / 考了答不上的 / 我做的推断与错了会怎样) |
| §9.6 | 变更记录 | `| 日期 | **合并 W_N 转录**(文件,起止,段数)→ v1.0:回填 N 个 🎙️ 格、§6 增 N 条 🔴、§8 加覆盖列、§9.x 重写 |` |
| frontmatter | `transcript: merged`、`status: v1.0`、`updated: 今天` | |

删除所有 v0.9 时代的占位文字:"本讲无转录"、"待转录补充"、"转录到手后要做的事"清单(做完的删,没做到的挪到 §9.5 并说明原因)。

---

## 6. 阶段 4 · 跨文件回写(一个都不能漏)

| 文件 | 改什么 |
|---|---|
| `<课程>/_meta/考点库.md` | 新增「🔴 教授明示(M0N 段)」,每条:题型 / 原话(时间戳)/ 含义 / 为什么算教授明示;更新顶部数量表 |
| `<课程>/_meta/知识层级台账.md` | 「来源」列:只有课上讲的标 🎙️,讲义有也讲了标 📄🎙️;课上新出现的概念加行 |
| `<课程>/_meta/术语表.md` | 教授口头定义比讲义好的,加 🎙️ 列 / 行 |
| `<课程>/_meta/待并入术语总表.md` | 跨课程通用的新术语登记(不直接改根总表) |
| `<课程>/_meta/作业与DDL.md` | 课上说的作业 / 提交方式 / 截止 / 参与记录方式,带时间戳 |
| `<课程>/00-课程总览.md` | 模块表该行改 ✅ v1.0(转录已合并 日期 + 一句缺口说明);`transcripts/` 状态表加行;目录树加文件 |
| `_meta/转录处理规则.md` §8 | 加 / 改本课本讲那一行:覆盖、时长、判定、特殊之处 |
| `README.md`(= GitHub 首页) | **全部信息点**:「五门课」表该课的「笔记」列(`M0N v1.0`)与「转录」列(`M0N ✅` / `W0N ✅` + 缺口一句话)、「待办 / 最近完成」表(旧的「待导出」行改 ✅ ~~划掉~~ + 结果一句)、目录树注释(若文件命名变了);收工跑 `readme_check.py` 必须 0 问题 |
| 上一讲笔记(若有顺延) | 见 §4.4 |
| Notion 🎓 学习进度 | 该 module 行:勾 `🤖 转录已交AI`,`状态` → `笔记v1.0`,`卡点/备注` 写缺口一句话;发现新作业 → 📌 DDL 库建行。**没有 Notion 工具的执行者**:在回执里列出应更新的字段,由主代理补 |

---

## 7. 阶段 5 · 验收(全部通过才算完成)

```
# ⓪ 完整性(必须 0 问题;任何 ✗ 立即停下报告)
PYTHONIOENCODING=utf-8 /d/anaconda3/python.exe _meta/tools/integrity_check.py verify
# ① 融合验收(必须 PASS)
PYTHONIOENCODING=utf-8 /d/anaconda3/python.exe _meta/tools/transcript_check.py audit <笔记.md> --transcript <本讲转录> [<被引用的其它转录>]
# 同一课堂两份重叠录音再跑逐源核验(A/B 分别指定,不用时间戳并集代替)
PYTHONIOENCODING=utf-8 /d/anaconda3/python.exe _meta/tools/transcript_source_check.py <笔记.md> <A转录.txt> <B转录.txt>
# ② 笔记质量不回退:与融合前同一模式跑(frontmatter 有 quality_spec: v1 才加 --strict),判定不得从 PASS 变 FAIL
PYTHONIOENCODING=utf-8 /d/anaconda3/python.exe _meta/tools/note_quality.py <笔记.md> --pages <讲义页数> [--strict]
# ③ 全库链接 + README 同步
PYTHONIOENCODING=utf-8 /d/anaconda3/python.exe _meta/tools/link_check.py
PYTHONIOENCODING=utf-8 /d/anaconda3/python.exe _meta/tools/readme_check.py
# ④ 有顺延回填时,对上一讲笔记也跑 ①(--transcript 给两份转录)
```

- ① 的 WARN 要么修掉,要么在 §9.5 写明为什么保留(例如 A5 低匹配是因为那段 ASR 乱码严重、已按 `[ ]` 规则标注)。**A13(方括号外的词在转录窗口找不到)与 A14(引文里的数字在转录找不到)逐条过一遍**:真是改写就补 `[ ]`,是 ASR 近似(UCago/UChicago)可留;A14 命中的数字必须回转录核对——数字是最危险的改写(2026-09-18 抓到 "32 weeks" 被写成 52 未标注)。
- ② 融合前先跑一次留底(写进 PROGRESS.md),融合后对比;新增内容触发的 L3 货币 `$`、L4 标题特殊字符等问题要修。
- 脚本报的行号是原文件行号,直接定位。

**回执**(写进 PROGRESS.md 末尾并汇报):
1. 三个脚本的判定与关键数字(🎙️ 格数、时间戳数、引文数、🔴 数、§8 检查行数)
2. 转录登记:起止、段数、缺口判定与依据、顺延边界
3. 回填了哪些 🎙️ 格(A/B/C/D/E 各多少)、§9.2 前三条
4. 上一讲 ❓ 被解决的项
5. 没做到的事与原因(例如 Notion 未更新、某练习题答案未录到)
6. 追加到 `reference/asr-dictionary.md` 的条目数

---

## 8. 自检清单(交付前逐条打勾,写进回执)

- [ ] 转录全文读完,`align.md` 时间区间首尾相接覆盖全程
- [ ] 文件已按 §5 命名;scan 结果与完整性判定(含内容证据)写进 §9.5
- [ ] "待转录补充" = 0;每个 🎙️ 格五选一且合规
- [ ] 每个时间戳带反引号、真实存在;每句原话斜体直引号、改写加 `[ ]`(A13 / A14 逐条看过)
- [ ] ❓ 与 ⏭️ 没混用;每个 ⏭️ 在 §9.1 有依据
- [ ] §6.1 数量表更新、§6.2 每条 🔴 有原话;被教授降权的条目已降级
- [ ] §8 覆盖列无空、统计句、时间分配表
- [ ] §9.2 按价值排序、§9.5 反方视角三问
- [ ] 顺延内容回填到上一讲并改其 ❓ → ✅(如适用)
- [ ] 考点库 / 台账 / 术语表 / 作业与DDL / 00-总览 / 转录处理规则 §8 全部回写;README 五门课表 + 待办表都改了(`readme_check.py` 0 问题)
- [ ] `transcript_check.py audit` PASS;`note_quality.py` 不回退;`link_check.py` 0 问题
- [ ] frontmatter `transcript: merged`、`status: v1.0`、`updated`;§9.6 有合并行
- [ ] 没有碰 `course_files_export/`;没有引用 Notta 中文版;没有一处"教授说"缺时间戳(A10 WARN 已清或已解释)

---

## 9. 工作目录与断点续做

- Claude Code:用会话 scratchpad;其它 agent:`%LOCALAPPDATA%\Temp\transcript-merge\<课程码>-M0N\`。**不要在 vault 里建临时文件**(此前有把脚本输出落到 vault 根目录的事故)。不要用 `/tmp`。
- 工作目录里维护 `PROGRESS.md`:阶段 0–5 各一节,每完成一步就写(时间戳、产出文件、关键判断)。额度中断后**从 PROGRESS.md 最后一步继续**,不重做。
- **分片模式下分片代理不写 vault**(只产出 patch.json / findings.json,见 §11)。单体模式或主代理的零星修补:大段改写用脚本(Python `str.replace` + `assert count == 1`)落盘,不手改;脚本用编辑工具写成文件再运行(shell heredoc 会吃反斜杠和中文);**落盘一律 `atomic_write`**。
- 融合结束后主代理把工作目录(patch / findings / align / PROGRESS)打包进 `D:\上课资料\CityU_backups\merge-<课程>-M0N-<日期>.zip`——它们是可重放的改动记录(2026-09-17 AC6761 M03 被截断后就是靠改动脚本重放找回的),不进 vault。
- 数字(用时、占比、段数)全部由脚本算出并在笔记里注明脚本名或 "按时间戳"。

---

## 11. 分片并行模式(默认流程)

> 目的:把 40 分钟的串行子代理压到 ≈ 17 分钟,同时**只让一个写者碰 vault**。内容规范(§2–§7)不变;变的是分工与落盘方式。

### 11.1 角色与产物

| 角色 | 谁 | 读什么 | 产出 | 不做什么 |
|---|---|---|---|---|
| **主代理**(登记 + 合并) | Opus | scan 输出、笔记 §8 页码表、上一讲 ❓ | 改名、`scan`、**分片表**(写进任务单)、`main.json`、`merge_apply.py` 合并、四项验收、Notion、提交 | 不写 🎙️ 内容 |
| **分片代理** ×2–3(并行) | Sonnet | 规则文件、任务单、**整份转录**、**自己那段笔记**(按行号范围) | `shard_k/patch.json`(自己小节的 🎙️ 格 + §8 覆盖行)、`shard_k/findings.json`(🔴 行、§9.x 行、时间分配、元文件追加行、任务单问题答案)、`align.md`、`PROGRESS.md` | **不写 vault**;不引用自己时间段外的时间戳;不动 §0/§6/§9 |
| **验收代理** ×1 | Sonnet | 合并后的笔记、转录、任务单 | 语义核对报告(解读是否走样 / 任务单问题证据 / 🔴 依据 / 零基础 3 题) | 不改文件 |

### 11.2 切分规则(主代理,写进任务单「分片表」)

- 按 **(转录时间段 → 目标笔记)** 切,不按页数对半:顺延段(回填上一讲)自成一片;本讲正文按 **🎙️ 格数 × 转录分钟数** 均衡切成 2 片(>2.5 小时的课可 3 片)。行政段(考试 / 作业 / 分组)归它所在时间段的分片。
- 每片给:时间段、目标笔记、**笔记行号范围**(`grep -n '^### \|^#### '` 取)、该范围内的 🎙️ 格数与小节标题清单、`important/exam/…` 信号词里落在本段的时间戳。
- 分片边界落在小节之间;一段转录同时讲两片的内容时,归内容多的那片,并在任务单里点名。

### 11.3 分片代理的落盘格式

只写工作目录 `shard_k/`,格式见 `reference/formats.md` §10:
- `patch.json`:`cells[]`(`section` = 小节标题原文或 `#### 2.4.3` 这样的唯一前缀;`block` = **整个 🎙️ 格**,以 `**🎙️ 课堂补充**` 开头,到下一格标签之前)、`s8[]`(`page`、`coverage`)。
- `findings.json`:`red[]`(§6.2 整行)、`s91[]` / `s92[]` / `s95[]`(整行)、`time_alloc[]`、`class_summary[]`、`kb_rows[]` / `ddl_rows[]` / `term_rows[]` / `ledger_rows[]` / `cross_rows[]` / `asr_rows[]`(元文件追加行)、`answers[]`(任务单问题:题号、答案、时间戳、原话)。
- **自验**:把 patch 应用到笔记副本上跑 `merge_apply.py --dry-run`(主代理在任务单给出命令),audit 与 note_quality 都过再交;回执 = `PROGRESS.md` 末尾 + 汇报,格式 `formats.md` §9。

### 11.4 主代理的合并

```
PYTHONIOENCODING=utf-8 /d/anaconda3/python.exe _meta/tools/merge_apply.py <工作目录> --note <笔记相对路径> --transcript <转录…> --dry-run   # 先看报告
PYTHONIOENCODING=utf-8 /d/anaconda3/python.exe _meta/tools/merge_apply.py <工作目录> --note <笔记相对路径> --transcript <转录…>             # 通过后一次写入 + 元文件追加
```

- `main.json` 由主代理写:`date`、`class_date`、`span`、`merge_row`(§9.6)、`replacements[]`(文首提示块、§6.1 数量表、任何精确替换)。
- `merge_apply.py` 把 findings 渲染进 §0 / §6.2 / §8 时间分配 / §9.1 / §9.2 / §9.5 / §9.6 与 frontmatter,把 `*_rows` **追加到各元文件末尾**的日期区块(不再逐处 grep 插入;`00-课程总览` / 根 `README` / `转录处理规则` §8 那三行仍由主代理改)。
- 任何 FAIL 都不写 vault;修的是 patch / findings / main.json,再跑一次——不要手改 merged.md。
- 通过后:`integrity_check.py verify` → 派验收代理 → 修补 → Notion → README(五门课表 + 待办表,`readme_check.py`)→ 提交。

### 11.5 时间预算(2 小时课)

登记 3 min ‖ 分片 ×2 并行 ≈ 12 min ‖ 合并 + 验收脚本 2 min ‖ 验收代理 5 min ‖ 修补 / Notion / 提交 3 min。分片超过 15 分钟没回执,主代理看它的 `PROGRESS.md` 再决定等或重派。

---

## 10. 禁止事项

- 不把转录当讲义的附注顺手补两句了事——它是独立一等材料,要做**全程对齐**。
- 不在没读完全文时下"课上略过"的结论。
- 不把中文转述写成引文,不把讲义句子写成 🎙️ 原话。
- 不为了让 A5 通过而把原话改成转录里的乱码——乱码就不引。
- 不因为"课上没讲"而删减 v0.9 已有的正文;⏭️ 只降优先级,不删内容。
- 不修改 `📚 课表与每日安排`(Notion 旧库)。
- 不动 `👁️ 已通读` / `✅ 自测通过` / `复习次数`。

Files in this skill

  • SKILL.md25 KB
  • reference/asr-dictionary.md11.3 KB
  • reference/formats.md15.3 KB
  • reference/task-brief-template.md3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…