🧪 实验搭子
把课件当文档来写:改动走补丁、发布过闸口、阅读一份单文件 HTML
实验搭子是一套面向理科实验课件的生产管线与阅读平台:一个课件 = 一份三层声明式文档(model / scene / interaction + lesson)+ 一个共享引擎运行时,由编译器拼装成单文件 HTML 交付。文档是唯一可编辑产物,LLM 与人工都只产文档或补丁,引擎代码由人维护。
核心机制
- 单一真相源 —
model.ts是唯一数值来源,视图层只做投影、读数层只消费模型输出;绘制代码里不允许出现物理量字面量 - 可精确重放 — 状态模型必须是解析式、代数式或可重放状态机,禁止「每帧累加」,避免结果依赖帧率
- 补丁式修订 — 迭代以 RFC 6902 补丁提交,追加式修订日志与后端 revisions 表同构,可回溯、可回滚
- 档位裁剪 — 参数与读数的
minTier划定学生语言边界,模型层可用超纲量,界面只说该档位学过的概念 - 单文件产物 — 零外链、零运行时依赖,双击即开;KaTeX 在编译期渲染并内联字体子集
- 三种形态 — 完整版(教师/学生切换 + 教案栏)、
?mode=student学生独占、?mode=embed网页嵌入
G1–G6 六道闸口
没有跑绿的产物不存在「应该没问题」这个状态:
| 闸口 | 查什么 |
|---|---|
| G1 | 文档 schema、taxonomy、参数落格点、控件可达 |
| G2 | 模型不变量:手算对拍、单调性、分支翻转 |
| G3 | 无头渲染冒烟:色桶分布与主背景覆盖率 |
| G4 | 交互契约:滑块 / 开关 / 按钮 / 拖拽热区真接线 |
| G5 | 单文件导出纪律:零外链、体积、自包含 |
| G6 | 视觉对照:产物态与参考态 dHash 相似度,均值地板 + 对历史收敛 |
每修完一个 bug 都要沉淀成 G2 invariant 或 G3/G4 检查项,说不清「为什么能挡住同类问题」就不算修完。
技术栈与形态
- 引擎与 CLI:TypeScript · tsx · Zod · esbuild · Playwright(无头渲染校验)
- 后端:Rust · Axum · SeaORM · PostgreSQL,产物登记与发布物管理
- 前端:Next.js 15 App Router 双区——
(admin)生产区与(site)阅读区,Tailwind + 服务端 KaTeX - 量产路径:课标考点清单 → 每个考点一张课件卡(引擎复用、参数、教学剧本、断言条目)→ 同一引擎连做 5 份后回头改引擎与模板,而不是回头改 5 份产物
已覆盖学科
力学(平均速度、传送带)、光学(凸透镜成像两档)、声学(声音的产生与传播)、化学(量筒读数)、生物(显微镜使用)等课件已跑通全流程,配套仿真内容可持续扩展。