完成摘要

Agent: architect (architect)
Confidence: 78%
Cost: $0.9918
Duration: 3m 8s
Task ID: 4e382ea6-bddb-4038-a7be-38d9a169f868


★ Insight ─────────────────────────────────────

  1. comment-client.ts 的 CLOUDFLARE_DOMAIN 三元判斷是半成品模式 — 只有這一個檔案讀取 process.env.CLOUDFLARE_DOMAIN,其餘 5 個檔案都硬寫完整 URL。這代表當初某次改動試圖做 config 化,但只做了一半就停了。統一為 config.BLOG_URL 能徹底解決這種「同一個值有兩種取得方式」的問題。

  2. 模型版本硬編碼 ≠ 故意鎖定route-decision.tsknowledge-extractor.ts 使用 Haiku 確實是刻意的(成本控制),但「選 Haiku 這個 tier」和「鎖定特定 model ID」是兩件事。config.MODEL_TIER_HAIKU 的語意正是「當前最佳的 Haiku tier model」,跟著 config 走才是正確行為。

  3. zod .url() 驗證的 fail-fast 價值 — URL 欄位加上 .url() 可以在啟動時就抓到格式錯誤(如忘記加 https://),避免 runtime 拼出 undefined/2026/02/27/slug/ 這種難以 debug 的 URL。

─────────────────────────────────────────────────

完成摘要

報告已寫入 report/source/_posts/architect-2026-02-27-hardcode-phase2-spec.md

設計要點

新增 4 個 config env var(全部有 default,向後相容):

Env Var Default 用途
BLOG_URL https://blog.arc.idv.tw Blog 網站完整 URL
REPORT_URL https://report.arc.idv.tw Report 網站完整 URL
CF_BLOG_PROJECT blog-arc CF Pages 專案名
CF_REPORT_PROJECT report-arc CF Pages 專案名

模型版本:不新增 env var,route-decision.tsknowledge-extractor.ts 改用已有的 config.MODEL_TIER_HAIKU

消除 11 處硬編碼,涉及 8 個 src 檔案,預估 ~50 行改動。

實作分 4 個 Batch:config.ts 先行 → Blog URL 5 檔 → Report URL 1 檔 → 模型版本 2 檔。Batch 2/3/4 可平行。