更新日志
本页由 website/build.js 从仓库 git 历史生成,只收录提交标题里带版本号的构建与发版提交。
当前共 14 个版本,最新为 1.0.28(2026-10-15)。
1.0.28
最新构建:1.0.28(问答落库 + 题目记录)
该版本为构建提交,提交信息里没有附变更说明。
commit c6e92a53ce
1.0.27
构建:1.0.27(讲题隐藏 + 问答首位 + 问答不超纲 + 套件提速)
该版本为构建提交,提交信息里没有附变更说明。
commit 14d5285600
1.0.24
构建:1.0.24(问答升首位 + 答案闸门 + 每步试一试 + 图文一致性校验)
该版本为构建提交,提交信息里没有附变更说明。
commit 531c178cbe
1.0.22
构建:1.0.22(照片增强 + 发布门禁在受限环境下降级)
该版本为构建提交,提交信息里没有附变更说明。
commit 63a23f9afd
1.0.20
构建:1.0.20(圆参数接受 x/y 形态 + 网格步长按像素算)
该版本为构建提交,提交信息里没有附变更说明。
commit b9671d2ff9
1.0.15
构建:1.0.15(家长模式全量提示词编辑 + 修好提示词卡片渲染不出来的老 bug)
该版本为构建提交,提交信息里没有附变更说明。
commit a3f5cd0f20
1.0.13
构建:发版 1.0.13(§29H 包内自检修复 + 打包自检门)
该版本为构建提交,提交信息里没有附变更说明。
commit 137a677c11
1.0.11
构建:1.0.11(专注模式上锁即生效 + 逃生门逐条验证)
- 用户诉求:开启专注模式后,家长点「立即上锁」应当立即生效。原来全项目没有任何一条路径
- 在“进入锁定状态”时施加专注约束(ipc.js 里那段 !isUnlocked() 是死代码;lock.js 只有 onUnlocked)。
- lock.js 新增 onLocked/notifyLocked + 到期定时器(手动/blur/到期三条路径统一收口 enterLockedState)
- main.js 订阅:上锁时若已启用专注模式即施加(照启动那条路:安全阀、日志、lock:changed)
- 时长从上锁那一刻起算(用户选择):kiosk_started_at 重置为锁定时刻
- ipc.js 死分支改成说清真语义;保留“启用那一刻不锁家长”的安全设计
- 修掉两条“给用户的承诺是假的”:
- Cmd+Opt+Q 原来被我们自己的 before-input-event 吃掉(从不检查 input.alt),而界面承诺它可强制退出。
现放行带 Opt 的组合,界面文案改为真实可用的 Cmd+Opt+Esc - --no-kiosk / HENRYEDU_NO_KIOSK=1 原来只打了条日志、什么也 gate 不住。现真正跳过施加(两条路径),
且不清掉家长的设置(真机差分实测:日志有跳过、无施加痕迹、kiosk_enabled 仍为 1、app_log 可审计) - 一并修掉的逃生门/安全缺陷:
- 全屏兜底触发过早,造成 kiosk+fullscreen 叠加态,解锁退不干净(实测解锁通知发了 3 次、isKiosk 始终 true)
现改三级兜底(simpleFullScreen → fullScreen → setBounds),判据是读回边界是否覆盖工作区 - releaseFrom 一次不算数,改为读回真实状态 + 有限重试并加代际互锁(陈旧释放不再拆掉刚上的锁)
- verify() 定时器不被 stopEnforcing 取消,曾导致解锁后抢焦点并永久置位 failedThisRun
- 到期路径不发 lock:changed,曾导致家长被全屏锁住时家长模式页面还留在屏幕上
- lock.js 重算即过期时静默上锁(本轮引入),现走同一收口
- 断言层面:22B 那四条“没叠上标准全屏”判 isFullScreen(),实测只调 setKiosk(true) 后约 107ms
它自己就变 true,等于在量 macOS。改成因果判据(setFullScreen 调用数 = 0) - 验证:itest 1408/0、e2e 368/0、test-tex 79/0;包内自检 arm64 与 x64 各 1386/0(逐名一致;
- 与仓库差 27-5 条,差的是仓库级断言被打包级断言替换,日志里都有显式 SKIP 说明)
- 两架构 DMG 均 hdiutil verify VALID、minos 12.0、codesign 通过;build-info gitCommit=0240570 gitDirty=false
commit 91de7e287f
1.0.10
构建:1.0.10(两条延后项修复后的发布)
- L3 讲解不再显示两遍:渲染层按段判断结构化字段是否存在、缺了就回退到压平正文
(真实库 361 条消息中有结构化 steps/summary 的为 0 条 ⇒ 老档案全部走兜底,安全)
门控带层级(ev.level === 'L3')—— 否则某次 hint 响应带 steps 会让整段 L1/L2 提示文字消失 - 错题本图形描述三条分支都打印(每张卡最多一份);描述行改同步占位,落在动作行之前
- 分支①入场券改 isValidBbox —— 不再拿整页照片冒充图形并吞掉描述
- 验证:itest 1287/0、e2e 368/0、test-tex 79/0
- 包内自检 arm64 与 x64 各 1265/0(逐名一致);包内 e2e 368/0(覆盖本次渲染层修复)
- 两架构 DMG 均 hdiutil verify VALID、minos 12.0、codesign 通过;build-info gitCommit=2d513e3 gitDirty=false
commit 575129d3b9
1.0.9
构建:1.0.9(界面字号可调 + 审计修复后的发布)
- 新增:界面字号档位(整窗缩放)—— 标准 1.0 / 大 1.15(默认)/ 特大 1.3 / 超大 1.45
- 存 setting.ui.font_scale,复用既有 app.setting.get/set(无需迁移、白名单已含 ui. 前缀)
- 只新增一条通道 ui.setScale(ipc.js 与 preload.js 两处 + api.js 包装),只认四档
- 设置页「界面字号」卡片;Cmd + / - / 0(回默认档)
- ★ 实测:只设一次 setZoomFactor 会被 Chromium 静默覆盖回 1.0(且不报错),
故改为「立即设 + 0/60/250/800ms 核对,只有真漂了才补设」 - 收尾两行:.sidebar 与 .cam-box 各加 overflow,使溢出时自己滚而不是拖走整页
- 测试:itest 1287/0、e2e 350/0、test-tex 79/0;包内自检 arm64 与 x64 各 1265/0(断言逐名一致)
- 两架构 DMG 均 hdiutil verify VALID、minos 12.0、codesign 通过;build-info gitCommit=5c00ba7 gitDirty=false
commit 59c77dd10c
1.0.8
构建:1.0.8(文本渲染与图形处理审计修复后的首个发布)
- 版本 1.0.8 相对 1.0.7 的修复(审计报告 docs/audit-2026-10-08-text-and-figure-rendering.md):
- 公式渲染
- 讲解模型不再盲写:图形描述真正进入提示词(questionBlock 容错读 figure_desc/figureDesc/figure_json);
PROMPT_VERSION 7→8,否则修好的输入会躺在 90 天缓存后面 - 27 处裸渲染站点接上 renderRich(此前 feedback/studentWork/summary/crossModel.answer 等直接上屏字面 $)
- 输出侧五个任务补 $…$ 约定(recognize_page/grade/chat/hint/explain 此前从未要求分隔符)
- normalizeText/renderRich 两处加 $ 闸门:含货币的英文句子不再被当公式吞掉
- 空组命令不再渲染成 KaTeX 报错节点
- 两个套件第一次有用例经过 renderRich(此前 0 命中)
- 图形
- 历史详情/学情页补图形与文字兜底(memory.history 补 figureDesc;tutor.detail 带图形)
- kind 缺失时不再连 desc 一起丢;批改落 figure_json,下游不再拿整页照片冒充图形
- 工具链安全
- 破坏性测试(--itest/--e2e)默认隔离到临时档案,不再碰真实档案
- provider/Key 快照落盘成 journal,硬杀进程后下次启动自动恢复
- 验证:itest 1263/0、e2e 321/0、test-tex 79/0;包内自检 arm64 与 x64 各 1241/0;
- 两架构 DMG 均 hdiutil verify VALID、minos 12.0、codesign 通过;build-info gitCommit=cf9367f gitDirty=false
commit 7f97ebdec2
1.0.7
构建:1.0.7(材料分组批改 + 互动演示面板合入 main 后的首个发布)
- 合并 feat/material-grouped-grading 到 main(快进,无合并提交)后的发布构建。
- 版本 1.0.7 首次包含:
- 材料分组批改:完形填空/阅读理解这类「一篇材料 + 多个小题」现在逐空批改,
一篇材料一次调用;凑不齐时只拒那一篇、同页独立题照批,并给手工补录入口 - 互动演示面板(此前分支的工作,一并合入)
- 验证:
- itest 1222/0、e2e 314/0(合并前在 1f35740 上跑的,快进后树逐字节相同)
- 包内自检 arm64 与 x64 各 1200/0,无 MODULE_NOT_FOUND/ENOENT
- 两架构 DMG 均 hdiutil verify VALID、minos 12.0、codesign --verify --deep --strict 通过
- build-info: version=1.0.7 gitCommit=1f35740 gitDirty=false
commit df4c8a2c1a
1.0.4
构建:发版 1.0.4(含整支评审修复波,两架构同一版本)
- 修复波(ee2c25d)之后的最终发版。构建信息显示 1.0.4 · ee2c25d(无脏标记),
- 确认 S9 的修复生效:release 的脏检查排除 package.json 后,正规发版不再
- 误报「有未提交改动」。
- 两个 DMG 均已挂载验证:arm64 / x86_64(Rosetta)各 973/0,无 MODULE_NOT_FOUND。
commit f5617bc035
1.0.3
构建:发版 1.0.3(arm64 + x64 DMG 同版本)
该版本为构建提交,提交信息里没有附变更说明。
commit c1ab841b1f