forked from IsaacGemal/wikitok
-
Notifications
You must be signed in to change notification settings - Fork 0
Tech Debt
Hsiehting Lin edited this page Jul 3, 2026
·
1 revision
已知的捷徑、風險與待改善項目,依影響程度排序。每項含「為何是債」與「償還方式」。
-
現況:設計上的最終認證是 Cloudflare Access email 登入,但閘門沒建,實際只靠
OWNER_TOKENbearer token。 - 為何是債:token 存在使用者 localStorage、需手動貼入、輪替不便;Access 的 JWT 路徑程式都寫好了卻閒置。
- 償還:建立 Access 應用(步驟見 Plan),完成後 token 降為備援。
-
現況:原始資料(~1.3 GB)只在一台機器的
~/ash-image-bank/data;re-scrape →build_feed.py→upload_r2.sh→build_embeddings.py→ 部署,每步手動。 - 為何是債:單點故障(機器遺失 = 資料管線斷),且步驟間順序錯誤(如忘了重跑 embeddings)會造成推薦指向不存在的影像。
- 償還:先把原始資料備份到 R2 私有 bucket 或外接儲存;中期把管線整合為單一腳本(見 Roadmap)。
- 現況:「feed key == R2 key」的不變量靠人工遵守;Vectorize 索引與 feed 的同步也靠記憶。
- 為何是債:任何一方單獨更新就出現 404 影像或幽靈推薦,而且要到線上才發現。
- 償還:寫一支驗證腳本(抽樣 HEAD R2 物件、比對 Vectorize 條目數),納入部署流程最後一步。
- 現況:前端與 Pages Functions 均無測試;驗證靠手動 smoke test(見 Maintenance)。
-
償還:至少為
pages-lib/gate.ts(認證邏輯、constant-time 比對)與build_feed.py的keys_for()補單元測試——這兩處錯了最痛。
-
現況:owner email 寫死在
frontend/pages-lib/gate.ts;KV namespace id 等寫死在frontend/wrangler.toml。 - 償還:email 移到環境變數/Pages 設定;多使用者化時一併處理(見 Roadmap)。
-
現況:登入時
POST /api/merge把本機歷史 union 進 KV,沒有刪除同步——在 A 裝置 unlike 過的影像,若 B 裝置的 localStorage 還留著,會被重新加回。 - 償還:小規模下可接受;若要修,需為事件加時間戳做 last-write-wins。
-
現況:
mock-data/留在 repo 作 schema 鏡像;本機 smoke test 產物已 gitignore(commitf860593)。 - 償還:保留即可,但 README 已註明「不是真實資料」,避免誤用。
-
現況:
upstreamremote 還指向 IsaacGemal/wikitok,但程式已大幅改寫,上游更新幾乎不可能乾淨合併。 - 償還:決定是否正式脫鉤(移除 upstream remote),避免誤合併;有用的上游修正改用 cherry-pick。
-
現況:互動狀態以單一 KV value(
u:<email>→{liked, disliked, read})存放,是刻意的 YAGNI 決策。 - 為何列入:不是現在的債,但若未來要做事件層級分析或多使用者查詢,KV 的整包讀寫會成為瓶頸,屆時遷 D1。