Skip to content

为付费课程导入建立私密修订历史 #21

Description

@mmm8091

背景

付费课程正文不能进入公开 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-importbaseline-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 命令,把所有现有课程当前状态写为 历史基线补录,不读取或打印完整正文。

验收条件

  • migration 可在本地 D1 和远程 D1 正常应用。
  • 同一内容重复导入不会制造重复修订。
  • 修改正文后会保留修改前和修改后的两个私密版本。
  • 修改标题或 summary 也会产生修订,并继续同步讨论帖标题。
  • 当前课程读取、Gate、反馈和讨论帖行为不变。
  • 普通用户与现有 MCP 工具无法读取修订历史。
  • backfill 后每个现有课程至少有一条基线记录。
  • 文档明确修订历史含付费内容,不得进入公开日志和 Issue。

非目标

  • 第一版不做学员可见的课程版本 diff。
  • 第一版不在课程页展示完整更新日志。
  • 第一版不允许通过 MCP 回滚或批量导出历史正文。

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:course课程内容与课程体验area:deployment部署、CI 与运行环境ready-for-agent定义完整,Agent 可冷启动接手

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions