跳到主要内容

🧪 实验搭子

把课件当文档来写:改动走补丁、发布过闸口、阅读一份单文件 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 份产物

已覆盖学科​

力学(平均速度、传送带)、光学(凸透镜成像两档)、声学(声音的产生与传播)、化学(量筒读数)、生物(显微镜使用)等课件已跑通全流程,配套仿真内容可持续扩展。