v3.5.3 — 深審揪出的兩個 CRITICAL
照 README 的五個賣點逐條對驗,意外發現兩個 CRITICAL:
- SEO / footer 從未渲染:頁面結構上有,但被既有 CSS 規則整段藏掉,等於對搜尋引擎與使用者都不存在。
- 自建公式 XSS:使用者自訂公式名稱沒做 escape,直接拼回 DOM;只要在公式名稱塞
<img onerror>之類就能執行。
另外還有一個 MEDIUM:自由輸入式 y= 前綴在某些情境會被重複附加。三個一起在 v3.5.3 修掉。
Bug C — 手機 ≤768px 函式無法閉合括號
手機上輸入 sin( 後,要關括號的 ) 鍵被軟鍵盤蓋住,等於整個函式輸入流程斷掉。
DOM 完全不動,純用 CSS 在 ≤768px 時做一個固定在底部的浮動運算列;
桌機完全零回歸。
v3.5.5 — 公式庫 +20,順手挖出兩個 latent engine bug
公式庫從 63 條擴到 83 條(+32%),新增「健康」分類。但加進「萬有引力」「普朗克時間」這種極端數量級的公式時,計算引擎直接吐出奇怪的結果。挖下去才發現引擎裡兩個從第一版就有的潛伏 bug:
- Math.E regex 誤替換:正則沒做邊界保護,連
e結尾的識別字(像distance、response)都被替成 2.718…,計算當然出錯。 - toFixed underflow:超小數量級(如 1e-43)走過
toFixed(n)會直接歸零;極大值(1e+20)反而被科學記號處理掉,造成顯示截斷。
修完之後:
萬有引力 → 1.982e+20、普朗克時間 → 3.313e-19,數字才終於對得起物理常數。
v3.5.6 — 引擎 audit + 健康分類拓展
給計算引擎跑了 12 個邊界 case 的 audit(極大、極小、混合運算、識別字干擾),引擎本身健全、不需要再補。 同日把健康分類補到 9 條:
- TDEE(男 / 女兩條,套用 Mifflin-St Jeor 後再乘活動係數)
- 體脂率(男 / 女,Deurenberg 公式)
- 每日水分需求
Pro Phase 5 → 8 全部端對端驗證
趁今天版本連推,乾脆把 Pro 全部 8 個對外賣點透過合法的 trial 路徑跑一遍:
| Phase | 賣點 | 驗證結果 |
|---|---|---|
| 5 | 切線 / 積分 / 斜率 | 數學閉式解對比,誤差 < 1e-8 |
| 6 | 函數交點 + SVG 匯出 | 交點精確、SVG 結構正確 |
| 7 | 統計工具(4 個子功能) | 全綠 |
| 8 | 3D 視覺化(8 個案例) | 全綠 · console 零 error |
這輪驗證沒改任何一行 code,純粹是把賣點對使用者的承諾走一遍。 順手糾正了一個之前的誤判:「frozen 物件無法 mock」其實有合法路徑,是當初繞太遠。
關鍵教訓
對自己賣點做深審:把 README 當測試清單一條條走,會挖出比想像中嚴重的問題(SEO 從沒渲染、XSS 漏洞),這比加新功能值錢得多。
極端值是 latent bug 的照妖鏡:今天的兩個 engine bug 都是被「萬有引力」「普朗克時間」逼出來的;正常數量級永遠不會發現。
手機修復不一定要動 DOM:純 CSS 浮動列就解了,桌機零回歸;越是 UI 改動越該找最小改動面的解法。
賣點驗證 ≠ 寫新測試:把對外承諾走完一遍是另一種形式的迴歸測試,而且直接對得起 README。