# 课程交付政策

本政策把“已发布阅读页”和“已交付实验”分开。每节课都必须围绕自己的问题提供静态解释和可使用的证据。仓库里存在页面，不等于课程已经有可运行实验或教学视频。

## 交付类别

| 类别 | 静态解释 | 可使用证据 | 本地执行 | 视频规则 |
|---|---|---|---|---|
| 知识/概念（K） | 必须有：问题、边界、推导、练习与局限 | 必须有：带标签的概念图，或可引用/回放的实验结果，使练习可以作答 | 不要求 | 视频回答明确问题时标为“已有”；否则写明“计划中”或“无需视频”的理由 |
| 可运行实验（L） | 必须有：上述内容，以及拟合/开发/最终评估划分和本地命令 | 必须有：来自声明运行的已检查报告、指标或图表 | 计算实验必须有 | 对每个明确问题记录“已有”“计划中”或“无需视频”；视频不能替代报告 |
| 实验设计草稿 | 必须有：冻结的问题、边界、观测、控制和验收标准 | 在本地运行或认可的概念证据出现前为待补 | 计划中 | 只有未来视频有明确教学问题时才标计划中 |
| 真机提案 | 必须有：流程、安全边界和证据计划 | 真机运行完成评审前为待补 | 本地机器/真机服务 | 标计划中或无需视频；不能暗示已有真机证据 |

课程地图使用**阅读**、**概念**、**可运行**、**设计草稿**和**计划中**这些类别。“可读”只表示该类别的阅读内容已经开放，不表示所有交付表面都已完成。

## 共享证据契约

静态页面必须可以独立阅读。它要写明学习问题、系统边界、拟合器可见的信号、受控对比、证据状态、带解答的练习，以及局限或下一项实验。每张图和每个数字都标记为**运行记录（明确仿真或真机）**、**回放**、**概念**、**计划中**或**诊断**。概念图可以支撑阅读练习，但不能被描述成仿真结果。

计算实验还必须声明 Oracle/Student 边界、拟合与最终留出划分、配置、资源预算、可复现命令和已检查报告的输出路径。只用于评估或 Oracle 诊断的信号不能进入拟合或模型选择。浏览器回放和视频只是证据视图，不会暗中重新拟合，也不能替代报告。

## 视频状态

视频是解释表面，不是普遍的完成勾选项。每节课都要把候选视频放在它回答的问题旁，并选择一种状态：

- **已有：** 已检查的 MP4、字幕和文字解释都存在，且与报告或明确标记的概念一致。
- **计划中：** 某个明确问题适合视频，但源运行或渲染尚未完成。没有视频时页面仍必须可理解。
- **无需视频：** 视频会重复静态推导或紧凑图表；必须说明理由。

课程地图和[课程状态](course/status.zh-CN.md)为全部 19 个 K/L 课程编号保留这项状态。一个课程复用已有素材时，必须在本课页面说明复用视频回答的问题和边界。

## 制作顺序

1. 冻结课程契约：问题、边界、观测、Student、划分、控件、证据、缺失效应和资源预算。
2. 为可运行实验构建并验证本地数值路径。生成的报告和机器可读指标放在 `reports/<lesson>` 下。
3. 编写静态页面和可作答练习。K 课没有本地运行时，可以加入概念图，但要明确标记。
4. 判断有限浏览器表面是否有用。WASM 是可选的，只能在声明的包、内存和时间预算内回放已完成结果或执行受限操作。
5. 为明确问题制作或复用视频，再检查两种字幕、海报帧、链接和与原场景的时序。
6. 构建成对的中英文 HTML，运行静态链接、素材和数值检查。学员验收仍是独立门槛。

## 浏览器与本地边界

静态页面和视频承载解释。长时间拟合、原生仿真器、大数据和真机使用本地 CPU/GPU 实验作为参考路径。浏览器表面是可选的受限适配器：只改变视图的控件读取已完成运行，拟合控件必须展示运行和完成状态。不能因为有 Marimo 或 WASM 导出，就承诺浏览器实验。

## 执行判断

以下是工程指南，不是平台硬限制：

| 预算审阅结果 | 交付选择 |
|---|---|
| 小型纯 Python 计算、短数组、支持的包、通常几秒内 | 增加 WASM 交互 |
| 回放有用，但拟合慢或数据较大 | WASM 展示预计算结果，本地拟合 |
| 原生/GPU 依赖、大内存、长优化、多进程或硬件访问 | 本地/服务器完整计算，静态解释、已有短片与可选回放 |

Marimo 文档给出约 2 GB 的 WASM 内存上限，并说明浏览器并发适配器不提供真正的 CPU 并行。随着课程从单自由度走向腿和整机，后两种选择越来越重要。参见 [Marimo WASM 指南](https://docs.marimo.io/guides/wasm.html)。

## 对实验阶梯的应用

课程范围与前置关系以[统一设计稿](lessons/course-design.zh-CN.md)为准。K 课以静态文字、图表和引用的实验结果为主，不要求独立数值实现。下表描述交付目标；H 保留既有安排，暂不参与本轮设计。

| 级别 | 静态解释/计划中或已有素材 | WASM 角色 | 完整实验 |
|---|---|---|---|
| L0 惯量与阻尼 | 核心课程和固定报告 | 小拟合与受限控件 | 本地 CPU 和 Notebook |
| L1 延迟伺服负载摆 | 核心课程、机械解释和报告 | 依赖打包后的小拟合、回放和残差视图 | 本地 CPU 和 Notebook |
| L0-E/L1-O；L1-S 选修 | 激励、观测或限幅的独立受控对比 | 预算检查后可选有限交互 | 本地 CPU |
| L2 固定基座腿 | 解释耦合 | 默认预计算回放或很小的预览 | 本地仿真与拟合 |
| L3 接触 | 接触失效解释 | 静态或回放；小案例满足预算时例外 | 本地接触实验 |
| L4 Microduck | 核心解释、报告汇总和有用时加入的短片 | 汇总/回放 | 本地或调度整机拟合 |
| L5 Microban | 核心课程、规模证据 | 可选结果浏览 | 本地/GPU |
| L6 结构失配与跨仿真器 | 单引擎结构失配和真正跨引擎两案 | 固定结果或回放 | 两个后端的本地复现 |
| H 硬件路线 | 安全与实验规程 | 不在 WASM 执行硬件操作 | 本地与硬件服务 |

这样既能保持课程可读、可部署，也允许计算规模增长，而不要求每位学员在浏览器标签页中下载和执行最大的实验。

## 浏览器准入与分表面验证

只有以下条件都满足时才增加 Marimo WASM：

- 所需包有 Pyodide/WASM 构建；
- 本地模块和公开数据可以打包或作为静态资源获取；
- 控件回答一个简短学习问题；
- 测量的默认和最坏时长、内存都符合浏览器预算；
- 操作不需要 GPU、原生进程、共享内存或硬件；
- 浏览器执行失败时，解释和结果仍可理解。

优先使用回放、参数预览、短仿真和小拟合。声明输入/数据规模、后端依赖、默认和最长时长、峰值内存，以及操作属于回放、即时、交互还是任务。记录本地回退命令、依赖、预期资源和报告输出。

分别验证已交付表面：仅用 HTTP 服务打开静态页，检查证据和视频链接；对 WASM 检查冷启动、一个学员控件、一次完成交互和控制台/网络错误；对计算实验，在声明环境复现本地报告并对比指标。这些工程检查不能提供独立学员验收。

## 完成标准

课程只有在静态包能回答问题、声明的证据可使用且可复现、局限清楚时，才可标为**可运行**。视频可以独立标为**已有**、**计划中**或**无需视频**。独立学员验收、真机验证和未来 WASM 打包都保留为明确的独立门槛。
