📋 更新日誌

← 返今日

horacemath changelog


最新嘅更新喺最頂。日期 = HKT。


2026-05-20


Sprint 53 — Diagnostic「盲答」模式

  • 🙈 做 diagnostic test 時,阿仔答完每題**唔再即刻睇到啱/錯**(淨係出「✓ 已記錄,下一題…」)—— 避免上一題嘅對錯影響佢答下一題嘅心態
  • 🗃️ 系統照樣內部記低啱/錯,adaptive 選題同最後 mastery report 一切照舊

  • Sprint 52 — 系統大清理 + 每日任務修復

  • 🔧 修好「每日任務有時派唔齊」:auto-prescribe 改成 idempotent,re-run 會自動補返缺嘅 task(之前派漏咗就永遠補唔返,5/15·5/17·5/18·5/20 都中過)
  • 🩹 還原 150 個被截斷/清零嘅檔(143 個語音 mp3 + PDF worker + PWA icon + svg)
  • 🗑️ 刪 /paper-test(同 /mock 重複,mock 仲未成熟)
  • 🧭 /home 併入 /today(一頁化,唔再有兩個似樣嘅主頁)
  • 📊 Critical-path「錯誤模式」加 error_book 即時 count
  • 🧹 Seed 題庫 audit:去 12 條重複題、圓周幾何題標 is_visual、修正 id114 體積單位(平方→立方)+ 補返 id73/114 答案

  • 2026-05-17


    Sprint 39 — 15-Day Exam Sprint Plan + Calendar

  • 🎯 距離 6/1 考試剩 15 日 → 5-phase plan 入 D1
  • 📅 SprintCalendar component 兩 view(阿仔橙紅 / parent 紫藍)
  • 🔁 Auto-prescribe 跟 sprint_plan 派任務
  • 🎬 Day 1 Mock-1 (6上 總結) seeded, 跟住 Day 2 Mock-2
  • 💪 5 mocks + 2 re-dos · ~11 hr 總 load · 2 rest days

  • 2026-05-15


    Sprint 38 — Term 3 範圍 filter

  • 📚 默認藏走 207 個🔥進階挑戰 topic
  • 🎚️ Level filter P5 / P6 / 全部
  • 📊 由 557 view 變 350 in-scope,唔噪音

  • Sprint 37 — Skill heatmap v2(topic-grouped)

  • 🗂️ 按 topic 分組 collapsible section(55 topic)
  • 🏷️ Cell 直接 show friendly name + pct
  • 📊 Topic header: 弱/中/強 count + avg pct
  • 🔍 Search bar + 默認 hide 未做嘅 topic

  • Sprint 36 — Ingest 5下 總結性評估

  • 📄 5dn-final.pdf 8 頁全期 review
  • 🧯 141k 紅 px stripped, 0 leak verified
  • 🗄️ paper_artifacts id=10, parent 可手動派

  • Sprint 35 — FAST_FORWARD server-side regex

  • 🔍 /api/help-chat server detect 答案數值 → force [FAST_FORWARD]
  • 🛡️ LLM 漏 emit token 都唔影響

  • Sprint 34 — KooBits Mirror cron fallback

  • 🆕 skill_paper_map seeded:48 skill × 120 paper
  • 🤖 Cron 補派 KooBits Mirror 給冇 horacemath 題嘅 weak skill

  • Sprint 33 — Skill name LLM rewrite + 樣本題

  • 🇹🇼 557 skill name 全部 rewrite 易明
  • 📝 Modal 加「睇樣本題」按鈕

  • Sprint 30 — AI Kid review + 繁體統一

  • 👶 KidReview 喺 /today
  • 🇹🇼 LLM + UI 全繁體

  • Sprint 31 — 唔信 KooBits, horacemath = ground truth

  • 🚨 KooBits sync = partial-credit + 無 timestamp,唔可靠
  • 🩹 Dashboard tier 只 count horacemath drill;紅 6 / 黃 4 / 綠 7 / 灰 540
  • 🏷️ Skill modal 分清 horacemath drill vs KooBits 同步(標 ⚠️ 僅供參考)

  • Sprint 30 — Kid AI review + 繁體統一

  • 👶 /today 加 KidReview:阿仔自己撳即出鼓勵式評估
  • 🇹🇼 LLM prompt + UI strings 全繁體 + 廣東話

  • 2026-05-14


    Sprint 29 — AI dashboard review(家长一键评估)

  • 🤖 新 endpoint /api/dashboard-review:aggregate 7 日 drill + assignment + error_book + 弱/强 skill → LLM 评估
  • 🎨 /parent/dashboard 顶部撳「用 AI 评估」即出 3 段广东话报告
  • 📊 数据卡:今日题数 / Step 正确率 / 6 日任务完成
  • ✅ Output:📈 进度状态 / ⚠️ 需要关注 / 💡 建议行动

  • Sprint 28 — Loose red threshold 灭 light pink leak

  • 🚨 v7 strict threshold 漏 AA edges (255,240,240),grayscale 後變淡灰仍可讀
  • 🩹 v8:r>100 and r>g+5 and r>b+5,catch 所有 pinkish pixels
  • 📊 紅 px 122k → 207k;0 false positive
  • ✅ 答案 boxes 全空白;9 PDF 0 red-bias

  • Sprint 27 — 終極方案:100% rasterize PDF

  • 🚨 v6 殘留:題號 ①②③ 嘅 ○ 連帶被 normalize → 變空 circle
  • 🩹 **方法論大轉彎**:放棄 vector,render 150dpi → red→white → grayscale → JPEG → image-only PDF
  • 📊 122,649 紅 px 替換跨 9 PDF;file size 456-1570 KB
  • ✅ Strict red 0 + Loose red-bias 0 + 題號齊 + 題目齊 + MC 一致

  • 2026-05-12


    Sprint 26 — Normalize 全部 MC ○(user insight)

  • 🚨 Publisher 混用 U+25CB / U+F0A1 / U+F02D 標答案——阿仔憑「odd-one-out」可推出答案
  • 🩹 v6:所有 MC option ○ 都 redact + 重畫 plain outline;4 options 視覺完全一致
  • 📊 293 glyphs normalized 跨 9 PDF
  • ✅ Q10 A/B/C/D 同 size / weight;production 0 red px

  • Sprint 25 — Strip v5:題目消失 + 紅 arc 終結

  • 🚨 v3/v4 踩雷:apply_redactions(text=REMOVE) 連帶刪父 span(題目消失);graphics=IF_TOUCHED 對 stroke 失效(紅弧殘留)
  • 🩹 v5 三層:text/drawing 全用 white overlay;MC ○ 真 redact + 重畫;最後 **pixel mop-up** render 200dpi 揾紅 px → transparent PNG overlay
  • ✅ 9 PDF 36 頁 0 red px;題目齊全;幾何 diagram intact
  • 📦 File size 最大 4MB

  • Sprint 24 — Strip v3:MC option ○ 半擦掉 leak fix

  • 🚨 v2 殘留 bug:紅 fill 坐喺黑色 ○ glyph 上面,white rect 擦紅嘅同時毀咗 ○ 一半 → 殘留 (: shape leak 答案
  • 🩹 v3:detect overlap → redact 整個 glyph + 重畫 plain black circle outline
  • 🧨 apply_redactions(graphics=LINE_ART_REMOVE_IF_TOUCHED) 由 stream 真删 vector
  • ✅ 9 PDF / 36 頁 0 red px @ 150dpi;MC ○ 完整 outline

  • Sprint 23 — Strip PDF 答案(老師版 → 學生版)

  • 🚨 大 bug:9 份現代 PDF 全部係老師版,紅字答案直接顯示
  • 🧯 PyMuPDF detect RGB(255,0,0) text spans → white redact,935 紅 text spans 處理
  • 🩹 v2 補:另有 162 條紅 vector drawings(fraction bar / 答案 box)用 draw_rect white overlay cover
  • 🔒 原裝備份移出 public/backups/(之前 CF Pages serve dot-dir leak 答案 200 → 而家 404)
  • ✅ Visual sweep:6up-stage1.pdf page 1 = **0 red px**(render 驗證唔靠 inspector)

  • 2026-05-11


    Sprint 22 — kid_answer 顯示 + /errors 大撳鈕

  • ✏️ Drill 錯時自動寫入「阿仔答嘅嘢」(kid_answer),由 ClickTrainer step4 帶入 D1
  • 🔄 舊 error_book row 如果 kid_answer 空,下次 ingest 時 backfill
  • 🔥 /errors 頂部大紅橙漸變 CTA「即刻重做 N 條錯題」
  • 📕 Parent 即刻睇到「正確 = X,阿仔答 = Y」對比

  • Sprint 21 — 錯題真閉環(auto-resolve + redrill 任務)

  • 📕 新任務種類「📕 重做錯題 N 條」:cron 見到 error_book 有 ≥3 條未 resolved 就自動派一條
  • 🔁 Sentinel topic __redrill__:/api/question 改由 error_book 隨機抽未 resolved 原題
  • ✅ Auto-resolve:阿仔做啱(4 步全 correct)→ 該 qid error_book 自動 resolved=1
  • 🧨 Redrill assignment 閉環:做夠 N 條 error_book qid 後自動 mark done
  • 🗄️ Migration 0006:error_book.question_id column + backfill 5 條歷史錯題

  • Sprint 20 — Dedupe + 錯題本閉環

  • 🚫 Auto-prescribe 唔再重複派同一弱 skill:cron 跑時 skip 任何已有 active pending 嘅 skill,順位揀下一條最弱
  • 🧹 「補做」section 自動 dedupe:同 source_ref 嘅 stale 自動隱藏
  • 🧨 Auto-mark mass-close:阿仔做夠 N 題同 skill,所有 pending 同 skill assignment 一齊閂(5/9 + 5/10 + 5/11 backlog 一次清)
  • 📕 錯題自動入 error_book:drill 任何 step 錯 → /errors 即時見到
  • 🪣 Backfill:5 條歷史錯題(5/9 + 5/11)已補入 error_book

  • Sprint 19 — 每日連續性(補做 + 自動 mark done)

  • 🔥 /today 加「補做」section:之前未做嘅 pending 唔再消失,並列今日清單上面
  • ✅ horacemath drill 做夠閾值(source_ref n=N,default 3)→ 自動 mark assignment done,由最舊 pending 開始消化
  • ✅ KooBits Mirror 做到最後一題撳「檢查答案」→ POST last_question:true → 自動 mark 對應 koobits assignment done
  • 📊 5/9 ~ 5/11 共 12 條 pending —— 由今刻起阿仔做夠 3 條同 skill 就閂

  • 2026-05-10


    Sprint 18 — 題庫擴充 + Mirror 閉環

  • 📚 Question pool 由 202 → 1420 題(+1218 LLM-expanded variations 入 D1)
  • 🎯 LLM 緊跑緊 tag +1218 嘅 primary_skill_id(背景 60min ETA)
  • 🔁 KooBits Mirror 閉環:撳「檢查答案」→ POST /api/koobits-attempt → upsert skill_proficiency (source='koobits-mirror')
  • 📊 Dashboard heatmap 自動 reflect Mirror 練習結果(pct = MAX of all sources)
  • 🔔 今日 4pm cron 已手動 trigger(4 條 fresh 任務 ready)

  • 2026-05-09


    Sprint 17 — KooBits Mirror(mobile-friendly KooBits 內容)+ release log

  • ✨ 新功能:/changelog 頁,每次 deploy 後可以見到改咗乜
  • 🎤 Voice 強化:iOS Safari aborted/no-speech 自動 retry 多種 lang(zh-HK → zh-Hant → zh-CN → zh);mic cleanup 唔再鎖死
  • 🚀 Mobile pivot:auto-prescribe 唔再派 KooBits 試卷(desktop only);改派 horacemath 練 + 現代 PDF
  • 🔧 Auto-prescribe topic 修正:用 horacemath 嘅 topic,唔再用 KooBits 細分 topic 令 /session?topic= 對唔上

  • 2026-05-09 (earlier)


    Sprint 16 — PWA Push send pipeline

  • 🔔 Cron worker @ 4pm HKT → auto-prescribe + push notification 到 Horace iPad
  • 📲 iOS Safari「瀏覽器唔支援通知」改為提示「先加入主畫面做 PWA」
  • ↩️ Assignment 撳錯 ✓ 可以 undo
  • 「📚 全 syllabus」expand panel — 一頁睇晒 5上/5下/6上
  • Icon 改返「數」(traditional)

  • Sprint 15 — Skill diagnostic 閉環

  • 🎯 horacemath 既有 202 題 LLM-tagged with KooBits skill_id(54 unique skills 覆蓋)
  • 📊 Kid drill 完即時 upsert skill_proficiency
  • 🤖 Cron worker @ 4pm HKT auto-prescribe 3 條最弱 skill 嘅功課
  • 🐛 Audit script 修正:1420 題 0 真 bug

  • Sprint 14 — Prescription Engine pivot

  • 🎓 horacemath 由「練習 app」轉為「家長 prescription engine + Horace mission control」
  • 🔐 /parent?key=... magic link auth
  • 🏠 /today Horace homepage assignment checklist
  • 📊 /parent/dashboard 282-skill heatmap
  • ✨ 現代 publisher 9 份 PDF artifact ingest
  • 🎤 KooBits API reverse-engineer + 557 skill atom sync

  • 2026-05-08


    Sprint 13 / 12 / 11 (legacy)

  • AgentTutorStep 取代 Step 4 rigid renderer
  • LLM bulk expand 200 → 929 question variations
  • HelpPanel 改為 dialog + 真 chat conversation