记录项目的关键进展、决策与变更。最新在上。 体例:每条含「日期 / 类型 / 摘要」,类型沿用 Conventional Commits(feat / fix / chore / docs / ci)。
- 17 集粤语用 gemini-3.8-flash-tts 录完、听辨、修正约 35 句后上传到服务器
audio/,只上传音频,未发新 release。原 key 撞月度消费上限后改用第二个 key;后 6 集在 urop 服务器上录(本机代理不稳)。细节见docs/dubbing-handoff.md。
- feat:/watch/ 播放器支持配音。每集每种语言一条音轨(Gemini TTS:普通话 / 英文 Charon,粤语 Iapetus),manifest 记录每条字幕的朗读时长;播放器据此拉长场景,并把每段动画分段线性映射到原 cue 区间,句子说到哪画面演到哪。音频即时钟(缓冲时画面等待);倍速、拖动、章节、ponder 暂停、全屏均同步;开关配音(控制栏按钮 / M 键,默认开,记在
knowcs-voice)时停在同一画面。没有配音的集或语言、或 manifest 与场景对不上时,行为与原来完全相同。 - feat:配音时字幕显示讲稿:en / zh 仍是站点字幕(只在朗读文本里把公式、单位、坐标改成口语,并念出 ponder 问题和 recap 要点);粤语显示口语粤语稿(用户决定)。17 集 × 3 语讲稿入库
src/content/narration/,测试检查每条字幕一句、en / zh 与站点字幕一致、朗读文本无难读符号。 - tooling:
scripts/tts/narrate.py:gen按场景一次请求再按停顿切分(比逐句省约 3 倍配额,语调连贯;改过的句子单独重录),片段按内容缓存;build拼成 AAC 48k 单声道(约 1.2 MB / 3 分钟)并写 manifest;qa用 gemini-3.8-flash 按场景听辨。timings.mjs用 Vite SSR 导出各集场景时长。 - deploy:音频不进 Git、不进 dist:服务器
knowcs/audio/共享目录,每个 release 内audio -> ../../audio软链接(deploy/README.md);dev / preview 由 Vite 中间件从work/dubbing/out/audio提供(支持 Range)。Service Worker 不缓存/audio/。 - content:同日晚按用户要求,先用
gemini-3.8-flash-lite-tts(额度另计)录完其余 16 集的中英文并上线(每集每语一次请求,按听辨模型报的行起始时间切分,偏差过大时校验重取);粤语暂缓。KNN 保持 flash 三语。 - limit:Tier 1 TTS 每天 100 次请求。KNN 已完成(约 3 分钟 / 语言,原视频 95 秒);其余 16 集约需 405 次请求,按
docs/dubbing-handoff.md第 4 节分 4–5 天生成。测试 668 → 692。
- audit:20 个练习页的预设逐个用 Python 独立重算(scikit-learn 指标、SciPy 卷积、OpenCV
warpAffine逐像素、NumPy K-Means / Otsu / 交叉验证 / 感知机分数精确计算、讲义 XOR 反向传播逐步),并与讲义(Spring 2026 版)和九份往年试卷原文、官方答案对照;58 道判断题、17 集视频中的数字与引用同样核对。绝大多数一致。 - fix:反向传播视频字幕 δj1 / δj2 写成 0.023008 / −0.036922,改为 0.023010 / −0.036923(画面数值本来正确);模型评估视频把 126 人疾病例子说成「第 3 讲的例子」,讲义无此例,改为「仿 2022 期末 Q3(a)」。
- fix:交叉验证页「6 名病人」预设标为 2024 期末 Q3(b),但该题按真实 3-NN 投票评分(官方:6 折 5/6、3 折约 50%、2 折全错),与页面「见过该类就判对」的假设得出的 100% 矛盾;选中该数据时在结果上方显示说明。
- fix:Gaussian 朴素贝叶斯测验把很小的密度按 4 位小数取整成 0,正确答案反而判错;小于 0.001 时改用 3 位有效数字。讲义预设注明只用两个数值特征(讲义另乘糖尿病、呕吐两项,结果 17% / 83%)。
- fix:CNN 页与视频「2022 评分标准印成 13 × 13」改为「流传的一份 2022 答案」——课程发布的答案(FinalSample)是正确的 14 × 14。经典反向传播模块注明课程写法 δk = (O − T)·O(1 − O)、w ← w − ηδO(本页用相反符号,Δw 相同);卷积核模块注明输出亮度为 |Σ I·K|、核不翻转。文字题答案比较忽略空格(
torch.Size([2,2]))。测试 666 → 668。 - note(未改,需老师判断):第 6 讲 XOR 第 2 步课件 δj1 印成 −0.027463(应为 −0.027643),新 w₂ 应为 0.653822;第 3 讲 MCC 例题分母把 (TP + FN) 印成 (90 + 4)(结果 0.14 不变);2024 期末 Q2 题面
np.convolve([1,2,3,4],[0,1,0.5],'valid')印作 [2.5, 3.5],实为 [2.5, 4.0](视频已注明)。
- feat:NumPy、matplotlib、pandas 实验台的编辑器上方新增「运行引擎」单选:逐步演示(minipy,默认)或真实 Python(Pyodide,Web Worker)。选真实 Python 后,代码改动后自动在真实库中运行,输出(含版本与耗时)和 matplotlib 图显示在右栏,逐步可视化暂停;选择记在
knowcs-py-engine,全站共享。PyTorch、Keras、TensorFlow 中该选项置灰并说明没有浏览器版本。 - feat:打开实验台约 1.2 秒后在后台下载并启动 Python 运行时(省流量模式下不预载);各包仍按导入按需下载。worker 把从 Pyodide 地址取到的文件(wasm、标准库、lock、各 wheel)存入 Cache Storage(
knowcs-pyodide:<base>,换版本时清掉旧缓存),再次打开约 1.3 秒就绪。站点 Service Worker 激活时不再删除该缓存。 - feat:同一时间只运行一段代码,新的请求替换排队中的旧请求;单次运行超过 15 秒自动停止(提示是否死循环),worker 随即从缓存重启;运行中可手动停止。
- change:替换上一版的「用真实 Python 运行」卡片。浏览器检查:预载、缓存条目、自动运行、超时与重启、刷新后从缓存启动、matplotlib 出图、PyTorch 置灰,无控制台错误;390 宽无横向滚动,对比度通过。
- feat:NumPy、matplotlib、pandas 实验台(实验场页与笔记旁)在输出下方新增「用真实 Python 运行」卡片:点按钮后才在 Web Worker 里加载 Pyodide 314.0.7(CPython 3.14.2),用
loadPackagesFromImports只下载代码导入的包(NumPy 2.4.6、pandas 3.0.2、matplotlib 3.10.8、scikit-learn 1.8.0、SciPy、OpenCV),seaborn 不在内置包里,导入时用 micropip 安装。每次运行用新的命名空间;显示 print、stderr、最后一个表达式的 repr、Python 3.14 的 traceback 和 matplotlib 图(PNG);可随时停止(直接终止 worker)。minipy 仍是默认引擎,逐步可视化不变;PyTorch、Keras、TensorFlow 没有 Pyodide 版本,不显示该卡片。 - config:资源地址默认
https://cdn.jsdelivr.net/pyodide/v314.0.7/full/,构建时可用VITE_PYODIDE_BASE改为自托管或 COS + CDN(jsDelivr 在内地不稳定,目前未自托管)。首屏不加载任何 Pyodide 资源;首次运行约 7 MB(仅 Python)到 37 MB(含 scikit-learn),浏览器缓存后再次运行约 60 ms。下载失败时提示所用域名。 - note:Pyodide 的 pandas 是 3.0,字符串列的 dtype 显示为
str,与课程用的 pandas 2.x(沙盒仿照的object)不同。 - test:harness 先用本机 CPython 验证;无头 Chrome 端到端:NumPy 冷启动 / 热运行、报错行号、scikit-learn KMeans、停止后重启、matplotlib 出图、pandas、seaborn(micropip),无控制台错误;390 宽无横向滚动,对比度通过。测试 663 → 666。
- feat(可视化):步骤改为可横向滚动的「胶片条」:按类型配图标与颜色(调用 / 图 / 表格 / 形状流 / 计算图 / 训练曲线),显示位置、上一步 / 下一步按钮与方向键。模型形状流在表格上方画出网络结构图(特征图为立体方块,高度随尺寸、厚度随通道数;向量为细条;激活与 Dropout 作为箭头上的标签),与表格悬停联动,表格加参数量条。自动求导计算图改为自上而下、按真实字号绘制,按入边重排减少交叉,节点按角色着色(参数 / 数据 / 运算 / 损失),backward() 后梯度沿边回流的动画(减少动态效果时静止)。训练曲线加渐变填充、终点标记与逐轮悬停读数;表格斑马纹、索引列固定,loc / iloc 选中的交叉格加深;NumPy 网格空闲格按数值着色(正蓝负红)。
- feat(NumPy):新增 bincount(含 weights)、histogram、median、percentile、quantile、average(含 weights)、meshgrid、diff、pad、isin、isnan / isinf / isfinite、allclose、array_equal、tanh、log2、log10,归约支持 keepdims。新增调用类型「分组」:函数自己给出每个结果格来自哪组输入格(bincount 的计数、直方图的区间、pad 的边框、F.conv2d 的窗口),悬停可查。目录新增「计数与统计」「课程常用写法」两组(K-Means 最近质心、KNN 投票、稳定 softmax、z-score、one-hot、bincount 混淆矩阵、感知机预测)共 25 个示例。
- feat(matplotlib):新增 contourf(MaxNLocator 选等值线、按区间中点取色)、pie、errorbar、boxplot、annotate(箭头)、step;新增 KNN 决策区域、类别占比饼图、交叉验证误差棒、特征箱线图、标注早停点、阶跃与 sigmoid 对比 6 个示例。
- feat(pandas):新增 isin、nlargest / nsmallest、quantile、duplicated / drop_duplicates、sample、pivot_table(含 columns)、pd.cut(类别型,含区间标签与顺序,crosstab / groupby 按类别顺序)、groupby 选列后 agg 列表、apply(axis=1) 中用 row.列名,drop 接受另一个表的 index;新增 8 个示例(离散化后做朴素贝叶斯计数、去重、按列表筛选、取前 n、高斯朴素贝叶斯参数、逐行 BMI、K-Means 质心、训练 / 测试划分)。
- feat(PyTorch / Keras):F.conv2d 作为步骤记录并可悬停查看窗口;新增 torch.cat 与 stack、Sobel 边缘卷积、softmax → argmax → 准确率、padding='same' 与 strides、to_categorical 5 个示例。
- test:NumPy 2.2.6、pandas 2.3.3、matplotlib 3.10.8 的真实输出作为黄金值(ndextra、等值线层级与颜色、箱线图统计、pie 百分比、pandas cut / 去重 / pivot_table 等逐字一致);新示例在真实库中运行通过并与沙盒输出逐字比对(标量回显与 sample 抽样行除外,前者为既有约定,后者有提示)。PyTorch / Keras 未在本机安装,新示例只用已有黄金测试覆盖的接口,数值手算核对。测试 627 → 663。浏览器:六个库 1440 / 390 宽无控制台错误、无横向滚动,对比度与可访问名称检查通过。
- merge:合并
worktree-playgrounds(matplotlib / PyTorch / Keras / TensorFlow / pandas 实验台、Matplotlib 笔记、解释器扩展,测试 627 个)。docs/design.md的改动未合入(用户要求忽略该文件)。 - change:
/playground/现在是库沙盒页:顶部六张库卡片(NumPy、matplotlib、pandas、PyTorch、Keras、TensorFlow,按讲次排序,tablist + 方向键),下面是整宽两栏的实验台(左:目录、编辑器、输出;右:步骤与图),附「阅读对应笔记」链接。所选库写在网址 hash(/playground/#keras),全屏退出后恢复;入口在加载页面代码的同时预取该库。笔记页旁的实验台保留。 - change:首页恢复「课程地图 / 实验网格」切换(记在
knowcs-home-view),实验网格为上一版放在实验场的工具网格,新增标题。 - a11y:pandas 表格的 NaN、笔记行内代码颜色加深到 AA。浏览器检查:六个库在 1440 / 390 宽度无控制台错误、无横向滚动、无原始键,繁体文案正常。
- change:顶部导航只剩「课程 · 实验场 · 更多」;「更多」依次为视频、资料包、自测、拓展(当前所在栏目会显示在按钮上)。新增
/playground/实验场页:仿参考图的工具网格(按领域筛选、带计数的标签、每个实验一张线稿插图卡片、等宽英文副标题、试卷标签、READY / 已打开 与「进入实验 →」)。首页去掉「58 道判断自测」「公式表」入口与离线保存按钮(连同离线清单、Service Worker 保存逻辑与相关文案)。经典模块的考试提示移入交互卡片顶部,模块占满宽度;中文标签改为「考试提示」。 - change:Alpha-Beta 页仿用户提供的 HTML 重排:深色工作区、标题与状态图例、左侧预设与树画布(MAX / MIN / 叶子层图例)、右侧控制台与实时解释(α / β 与当前剪枝条件)、整宽叶子滑块沙盒,并新增可点击跳转的「算法运行追踪链」。
- fix:讲解视频「停下来想一想」需要反复点击、卡住:播放循环的时间副本会被渲染后的旧值覆盖到暂停点之前,导致每次继续都再次触发同一个暂停点。改为只由播放循环 / 跳转 / 重播写入,并记住刚继续过的暂停点。已在两集上验证一次点击即可继续。
- fix:第 11 讲只有讲解视频时按钮被拉伸成椭圆;关闭 i18next 在控制台的推广提示;手机与平板页眉不再换行(标题可截断,平板只显示语言图标)。
- ops:
deploy/knowcs.online.conf与线上配置更新:/assets/(文件名带内容哈希)返回Cache-Control: public, max-age=31536000, immutable;页面、sw.js、offline.json、清单仍为no-cache;error_page 404 /404.html,缺失页面返回 404 状态码与站点风格的 404 页。流程:备份到sites/knowcs/backups/knowcs.online.conf.20261008-102155,nginx -t通过后nginx -s reload(未重启容器)。验证:资源与页面缓存头、404 状态与内容、HTTP 301、gzip、mc.iloveust.com与pastpaper.knowit.top均正常;真实浏览器打开深层不存在路径显示完整 404 页。
- change:版本徽标改为「Beta」;页脚只保留「离线保存」按钮(删去版权行、「完全在浏览器本地运行」「公式由 KaTeX 排版」及对应文案);左上角标志改为与浏览器标签页 favicon 相同的网络图图标(内联 SVG)。移除不再使用的
__APP_VERSION__。 - perf:离线按钮不再在每次打开页面时请求
offline.json(12KB,服务器未压缩 JSON):构建时把版本与大小写入每页的<meta name="knowcs-offline">,按钮直接读取;offline.json只在点击保存时由 Service Worker 读取。清单文件改名manifest.json(服务器 MIME 表无 .webmanifest,原先以 octet-stream 返回)。
- feat:用无头 Chrome 把 SVG 标志渲染为 PNG:
icon-192.png、icon-512.png(写入 manifest)与满版的apple-touch-icon.png(iOS「添加到主屏幕」不认 SVG,原先会用截图),源文件在src/assets/icons/,构建时复制到站点根目录并纳入离线清单。ChromegetInstallabilityErrors为空。
- chore:删除已被实验页取代、无人引用的
PerceptronModule.tsx、PyTorchModule.tsx,及其专用的 PyTorch 速查表常量、CheatGroup类型、pytorch.*/perceptron.*文案与对应文案包;删除旧单页应用遗留的TabId类型。
- test:在临时环境安装 Keras 3.12(torch 后端)与 PyTorch 2.14.1 后对照:CNN 形状页 10 种层栈 × 分类 / 回归共 20 例,Keras 层名、输出形状、参数量全部一致;生成的 nn.Module 都能运行,通道在前的形状注释与实际输出一致、参数总数一致。PyTorch 页的 dtype / Size、
@与*、NumPy 共享内存、两次 backward 后 w.grad −1 → −2、no_grad 均与真实 PyTorch 一致。
- perf:模拟 150ms / 400KB/s 测量 49 个页面的 CLS。原来多数页面 0.16–0.29(页脚先出现、内容到达后被推下;讲解页骨架比播放器矮;离线按钮加载尺寸后变宽;公式表 KaTeX 字体到达后公式变高)。修复:页面占位
min-h-screen;PlayerSkeleton与播放器同结构同高度(舞台 + 字幕栏 + 控制栏);笔记骨架占满一屏;离线按钮尺寸只放在提示里;公式表先隐形渲染让所有 KaTeX 字体开始加载,document.fonts.ready(最多 3 秒)后再显示。复测:所有页面 ≤ 0.07(多数为 0)。
- perf:笔记预渲染时从 WebP / PNG / JPEG 文件头读出像素尺寸,写入
<img width height>(imageSize,17 张图与 PIL 结果一致),图片加载时正文不再跳动;浏览器检查 390 / 1280 宽度下 17 张图全部带尺寸、比例正确。
- perf:构建插件
preloadStrings在每个 HTML 的 head 注入一小段内联脚本,按与 i18next 相同的顺序(?lang=、已保存的选择、浏览器语言)选出语言并modulepreload对应的主文案,与入口脚本并行下载。页面预加载文案包时 i18next 尚未检测语言,改用detectLang()(src/lib/lang.ts)判断,避免误下载英文包。模拟 300ms / 200KB/s:仿射页首屏累计从 3.1s → 1.96s,下载 276KB → 137KB;首页 1.94s → 1.65s。
- a11y:仿射页输出网格(80 格)与卷积页输出网格改为「一个 Tab 停靠点 + 方向键移动」(roving tabindex),卷积页 Tab 停靠点 57 → 33;卷积网格去掉没有 row / gridcell 的
role="grid",改为带标签的 group,每格读出坐标与数值。考点地图在手机上主题列收窄、带吸附阴影,可见 3–4 份试卷。
- feat:matplotlib、PyTorch、Keras、TensorFlow、pandas 五篇笔记右侧各有一个实验台(共 77 个示例,围绕第 2–9 讲与往年考点),NumPy 面板与实验台都可全屏(Esc / 按钮退出,
#playground直接打开)。笔记中能运行的代码块带「试一试」。 - feat:新增
/notes/matplotlib/笔记(中英),讲课程用到的画法:Figure/Axes、imshow 的 cmap 与 vmin/vmax(第 7 讲)、图片网格(第 6 讲)、K-Means 散点、训练曲线、混淆矩阵(seaborn.heatmap)。 - feat:可视化:matplotlib 每次调用后的图(新增图元高亮、像素取色说明);PyTorch / Keras 前向传播的逐层形状流(尺寸公式、参数个数);
backward()的计算图;fit的训练曲线;pandas 每次表格操作选中的行列 / 分组;小张量运算的元素溯源。讲解提示覆盖 imshow 默认色图与拉伸、梯度累加、评估时 dropout 仍开、softmax + CrossEntropyLoss、漏 Flatten、整数标签配 categorical_crossentropy、过拟合、pandas 与 NumPy 的 std。 - feat:解释器支持语句块、函数、类(含继承库基类与 super())、with、lambda、推导式、dict、f-string、math / random;库通过
PyLib/PyObj/HostClass接入;时间预算防死循环;循环体只记录前两次迭代的追踪。另修正 Python 浮点 repr(1e-4 以下用指数形式),np.random 增加 normal / uniform / permutation / choice / shuffle。 - 决策:继续自研(见 design 6.10);训练示例的数据在代码中现场生成,不伪造 MNIST。
- test:与 CPython 3.10、NumPy 2.2、pandas 2.3、matplotlib 3.10、PyTorch 2.12、Keras 3.12 的真实输出做差分(Keras summary、PyTorch 打印与报错、pandas 表格逐字一致),张量算子梯度用中心差分检验;全部示例自动运行。测试 465 → 624 个。浏览器检查:六篇带面板的笔记在 1440 / 390 宽度下无控制台错误、无横向滚动。
- feat:页脚新增「离线保存(约 3 MB)」。构建时生成
offline.json(本次构建的全部页面与带哈希的资源、版本号、大小);Service Worker 收到消息后把它们并发写入knowcs-offline-<版本>(不受 200 条上限裁剪),回报进度,并删除旧版本副本;资源与离线导航会在所有缓存中查找。部署新版本后按钮变为「更新离线副本」。端到端验证:保存后断网,以繁体中文打开 6 个从未访问过的页面(讲解视频、实验页、自测、笔记、经典模块、拓展页)全部正常、无原始键。
- feat:按 Final 2024 Q1(b)(c)(g)(h)(j) 与 Final 2022 Q1(b)(d)(i) 改写新增:朴素贝叶斯遇到未见类别、KNN 不假设分布、卷积乘法次数需乘输入通道数(测试用 cnnShapes 核对 36×36×8 输出)、dropout 0.5 的含义、验证准确率不必低于训练准确率、更多隐藏层不一定更好、minimax 井字棋只保证不输、知情同意。
- feat:公式表新增 K-means 分配步骤(第 4 讲)、BCE 的梯度即 loss.backward() 填入的 w.grad、展平后第一个 nn.Linear 的输入大小(第 9 讲,此前第 9 讲没有公式)。检查 390 / 1280 宽度、中英文下没有公式溢出卡片。
- perf:
LazyMotion/MotionConfig从入口移到src/components/Motion.tsx,只包住用m.*的部分(经典模块、资料包、拓展页)。首页、实验页、讲解视频、自测、公式表不再下载 Framer Motion;入口 chunk gzip 95KB → 88KB(剩下基本是 react-dom 与 i18next)。浏览器检查:动画页面会加载动画引擎、没有元素停在 opacity 0。
- perf:
src/site/pageLoaders.ts集中所有懒加载页面 / 模块(带缓存的 promise),main.tsx在等待主文案的同时就开始下载本页代码与文案包;经典模块的考试提示(用到 KaTeX)拆到ClassicPage.tsx,12 个实验页不再下载 76KB(gzip)的 KaTeX。文案包先下载、待 i18n 初始化后再合并(i18next 对主文案做浅合并,提前合并的包会被覆盖)。模拟 300ms / 200KB/s 网络:仿射页首屏 3.1s → 2.3s,下载量 276KB → 192KB。
- perf:在「讲解视频文案按集拆分」基础上推广为通用文案包:各实验页
lab.<页>、NumPy 模块与 API 面板、概念自测、公式表条目、各经典模块命名空间都拆成「包 × 语言」chunk,页面加载代码时并行加载(withPacks)。每页都要下载的主文案从早上的 162KB(英文)降到 16.5KB。切换语言时一并重载当前页用到的包。测试保证「主文案 + 全部包 = 完整文件」、三种语言包清单一致、讲解视频借用的包已登记;浏览器扫描 49 个页面 × 3 种语言无原始键,切换语言无缺字。
- perf:每个页面都加载的文案 chunk 162KB → 101KB(英文;中文 157KB → 98KB)。讲解视频的字幕、标签、小结、考点角改为按「集 × 语言」懒加载(每份约 6KB),与该集代码一起加载;主文案只保留各集 kicker / title / sub。实现为构建插件
localeSplit(*.json?core、*.json?ep=<集>、virtual:episode-strings),源文件仍是一份 JSON;切换语言时会顺带加载页面上已打开的各集文案,正在播放的视频不中断。新增 3 个测试保证「主文案 + 各集文案 = 完整文件」。
- feat:新增
/pytorch/:张量 shape / dtype / device(含 0 维、from_numpy 保持 float64);@与*(讲义 ones(4,4) 例子,自测);NumPy 桥接共享内存(add_ / out= 同步,x = x + 1 与 clone 断开);z = w·x + b + BCE 计算图逐步反向、backward 两次梯度翻倍、zero_grad / step / no_grad;训练循环五行排序并解释每种错误。src/lib/torchSim.ts+ 13 个测试。概念自测新增 pt1–pt4(第 9 讲)。讲解视频 autograd 现链接到 PyTorch 页与 CNN 形状页。 - feat:CNN 形状页代码卡片增加 PyTorch 切换:按第 9 讲写法生成 nn.Module(in_channels、展平后
nn.Linear(64 * 14 * 14, 128)、通道在前的形状注释、CrossEntropyLoss 不加 softmax),Keras 'same' 映射为 padding = k // 2。src/lib/torchCode.ts+ 5 个测试;Keras summary 与 Final 2024 评分标准数值一致。 - fix:CNN 形状页删除按钮与 floored 标签对比度。
- feat:CNN 形状页新增第 3 步:由当前层栈生成 Keras
Sequential代码(显式填充自动变为ZeroPadding2D)与 Keras 风格model.summary()(自动层名 conv2d / conv2d_1…、(None, …)形状、Param # 支持「自测」);「分类 / 回归 0…1」切换输出层与损失(Final 2022 B Q2(b))。新增 Final 2022 B Q2 预设(27×27×3 → 12 类),指出官方答案input_shape=(32, 32, 1)、stride=两处笔误。src/lib/keras.ts+ 6 个测试(含 Final 2024 Q7(a) 全表)。
- feat:新讲解视频
/watch/affine/(2:14,9 章):图像坐标(y 朝下)、平移与最后一列、沿 x 轴反射分两步(−y 再 + rows − 1,停下思考左右镜像的矩阵)、绕中心旋转三步(平移—旋转—平移回去,与 getRotationMatrix2D 一致)、格线与直角三角形演示旋转 / 剪切 / 等比缩放保留什么、翻转为何不是点运算也不是局部运算(Final 2024 Q5(e))、数据增强(猫镜像仍是猫、2 镜像不是数字、6 旋转成 9)。考点角用 Final 2024 Q5(e)。 - fix:视频卡片时长徽标改为实色背景,对比度审计可正确识别。
- feat:新增
/affine/:平移 / 沿 x、y 轴反射 / 绕中心旋转 / 缩放 / 剪切,显示 2×3 矩阵与cv2.warpAffine代码;点击输出像素反查来源像素并写出 x′、y′ 的代入过程;四角坐标表支持「自测」;格线 + 直角三角形展示哪些性质被保留(Final 2024 Q1(f));「最远来源」与「能否用一次 3×3 卷积实现」(Final 2022 Q1(f)、Final 2024 Q5(e));数据增强标签是否成立(Final 2022 B Q1(b):水平翻转适合猫狗、不适合手写数字)。 - feat:
src/lib/affine.ts的warpAffine以 OpenCV 4.13INTER_NEAREST真实输出为测试基准(平移、两种反射、90°/30° 旋转、缩放、剪切,非方形图防行列混淆)。 - feat:概念自测新增 4 题(im5–im8),公式表新增仿射、反射、旋转三条;扩展页 attention 解读按语言懒加载(120KB → 3.6KB)。
- fix:旧
/lab/*.html跳转改为固定的 10 个原型,避免为新练习页生成无效跳转。
- perf:Framer Motion 的动画引擎改为首屏后异步加载(
LazyMotion异步 features,语言菜单改用 CSS 淡入),所有页面共用的入口 chunk 341KB → 291KB(gzip 94KB)。 - perf:讲解视频按集分 chunk(
useEpisode钩子),讲解页只下载本集代码(XOR 约 14KB),共享卡片 chunk 159KB → 17KB。 - perf:资料包笔记按「笔记 × 语言」分 chunk 懒加载,列表页只静态引入字符数(插件新增
?chars/?chars-hk),资料包页面 chunk 334KB → 37.5KB;正文加载时显示骨架屏。
- perf:新增
src/sw/sw.js(构建时复制到站点根目录,仅生产环境注册):内容哈希的/assets/*走缓存优先(服务器虽发 no-cache,重复访问也几乎不再请求网络),页面走网络优先并以最近一次为离线后备;资产缓存上限 200 条,新版本激活时清理旧缓存。实测二次加载 28/28 个资源来自 SW,断网可打开已访问页面。 - feat:
manifest.webmanifest+icon.svg,可“添加到主屏幕”;404.html站点风格页面(待 Nginx 配置error_page 404 /404.html后生效)。 - feat:讲解视频页在手机上提示横屏,全屏时尝试锁定横向。
- a11y:浏览器内(支持 OKLCH)的对比度审计发现经典模块大量次要文字低于 WCAG AA。新增按表面取色的规则(浅色底加深、深色面板用 slate-400、深色面板里的白卡片再加深),覆盖 slate 与 gray 两套灰;公式框与表格中的红色强调改为 rose-700;「已看」徽章与 NumPy 运行按钮加深。
- fix:α-β 页树图图例文字未设颜色、在深色面板上几乎不可见,已修正。
- a11y:资料包列表与拓展页的标题改为页面唯一的 h1;全站无无名按钮 / 链接 / 输入框,无重复 id。
- feat:讲解视频「PyTorch:张量与自动求导」(第 9 讲例题的计算图、前向、loss.backward()、为什么 w.grad 各行相同、torch.no_grad()),
autogradDemo.ts以有限差分校验梯度。至此第 1–11 讲每讲都有讲解视频。 - perf:首页讲解视频栏改为懒加载,首页 chunk 8.5KB。
- docs:README(中英)按现有站点重写;版本号升为 3.0.0。
- feat:
/papers/考点地图:主题 × 九份往年试卷的表格(每题、每卷计数),主题链接到练习页与讲解视频;首页「9 份往年试卷」入口打开它。 - feat:讲解视频支持
#t=秒链接(如/watch/xor/#t=72从 1:12 开始),点击文字稿章节会更新地址栏便于分享。
- feat:
/formulas/公式表:29 条考试用公式按讲次排列(KaTeX),每条附陷阱提示与讲解 / 练习链接;打印或另存 PDF 时隐藏站点外框,A4 三页。 - feat(SEO):构建时为每个页面写入独立的中英标题、描述、canonical 与 Open Graph 标签,并生成
sitemap.xml、robots.txt与<noscript>提示。 - i18n(zh-HK):港式用语映射新增 視頻→影片、全屏→全螢幕、代碼→程式碼、數組→陣列、變量→變數、運行→執行 等 10 项。
- test:
formulas.test.ts(每条公式可由 KaTeX 排版且有说明),共 403 个测试通过。
- feat:42 道原创判断题(期末 Problem 1 题型),按讲次分组,可按期中 / 期末筛选、只看答错的题;作答后显示解释并链接到对应讲解视频或练习页;答题记录仅存本机。导航新增「自测」,首页增加入口;首页每个讲次列出该讲的讲解视频。
- test:
drill.test.ts校验每题都有文案与有效链接,并用库函数核对可计算的答案(广播形状、参数个数、输出尺寸、空洞卷积、密度 > 1、准确率 / 召回率、交叉验证 0%、α-β 剪枝)。
- feat:新增「直方图与 Otsu 阈值」(像素倒入直方图、拉伸、阈值、Otsu 迭代;Final 2024 Q5(b) 原题数据,测试锁定 μ1 = 21、μ2 = 128、T = 74.5)与「期末的 AI 伦理题」(Final 2024 P9 三个方面、第 11 讲欧盟七原则 → 五个共同基础的官方配对、六种不公平成因、反馈循环)。
- perf:三份文案改为按语言分 chunk 懒加载(i18next 自定义 backend,加载完成后再渲染),主入口 chunk 749KB → 340KB,每页只多下载当前语言约 137KB。
- test:
locales.test.ts(三语键一致)、episodes.test.ts(每集场景字幕数与 cues 对齐、停顿题存在),共 372 个测试通过。
- feat:新增 6 集 —— 感知机学习规则(第 5 讲 AND 表逐行)、模型评估(混淆矩阵 / 精确率 / 召回率 / F1 与不打乱交叉验证 0%)、广播与一行算两两距离(2022 春 Q2c)、连续特征朴素贝叶斯(第 2 讲血压 66 / 发烧 97,σ 用 n − 1)、空洞卷积(Final 2024 Q6,平移相加,与试卷输出逐一核对)、不用循环的图像处理(Final 2024 Q2,圆形掩码与展平卷积技巧)。
- feat:画廊按讲次分组并标注期中 / 期末范围;看完 90% 的视频在本机记为「已看」;首页讲解栏改为展示考频最高的三集。
- lib/test:
geom2d.ts(直线 / 半平面裁剪,XOR 与感知机共用)、conv2d.dilatedConv(以 Final 2024 Q6 测试脚本输出为黄金值)、imageNp.ts(对应官方答案的掩码与展平卷积);共 352 个测试通过。 - 勘误:Final 2024 Q2 题面示例
np.convolve([1,2,3,4],[0,1,0.5],'valid')印为[2.5, 3.5],按 NumPy 及题面自带的convolve_valid定义应为[2.5, 4.0],已写入测试与考点角。
- feat:新增「讲解视频」栏目。播放器按时间轴驱动(
src/lib/explainer.ts,每一帧都是时间的纯函数,所以可拖动、跳章、变速,画廊缩略图也是同一套渲染),支持字幕、全屏、键盘操作,以及「停下来想一想」暂停点。每集一个页面:可点击的章节文字稿、考点角(要点 + 一道往年题与答案)、对应练习页链接。 - 内容(按讲次):贝叶斯与基础比率(10,000 人点阵、朴素贝叶斯零频与拉普拉斯平滑)、KNN 与标准化(第 3 讲 T 恤数据)、K-Means(分配 / 更新、SSE 单调、局部最优、第 4 讲药物表、肘部法)、XOR 与隐藏层(线性变换 + sigmoid 挤压 + 隐空间一条直线)、反向传播数值演算(第 6 讲第 1 轮第 1 步)、卷积到 CNN 形状表(Final 2022 网络 2.07M 对 MLP 150.5M)、α-β 剪枝(逐步追踪、两种剪枝、走法顺序)。画面上的数字全部由
src/lib/中带测试的函数计算。 - 结构:
src/site/watch/(Player、stage 坐标系与配色、episodes/);sitemap.ts的EPISODES生成/watch/<id>/页面;模块页标题下出现「先看讲解」按钮,首页增加讲解视频栏。 - test:新增
explainer、xorWarp、gradient、kmeansDemo测试及alphabeta的叶子计数用例,共 344 个通过。 - 勘误说明:第 6 讲 w₅ 更新课件印 0.833245(先把 δk 舍入),不舍入为 0.833244,视频与答案两者并列。
- feat(结构):主站由单文件 SPA 改为多页静态站。页面清单集中在
src/lib/sitemap.ts,vite.config.js据此生成每页的 HTML 入口,所有页面共用src/site/main.tsx。每个模块一个 URL(/knn/、/bayes-virus/…),笔记在/notes/<id>/,拓展在/extend/<id>/。首页采用 Lab 草图 A「课程地图」(按讲次、搜索、期中/期末范围、已看标记),B / C 草图移除。 - feat(兼容):旧链接
#/course/x、#/package/x、#/extend/x在首页自动跳到新 URL;/lab/*.html构建为跳转页。 - feat(i18n):10 个考点页、页面骨架与首页全部三语化(
site.*、lab.<page>.*)。解析错误改为LabError错误码,文案在lab.errors.*;cnnShapes的层错误也改为错误码。 - chore:移除
vite-plugin-singlefile、App.tsx、Hash 路由(route.ts、useHashRoute)与vite.lab.config.js;发布改为上传整个dist/。
- merge:合并
worktree-pairwise-video(成对距离考点视频,此前只部署未合入)。其解释器新增的 square / expand_dims / argsort 由 main 上的扩展 API 覆盖,保留 argsort 的语义(默认 axis=-1,None 展平)。 - feat:NumPy 面板新增「多项式」分组:
from numpy.polynomial import Polynomial、求值 / 求导 / 积分 / 求根(含复根)/ 运算 / 拟合 / convert,以及np.polyfit/np.polyval,结果画成曲线图。笔记第 3 节的代码块可一键在面板中运行。 - test:新增
poly.test.ts,npapi.test.ts增加 10 个多项式用例(NumPy 2.2.6 真实输出),共 329 个通过。
- feat:Package 的 NumPy 笔记右侧新增「NumPy 实时演示」面板:55 个 API 示例分 8 组,可搜索、可改代码即时运行;每次调用都画出输入与结果网格,悬停结果格子显示它由哪些输入格子得到(规约标出被合并的轴和被选中的最值,矩阵乘标出行与列,搬运类显示原样复制自哪里)。笔记中可演示的名字可点击跳转。整页在该笔记下放宽到 1440px。
- feat(解释器):新增约 45 个 NumPy 函数 / 方法与
np.linalg、np.random子模块;为函数、方法、运算符、比较、.T、下标读取记录CallTrace,搬运类调用在元素编号数组上重放得到来源。 - fix:科学计数法输出保留 8 位有效数字(此前会打印
2.6642920868471265e-01,NumPy 为2.66429209e-01);负零显示为-0.。 - test:新增
npapi.test.ts(70 例,NumPy 2.2.6 真实输出)与npTrace.test.ts(16 例),共 305 个通过。
- feat:新增独立多页原型
/lab/(React + TS + Tailwind,vite.lab.config.js),每个模块一个 HTML 页面,全宽布局、上一页/下一页导航、「Quiz me」把考试表格变成可判分的填空。10 个新页面对应历年试卷高频而主站缺失的考点:贝叶斯基率、Gaussian 朴素贝叶斯、混淆矩阵与 F1/MCC、D 折交叉验证陷阱、K-Means 手算表、感知机更新表、XOR 与反向传播、卷积填充与翻转、直方图与 Otsu、CNN 形状与参数。 - feat:三个首页草图供选择:A 课程地图、B 考点雷达(16 个题型 × 9 份试卷)、C 学习路径(自查清单 + 本机进度)。
- 决策:题目数据改写数字后标注「Pattern of 20xx Qn」,不直接搬运试卷原题(试卷标注仅限校内学术使用);讲义例题原样使用。
- 发现:2022 期末 Part B Q1(c) 评分标准第 4 层输出尺寸有误(13×13,应为 14×14),页面中提示。
- test:新增 10 个 lib +
src/lab/format.ts共 58 个用例,以讲义与评分标准的数值为黄金值(如 5/68、0.0194、macro-F1 0.407、MCC 0.14、1,558,656 参数、反传 δk = 0.107022),共 219 个通过。 - chore:ESLint 忽略
dist-lab、work;.gitignore加dist-lab;部署时 release 目录同时包含index.html与lab/。
- feat:NumPy 模块新增第 3 节「一行 NumPy 求成对距离(考点讲解视频)」(
NumpyPairwiseVideo.tsx)。这是一段约 2 分 10 秒、共 9 个场景的动画视频:原题与评分标准 → 要算什么 → 一行拆解 → 直接相减为何报错 → 插入新轴 → 广播成 (n, m, d) → 平方并沿 axis=-1 求和(对比错误 axis)→ 开方与 argsort 取 KNN → 考前清单与内存代价。三语字幕,配有时间轴、章节、倍速和键盘控制。 - feat:
lib/pairwise.ts提供差张量、平方距离、循环版、展开式版、kNearest、形状追踪等纯函数,另加 9 个测试,用 2022S Q2(c) 的输出作为黄金值。 - feat:minipy 新增
np.square、np.expand_dims、np.argsort/.argsort(),输出已与真 NumPy 核对。 - 决策:视频做成站内时间轴动画,不嵌 MP4,原因是单文件产物、字幕可三语切换、画面数值由代码计算。另用 Playwright 录屏导出了中英两版 MP4,供站外分享,不入库。
- feat:新增
manim/(Manim Community v0.21,不参与站点构建):XOR 隐藏层、广播求两两距离(3D)、病毒检测基率 + 朴素贝叶斯/Laplace、反向传播(讲义 XOR 网络与记号)、卷积到 CNN 形状与参数量(2022 期末 2.07M vs 150.5M)五段 1080p60 视频,render.sh一键渲染、sheet.sh出缩略图联系表。数值均取自讲义与历年试卷并用脚本复算。 - 勘误:Lecture 6 Round 1 Step 2 的 δⱼ₁ 讲义印为 −0.027463,按公式应为 −0.027643(新 w₂ = 0.653822,而非 0.653732);视频采用重算值并注明。2025 Spring Q6 的 (x₁, x₂, x₁²+x₂²) 升维经线性规划确认在 3D 中仍不可分,与官方答案一致。
- fix(i18n):此前资料包 5 篇笔记与 Attention 拓展页只有简体,COMP2211 课程笔记只有英文,与站点语言无关。现在每项内容都有 en / zh 两份源文件,zh-HK 在构建期由简体生成,切换语言即时生效。
- feat:新增英文版 NumPy / pandas / PyTorch / TensorFlow / Keras 笔记和 Attention 页,新增中文版 COMP2211 课程笔记。英文课程笔记中夹杂的中文注释改为英文。清理笔记中会原样显示的 Obsidian 语法(
> [!tip]、[[numpy]])。 - chore:简→港繁转换抽出为
scripts/zh-hk.mjs(zh-HK.json产物逐字不变)。新增 Vite 查询?html-hk/?raw-hk。源文件按语言重命名(keres.md→keras.zh.md等)。 - test:新增
src/content/content.test.ts(26 个用例),共 161 个通过。17 张配图仍只内联一次。产物 gzip 增加约 78KB(两份新语言内容)。
- feat:NumPy 模块第 2 节由静态
(3,1)+(1,4)图示改为广播实验台:自选形状与运算符、6 个场景预设、逐轴规则表(可逐步演示)、实心真实元素 / 虚线虚拟副本的拉伸可视化(悬停联动 + 算式)、stride 0 内存说明、不兼容时的冲突轴与一键修复(B[:, None])、站内解释器实际运行的等价代码,以及 4 张知识卡片(规则 / 为何快 / COMP2211 用例 /(n,)vs(n,1)陷阱)。 - feat:新增
lib/broadcast.ts(planBroadcast/sourceIndex/isRealCell/broadcastStrides/suggestFix)及 11 个用例;文案迁至numpy_module.broadcast.*(三语)。共 135 个测试通过,产物 gzip +10KB。
- feat:NumPy 模块第 1 节由「4×4 三按钮」改为可编辑代码的索引实验台。代码在浏览器内运行,每次下标读写都可视化:源→结果格子映射与悬停联动、View/Copy 判定与原因、逐轴解释、掩码网格、底层一维缓冲区(offset/strides)、写穿视图时连带修改的变量告警。附 8 个预设示例。
- 决策:不用 Pyodide(约 10MB、国内 CDN 慢、拿不到元素溯源),改为自研 TS 迷你 NumPy(
lib/ndarray.ts)+ Python 子集解释器(lib/minipy.ts),产物约 +20KB gzip。与本机 NumPy 2.2 做差分:95 个片段中 90 个的输出与报错逐字一致。 - chore:移除
lib/numpy.ts、SliceType、INITIAL_MATRIX与旧文案键;新增numpy_module.playground.*三语文案(zh-HK 由脚本生成)。 - test:新增 ndarray / minipy 用例(含「arange 源上结果值 == 溯源下标」性质测试),共 124 个通过。
- fix:损坏的 Hash URI(如
#/course/%)安全回退,避免decodeURIComponent抛错导致全站白屏;补充回归用例,94 个测试通过。 - ci:移除 PinMe 自动发布,GitHub Actions 只保留构建门禁;新增
deploy/下的 OpenResty 配置与服务器发布/回滚说明。 - deploy:
knowcs.online根域名 A →129.226.210.66(DNSPod RecordId2424635031,TTL 600),ssh pastpaper对应lhins-ir66ks5j;新增独立 OpenResty 站点/opt/1panel/www/sites/knowcs,发布20261005-2158,保留配置备份。Let’s Encrypt 证书签发,安装 webroot 自动续期钩子,Certbot 模拟续期成功。HTTPS 200、HTTP 301、gzip、线上/本地 SHA-256 一致;现有 Minecraft/Pastpaper 站点均仍返回 200。 - test(线上):真实 Chrome 在 1440px/390px 下覆盖 36 次模块/笔记/拓展/异常路由检查,控制台错误和未捕获异常均为 0;异常 Hash 刷新也安全回退。
- docs:READMEs / CLAUDE / design / plan 的生产入口改为
https://knowcs.online。
- perf:单文件产物 4.55MB → 1.99MB(gzip 2.46MB → 1.07MB)。KaTeX 只内联 woff2 且去掉未用字族(60 → 11 个字体);笔记配图由原始 PNG 重新编码为 WebP;移除 Recharts(自研 SVG
LineChart)与 react-markdown(Markdown 构建期预渲染,scripts/vite-plugins.mjs);Framer Motion 改LazyMotion+m.*。 - fix(教学正确性):朴素贝叶斯 log 模式不再用
1e-10掩盖log 0,如实显示 −∞;类别样本数由计数表推出;α 输入 clamp;log/连乘切换现在真正显示分数(此前切换无可见效果)。KNN 平票改由最近邻裁决并提示(原先恒判 M)。火警案例 P(Smoke) 受全概率下界约束(原先可算出 2000% 的后验)。 - fix(渲染):NB 寄语「条件独立」被渲染成 α(
<Trans>占位错位);KNN 寄语出现字面**欠拟合**;大写标题把 α/δ 变成 Α/Δ(.katex { text-transform:none });KNN 画布缩放后点击位置偏移;卷积核输入-/ 清空时输出 NaN。 - feat:Backprop 模块重写——6 个参数滑块、四步推导全部代入实时数值、反向动画揭示 Δw、「执行更新」+ 误差下降曲线(
lib/backprop.ts,数值梯度校验)。KNN「K vs 误差」改为真实留一法曲线(looErrorCurve),标出最优 K。 - feat:Hash 路由(
#/course/knn、#/package/numpy…),支持刷新 / 后退 / 分享;App.tsx改为COURSE_TABS注册表驱动;侧栏副标题 i18n 化;移动端横向模块条;页脚去掉虚构的「Latency: 12ms」;版本号取自 package.json。 - feat(i18n):修复语言检测被
lng:'en'覆盖而失效;检测顺序?lang=> localStorage > 浏览器,zh-TW/zh-Hant → 繁体;生产环境关闭 i18next debug;同步<html lang>。 - feat(a11y):跳到内容链接、
aria-current/aria-pressed/aria-live、语言菜单键盘操作、画布方向键操作、图表<title>、尊重「减少动态效果」。 - chore:移除误装依赖
rechart@0.0.1与未用的autoprefixer;@tailwindcss/postcss移入 devDependencies;删除模板残留(vite.svg/react.svg/App.css);dist/index.html移出版本库。 - ci:Node 20 → 22;
pinme锁定 2.0.10。 - test:59 → 93 个用例(新增 backprop / chart / route / lang,补 KNN 平票与 LOO、NB −∞ 与 classTotals、minEvidence)。
- docs:
design.md按现状重写(架构 / 路由 / 构建优化 / 扩展指引)。
- feat:Header 重构——移除环境状态框,新增三栏分段切换(Course 课程 / Package 资料包 / Extend 拓展,当前项蓝色胶囊高亮)。
- feat:Package 资料包——6 篇 Markdown 笔记(NumPy/pandas/PyTorch/TensorFlow/Keras/COMP2211 课程笔记)3×2 卡片网格,点开 react-markdown + remark-gfm 渲染(表格/代码/图片),返回按钮回网格;笔记与 17 张配图经
?raw/glob 构建期内联,兼容单文件打包。 - feat:Extend 拓展——「Attention Is All You Need 可视化解读」自包含 HTML 经 iframe(srcDoc, sandbox) 隔离渲染。
- feat:卡片标题/描述走 i18n 三语;新增
src/vite-env.d.ts(vite/client 类型)。 - chore:移植 Perceptron / PyTorch / autograd 模块代码与测试入仓(lib 测试已跑通,UI 暂不接入侧栏,待后续上架);测试 49 → 59。
- feat:从
plan-featuresworktree 移植KMeansModule.tsx+lib/kmeans.ts(+9 个 Vitest 用例):三簇散点 EM 迭代动画(播放/单步/重置)、K=2-5 选择、WCSS 实时显示、Elbow Method 曲线、Raw/Z-score 切换;接入 Tab 路由、三语文案与专属 Exam Tip(WCSS 单调不增 + 肘部法则)。 - 覆盖表最大缺口(L4)与期中高频手推考点补齐,plan.md P1 完成。
- feat:从
plan-featuresworktree 移植AlphaBetaModule.tsx+lib/alphabeta.ts(+6 个 Vitest 用例):3 层博弈树 SVG 可视化、DFS + α/β 剪枝逐步追踪(播放/步进/调速)、叶子值沙盒与三种预设、i18n 化步骤解释;接入 Tab 路由、三语文案与专属 Exam Tip。 - chore:tsconfig target/lib 升至 ES2022(
Array.prototype.at需要)。 - 决策:worktree 中其余 6 个新模块(KMeans/感知机/PyTorch/归一化/Stump/复习自测)暂不合并,后续逐个移植以控制风险。
- feat:侧栏 Exam Tip 由全局一条(Broadcasting)改为随当前模块切换,6 条各自贴切的考试提示(NumPy 广播 / Backprop 误差反向与 Δw / Kernel 输出尺寸 N−K+1 / Bayes 后验∝先验×似然 / NB 零频率与 log / KNN 奇数 K 与标准化),i18n 三语同步(zh-HK 经脚本重新生成)。
- feat:引入 Vitest,新增
src/lib/(knn / kernel / bayes / numpy)——把组件内嵌的计算逻辑原样提取为纯函数,组件改为调用;34 个用例覆盖黄金值(NB α=0 → 20.46%/79.54%、火警 9.00%、KNN 默认点 M 4:1、Laplacian 200)与边界(零频率、α 平滑、log/连乘一致性、clamp、平票)。 - ci:deploy.yml 在 lint 后插入
npm test,部署门禁三连 → 四连;CLAUDE.md 同步更新。 - 决策:Backprop 模块无计算逻辑(公式为静态展示),不提取;测试范围由
vitest.config.ts限定在src/**,避免误跑.claude/worktrees/下的文件。
- feat:i18n 新增香港繁体
zh-HK,Header 语言切换由双语 toggle 升级为三语下拉菜单(English / 简体中文 / 繁體中文,Framer Motion 动画 + 点击外部收起)。 - feat:新增
scripts/gen-zh-hk.mjs(npm run gen:zh-hk)——OpenCCcn→hk字级转换后套用香港术语映射(內存→記憶體、算法→演算法、交互→互動、創建→建立、噪聲→雜訊、過濾器→濾波器、學長寄語→師兄寄語);zh-HK.json为生成产物,严禁手改。 - 决策:繁体走「脚本生成」而非手工第三份维护,避免三份文案同步负担;保留「概率/數據/網絡/過擬合」等香港本就通用的写法,不做台化。i18next fallback 链 zh-HK → zh → en 兜底漏译。
- docs:整理文档目录,将
design.md归入docs/,新增log.md(本文件)与plan.md。 - docs:根目录新增
CLAUDE.md,统一索引docs/下的 设计 / 日志 / 计划 三份文档,作为 AI 协作与新成员上手的入口。
- fix(
689455e):修复全部 lint 报错,并把npm run lint设为部署门禁——lint 不过不允许部署。 - ci(
3aaf1c3):新增 GitHub Actions 工作流,自动构建并部署到 PinMe(knowcs.pinme.dev)。
- feat(
f36cda0):新增 KNN 可视化模块,含 i18n 支持(点击画布设测试点、K 值投票、Z-score 标准化开关、模型复杂度曲线)。 - chore(
5c963d3):更新本地化文案。 - feat(
864ae9a):接入 贝叶斯模块(贝叶斯基础 Basics + 朴素贝叶斯 Naive),含 i18n 支持。
- feat(
9a09422):恢复 V1 布局并加上 i18n 支持,同步更新文档。 - docs(
bfda082):补充英文 README,实现中英双语支持。 - docs(
3f6f425):新增 README,说明项目信息与技术栈。 - feat(
835e1b7):加入 i18n 支持,重建单文件 HTML 产物。
- chore(
3ca7917):Initial commit,搭建 React 19 + Vite 7 + Tailwind 4 单页骨架。
与 design.md 第 12 节「已知约束」呼应,落地为可追踪条目。
-
——已拆分为App.jsx约 1065 行,所有模块与外壳耦合在单文件src/modules/六模块 + 薄壳结构。 -
纯计算逻辑(距离、卷积、贝叶斯)无单元测试——已抽取到src/lib/并配 Vitest 用例(2026-06-07 起,现 94 个),npm test为部署门禁;UI/交互层测试仍缺。 -
——en.json/zh.json双份手工维护,缺键一致性校验src/lib/locales.test.ts校验三份文案键完全一致,src/site/watch/episodes.test.ts校验讲解视频字幕条数与场景 cues 对齐(2026-10-08)。 -
KNN「K vs 误差」曲线为示意性合成数据——已改为真实留一法误差(2026-10-05)。 - 教学数据(
BAYES_DATA、KNN_RAW_DATA)硬编码,与讲义绑定。