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 結尾的識別字(像 distanceresponse)都被替成 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 個子功能)全綠
83D 視覺化(8 個案例)全綠 · console 零 error

這輪驗證沒改任何一行 code,純粹是把賣點對使用者的承諾走一遍。 順手糾正了一個之前的誤判:「frozen 物件無法 mock」其實有合法路徑,是當初繞太遠。

關鍵教訓

對自己賣點做深審:把 README 當測試清單一條條走,會挖出比想像中嚴重的問題(SEO 從沒渲染、XSS 漏洞),這比加新功能值錢得多。

極端值是 latent bug 的照妖鏡:今天的兩個 engine bug 都是被「萬有引力」「普朗克時間」逼出來的;正常數量級永遠不會發現。

手機修復不一定要動 DOM:純 CSS 浮動列就解了,桌機零回歸;越是 UI 改動越該找最小改動面的解法。

賣點驗證 ≠ 寫新測試:把對外承諾走完一遍是另一種形式的迴歸測試,而且直接對得起 README。

來源:個人開發日誌 2026-05-20 · v3.5.3、v3.5.5、v3.5.6 三版本連推 · 公式庫 63 → 88 · Pro 8 個賣點 100% 驗證