背景
付费课程正文不能进入公开 Git。当前 course_sections 只保存最新正文,导入更新会覆盖旧内容,因此课程编辑缺少可追溯的私密版本历史。
决策
保留 course_sections 作为当前读取真相,新增仅存在于 D1 的课程修订表。修订正文不通过公开页面、普通管理员列表、MCP 或外部 API 导出。
数据模型
新增 course_section_revisions,至少包含:
id
section_slug
title
summary
body_md
content_hash(对标题、摘要、正文、可见性和 entitlement 生成 SHA-256 指纹)
change_note
source(首版固定为 course-import 或 baseline-backfill)
created_by(课程导入使用 SYSTEM_USER_ID)
created_at
修订记录不可由普通课程 upsert 覆盖或物理删除。
导入行为
scripts/import-course-section.mjs 在远程发布导入时要求 --change-note。
- 指纹与最新修订相同则不新增修订,但仍允许同步课程讨论帖元数据。
- 指纹变化时,在同一份 SQL 中更新当前课程并插入一条新修订。
- 不把正文、hash、课程差异输出到日志、Issue 或公开构建产物。
- 更新
docs/agents/course-content.md 的命令示例与验证方式。
- 提供一次性 backfill 命令,把所有现有课程当前状态写为
历史基线补录,不读取或打印完整正文。
验收条件
非目标
- 第一版不做学员可见的课程版本 diff。
- 第一版不在课程页展示完整更新日志。
- 第一版不允许通过 MCP 回滚或批量导出历史正文。
背景
付费课程正文不能进入公开 Git。当前
course_sections只保存最新正文,导入更新会覆盖旧内容,因此课程编辑缺少可追溯的私密版本历史。决策
保留
course_sections作为当前读取真相,新增仅存在于 D1 的课程修订表。修订正文不通过公开页面、普通管理员列表、MCP 或外部 API 导出。数据模型
新增
course_section_revisions,至少包含:idsection_slugtitlesummarybody_mdcontent_hash(对标题、摘要、正文、可见性和 entitlement 生成 SHA-256 指纹)change_notesource(首版固定为course-import或baseline-backfill)created_by(课程导入使用SYSTEM_USER_ID)created_at修订记录不可由普通课程 upsert 覆盖或物理删除。
导入行为
scripts/import-course-section.mjs在远程发布导入时要求--change-note。docs/agents/course-content.md的命令示例与验证方式。历史基线补录,不读取或打印完整正文。验收条件
非目标