
================================================================================
              前端 V3 守門落地 + FastAPI 重新評估 (2026-05-12) [IN PROGRESS]
================================================================================

【已完成】
   - V10.601 收斂 Gemini / 111 治理與全 repo 已知密鑰清除：正式 `ai_calls` 近 24 小時與近 7 天 provider 彙總未見 Gemini 出站；舊 K8s manifest、n8n workflow、監控/auto-repair scripts、Superset 文件、Google Drive token 檔與歷史文件中的已知實密鑰全部改為占位符，並補測試禁止 Google API/OAuth key、Telegram token、Ollama Cloud key、Superset 預設密碼再次入庫；OpenClaw 日/週/月/Meta 等敘事長報告改為 GCP-A/GCP-B only，不再讓 `openclaw_meta` 在 GCP 超時後落到 111，避免 111 被長文生成壓高負載。
   - V10.600 收斂 AI Intelligence 競品表前台文案：PChome 競品卡片 footer 不再顯示 `TTL: 6h`、比對門檻等工程參數，改為「僅顯示已通過身份比對的競品」；`identity_v2`、`match_type_exact`、`price_alert_exact`、`evidence_*`、`match_*` 等內部診斷 tag 只會轉成營運可讀的中文 badge，未知 tag 直接隱藏，避免把 matcher 內部碼或實驗性標記露給使用者。
   - V10.599 重整 PChome 比價覆核工作台 UX 並補全站巡檢能力：覆核頁不再沿用首頁商品表格，也不再把 `matcher_rescore`、`stored_status`、`rescore_accepted_current`、`HITL`、`COMPLETE` 等內部診斷/狀態碼輸出到前台或 tooltip；改為「商品 / MOMO、PChome 候選、覆核判讀、下一步、紀錄」六欄工作流。同步修正 catalog review status 的前台語義、決策信封中文標籤、局部 1540px 橫向工作台、手機版欄位 label，並把覆核狀態分段列改為自適應 grid，避免 chip 造成桌面/平板/手機視覺溢出；`check_responsive_overflow.js` 改為逐頁輸出、HTTPS context、commit+body ready、timeout 後安全收尾，讓桌面/平板/手機全站 UX 巡檢可追蹤；topbar AI 觀測台 indicator 增加前端 60 秒 session cache / 2.5 秒 abort 與後端 30 秒 cache，避免每頁跳轉重複打 DB 查詢拖慢全站；`market_intel/disabled.html` 從 1MB 大型停用頁改為輕量狀態頁，保留狀態與正式操作入口，避免停用模組拖慢巡檢與使用者操作；新增憲法第 14.2 條與測試 guard，禁止把工作視窗溝通、施工紀錄或版本發布說明放到使用者可見前端頁面；ICAIM 競情 API 改為 120 秒短快取、5 秒 PostgreSQL statement timeout、stale 快照降級與 LATERAL 最新價查詢，避免 AI 競情看板重查詢拖慢全站。
   - V10.584 補 PChome Nick 去重與 stale recovery 單品窄門：`Nick` 先去 HTML / 行銷星號 / 重複品名，避免 `29g`、`100ml` 被同一商品副標重複計數成 `component_count_conflict`；同步新增 NIVEA 妮維雅霜 100ml、Schick 舒綺敏感肌除毛刀片 3 入、TS6 沁涼潔淨慕斯 100g 的具名 exact total-price alignment。IBL 沐浴精+洗髮精 vs 洗髮精仍保留 identity review，唇釉色號/目錄款與 Paula's Choice 效期/金蓋差異仍不自動寫正式價差。
   - V10.583 補 Paula's Choice 身體乳 PChome Nick 具名 alignment：`2%水楊酸身體乳210ml二入` 可和 PChome `Nick` 補出的 `水楊酸身體乳雙入組 / 210ml x2` 對齊，進 `exact / total_price / price_alert_exact`；但 `118ml二入組(金蓋限定版)` 對上 PChome 效期品仍保留 `manual_review / identity_review`，不泛用放寬中文入數。
   - V10.582 補 PChome 比價通知專業分級與 Nick 副標身份證據：NemoTron 價格決策信封現在保留 `momo_price`、`competitor_price`、`candidate_gap_pct` 與 `sales_7d_delta_pct`，EventRouter / Telegram 模板會把 `match_type / price_basis / alert_tier` 翻成「直接價格威脅、單位價覆核、身份覆核、壓制告警」與操作邊界；PChome crawler 會保留 `Nick` 副標為 `match_name` 給 matcher 使用，UI/DB 顯示仍維持原品名，讓容量、入數、濃度資訊可參與比對。
   - V10.581 將 V10.580 的重複單品組安全線接進 PChome retryable revalidation 窄門：只允許 `true_low_confidence`、舊診斷為 `match_type=exact / price_basis=manual_review`、無阻擋原因且命中具名安全商品線（Bioneo 150ml x2、Cetaphil 150ml x2、Avene 300ml x4、Schick 2+1 入、KOSE 雪肌精 500ml x2 禮盒）的候選進小批次重評；仍由最新版 matcher 最終判斷是否寫入正式 `competitor_prices`。
   - V10.580 補 PChome 重複單品組 total-price 窄門：同品牌、同入數、同基礎規格且名稱高度對齊的 150ml x2、300ml x4、2+1 入等候選，可由 `exact / manual_review` 進 `exact / total_price / price_alert_exact`，正式部署前估算 213 筆高分 `true_low_confidence` 中只有 7 筆會轉自動寫入。同步新增 NEW DIRECTIONS 甜杏仁油 vs 杏桃核仁油核心油種 hard veto，避免規格一樣但油種不同的錯配污染正式價差；Paula's Choice 這類 PChome 端缺 30ml 規格的雙入組仍保留 manual review，不放寬全域門檻。
   - V10.579 補 PChome 高信心 total-price safe family：SAB 私密防護舒緩噴霧 30ml 與 Herbacin 小甘菊 20ml 護手霜在同款式、同規格、無 variant/commercial gap 時可由 focused matcher 進 `exact / total_price / price_alert_exact`，讓近門檻重評能真正寫入正式比價；Herbacin 柔皙 vs 野生玫瑰等跨 variant 仍保留在 review，不放寬全域門檻。同版將 Code Review GCP-B secondary timeout 預設由 60 秒收斂到 25 秒，GCP-A preflight 不通且 GCP-B 生成卡住時更快回 deterministic local degraded，不呼叫 Gemini/111。
   - V10.578 修正 Code Review 靜態掃描 timeout 誤報：Hermes deterministic scan 對 `requests.get/post/...` 會檢查同一呼叫 block 的後續行，多行呼叫已帶 `timeout=` 時不再報「HTTP request 未設定 timeout」。避免 V10.577 的 preflight helper 因多行格式被自己誤判為 MEDIUM。
   - V10.577 補 Code Review Ollama host preflight：OpenClaw 架構評估在 explicit GCP host generate 前先以短 `/api/version` 探測健康度，GCP-A 不通時會快速跳 GCP-B，不再等 15 秒 generate timeout；仍維持 GCP-A/GCP-B 優先、111 預設禁用、Gemini hard-disabled 預設不呼叫。
   - V10.576 補 PChome backfill backlog 的型錄 lane counts，讓 `/api/ai/pchome-match/backfill/status` 也能回傳 `catalog_variant_review`、`catalog_unit_review`、`catalog_identity_review` 三條操作隊列；同版修正 `OllamaService.generate(allow_111_fallback=False)`，當 lazy resolver 快取到 111 時會強制改試 GCP-A/GCP-B allowlist，不再直接 `all 0 hosts failed`，且仍不把長分析推給 111。
   - V10.575 拆分 PChome 型錄可比覆核 lane：`catalog_comparable` 不再只是一個總數，正式拆成 `catalog_variant_review`（選項/色號/款式待核）、`catalog_unit_review`（入數/檔期/商業條件待核）與 `catalog_identity_review`（身份採用待核）。Coverage、review queue filter、Dashboard 分段、decision envelope、Webcrumbs host data 都共用同一套 SQL helper 與 metadata；仍維持 HITL、不自動寫正式價差，讓營運可批次清理最有機會轉成單位價或正式身份的候選。
   - V10.574 接上 PChome 型錄/任選可比覆核隊列：沿用 V10.572 的 `catalog_comparable_count` 安全口徑，將高分、無 hard veto、具同品線身份證據但仍有任選/型錄/商業條件待確認的 `true_low_confidence` 候選，拆成獨立 `catalog_comparable` 篩選與 decision envelope。此隊列仍維持 HITL，不寫入正式 `competitor_prices`、不算 exact matched，並把「型錄可比」與真正「證據不足」分開，讓營運可以先批次處理最有機會轉成單位價或正式身份的候選。
   - V10.574 新增市場情報 Source Governance → Fetch Target bridge：新增 `/api/market_intel/mcp_fetch_target_source_governance_review`、市場情報頁 bridge panel 與 deployment readiness smoke target，交叉審核 Professional Source Governance 與 MCP Fetch Target Review，要求每個 target `platform_code/source_key` 都能對上已通過治理的公開 source contract；仍不抓外站、不讀 robots/sitemap、不開 DB、不寫檔、不執行 CLI、不掛 scheduler。
   - V10.572 新增 PChome 決策支援覆蓋率：不放寬 `matched` / `decision_ready` 的 exact identity 門檻，另外把高分、無 hard veto、具同品線與規格證據，但因「任選 / 色號 / 型錄 / 即期」仍需覆核的候選，納入 `catalog_comparable_count` 與 `decision_support_rate`。Dashboard、當日業績、成長分析與 backfill 狀態摘要同步顯示「決策支援覆蓋率 / 精準可告警覆蓋 / 型錄可比 / 單位價」，讓覆蓋率提升建立在可解釋情報分層上，而不是把非 exact 商品硬寫成正式同款。
   - V10.571 提升 PChome pending 覆蓋率搜尋召回：`PCHOME_FEEDER_MAX_SEARCH_TERMS` 預設由 5 提升到 6，新增 `PCHOME_FEEDER_SEARCH_COVERAGE_RESCUE_ENABLED`，在主要搜尋詞與原始名稱 fallback 之間插入狹義 coverage rescue terms。搜尋詞會保留 `5.5g`、`2.4g` 等小數規格，不再變成 `5 5g` / `2 4g`；同時排除外出清潔、卸除髒汙、卸防曬等非身份核心噪音。正式 pilot 顯示 CeraVe / TUNEMAKERS / Embryolisse / Neogence / NIVEA 這類雙語品牌商品常卡在 PChome 搜尋召回，因此補上「英文品牌 + 中文品牌 + 核心身份 + 規格」窄搜尋詞；「品牌 + 品類 + 規格」仍只開給安全品類，避免為了拉 pending 覆蓋率引入假陽性。
   - V10.570 補 PChome 身份 / 報價證據契約：matcher 的 `match_diagnostic_json` 新增 `identity_evidence`、`offer_evidence`，把品牌、品類、identity anchor、型號、規格、入數與 variant guardrail 拆成結構化證據；覆核隊列與 decision envelope 新增 `difference_highlights`，可直接指出容量、入數、色號、香味、款式、補充包、檔期組合等差異。價格明確標記為 offer evidence，不再被誤當身份證據，Dashboard / PPT / OpenClaw / Webcrumbs 能共用同一份比對證據。
   - 外部專業 benchmark 固定節奏：已建立每週一 09:30 自動檢視，並新增 `docs/guides/external_professional_benchmark.md`，把 Google Merchant Center、Google Product structured data、Schema.org Product/Offer/AggregateOffer 與 Baymard 電商 UX 做法轉成可落地準則：identity evidence、fresh offer、review 差異高亮、PPT/AI evidence 分層。
   - V10.565 補 PChome 覆蓋率操作建議：`/api/ai/pchome-match/backfill/status` 會把低覆蓋率拆成 `operation_backlog`，分別列出刷新舊 identity、重評近門檻、補抓未配對、人工覆核、單位價覆核與過期搜尋救援預覽；同時回傳 `recommended_next_action`，Dashboard 狀態摘要會顯示「建議執行比價補強 / 刷新過期 identity / 處理覆核」等下一步，讓覆蓋率 KPI 直接連到可執行行動。
   - V10.563 收斂正式 preview 假可救候選：M.A.C 超持妝輕透濾鏡蜜粉若只有 PChome 端出現明確色號（例如 `#絕絕紫`），會標成 `variant_selection_review` 並維持 `true_low_confidence`，不再佔 recoverable 池；SAUGELLA 賽吉兒菁萃潔浴凝露新增潤澤 / 日用型 / 加強 / 黃金女郎型變體互斥，避免同品線不同私密清潔款式被誤救成 matched。
   - V10.566 新增市場情報 Professional Source Governance：把 robots/REP、sitemap/lastmod、JSON-LD / schema.org structured data、canonical URL、rate limit、公開資料邊界、provenance、snapshot hash 與 idempotency key 變成可審核 source contract。新增 `/api/market_intel/mcp_professional_source_governance` 與市場情報頁卡片、deployment readiness smoke target；API/UI 只審核操作員貼回的治理摘要，不抓外站、不讀 robots/sitemap、不開 DB、不寫檔、不掛 scheduler，後續 fetch target review 才能引用通過治理的來源。
   - V10.561 補 PChome 比價補強前端分段回饋：Dashboard 的 PChome 卡片從「補抓產線」改為「比價補強產線」，按鈕與確認文案同步說明會先刷新舊 identity、再重評近門檻與補抓未配對；結果區新增刷新 / 重評 / 補抓三段 matched/total 摘要，避免後端已完成分段統計但操作員仍只看到一個籠統成功數。
   - V10.560 串起手動 PChome 比價補強三段式流程：`/api/ai/pchome-match/backfill` 現在不只跑近門檻重評與未配對補抓，也會先用小批次 `run_expired_identity_refresh()` 刷新已知 `identity_v2` 舊價格，讓操作員按一次補強就能同時處理「舊 identity 新鮮度」、「near-threshold low_score」與「pending identity」三條主線。結果 payload 新增 `stale_identity_refresh` 分段統計，方便後續 Dashboard / 簡報 / AI 決策知道覆蓋率改善是來自刷新、重評或補抓。
   - V10.559 收斂 retryable 有效身份新鮮度：`_fetch_retryable_candidate_skus()` 不再把 `expires_at IS NULL` 的舊 PChome `identity_v2` 當成有效阻擋條件，只有明確 `expires_at > CURRENT_TIMESTAMP` 的新鮮 identity 才會阻止 near-threshold revalidation。未知新鮮度仍走 V10.551 的 expired / recovery 刷新入口，重評後仍必須通過最新版 matcher、hard-veto、auto write safety 與既有正式候選覆寫保護，避免為了拉覆蓋率犧牲準確率。
   - V10.558 補 legacy focused identity reason 回刷窄門：舊 attempt 若沒有新版 `focused_exact_total_price_safe` marker，但已帶具名 `focused_exact_identity_*` 且該 identity 屬於 matcher total-price safe set，並且舊分數已達全域 `MIN_MATCH_SCORE`，可進近門檻重評。這補上歷史資料缺 marker 的漏接情境；仍要求無 hard veto、`exact_identity`、無 commercial / variant / count / bundle 阻擋，最後由最新版 matcher 決定是否能寫正式價差。
   - V10.557 收緊 focused reason-based 回刷 guard：上一版 reason-based 回刷現在不只要求 `focused_exact_total_price_safe`，還必須同時命中一條具名 `focused_exact_identity_*` 且該 identity 屬於 matcher 的 total-price safe set。這避免未來只有總開關、缺少具名身份證據的舊 attempt 被納入回刷；rom&nd / Solone / Summer’s Eve 等 review-only focused line 仍被測試鎖在自動價差線外。
   - V10.556 修 Ollama GCP-B model fallback：GCP-B 若缺 coder/large 指定模型，先用 host-compatible fallback `gemma3:4b` 留在 GCP-B，不直接把流量推到 111；`model not found` 404 視為模型缺失，不再把整台 GCP-B 標 unhealthy。主機順序仍維持 GCP-A → GCP-B → 111。
   - V10.555 補 focused total-price reason-based 回刷：`_fetch_retryable_candidate_skus()` 新增一條結構化 reason 窄門，只要舊 attempt 已帶 `focused_exact_total_price_safe` 且命中 matcher 的 `FOCUSED_IDENTITY_TOTAL_PRICE_REASONS`，即可進近門檻重評；仍要求無 hard veto、`exact_identity`、分數下限，並排除 commercial / variant / count / bundle 等阻擋理由。這讓已經被 matcher 明確判為 total-price exact 的舊候選不再依賴手寫商品名 SQL 才能回刷，同時 rom&nd / Solone / Summer’s Eve 等 review-only 品線仍不會進自動價差線。
   - V10.554 接線香氛 / 精油 focused exact 回刷：Herb24 晨霧純精油擴香儀黑色、Pavaruni 40 香味 10ml 精油、Pavaruni 20 香味 450g 香氛蠟燭、Derma 大地有機植萃護膚油 150ml 現在明確標記 `focused_exact_total_price_safe`，並接進 `_fetch_retryable_candidate_skus()` 近門檻舊候選回刷。此入口只收 `low_score / refresh_low_score / true_low_confidence` 中命中精準名稱錨點、無 hard veto、`exact_identity` 且沒有變體 / 商業條件 / 件數衝突的候選；Laundrin、好物良品融蠟燈、Yuskin 等仍保留人工覆核，不為了拉覆蓋率強推自動價差。
   - V10.553 優化 current PPT/AI 比價結果查詢：`fetch_competitor_comparison_results()` 的 current/latest MOMO 價格改用 `JOIN LATERAL` 取單品最新價，移除 `ROW_NUMBER() OVER (PARTITION BY p.id ...)` window scan；歷史報表的 `end_date` cutoff 仍保留在 lateral 子查詢內，維持「指定期間截止日前最新 MOMO 價」語意不變。這能降低簡報、OpenClaw/AI payload 與比價匯出在大量 price_records 下的查詢成本。
   - V10.552 收斂決策查詢的新鮮度口徑：`fetch_top_competitor_risks()`、PChome review queue、review sample 與 current PPT/AI 比價結果都不再把 `expires_at IS NULL` 當成有效現價，只接受 `expires_at > CURRENT_TIMESTAMP` 的 PChome identity_v2 價格。未知新鮮度只留在 coverage 的診斷欄位與 V10.551 刷新入口，不再進入價格風險、簡報、AI 決策或覆核排除條件。
   - V10.551 收斂未知新鮮度刷新與補抓排序：`_fetch_expired_identity_skus()` / `_fetch_expired_identity_recovery_skus()` 將 `expires_at IS NULL` 視為必須刷新或可搜尋救援的未知新鮮度 identity，和 V10.549「未知新鮮度不算可決策覆蓋率」口徑對齊；兩條路徑改用 `JOIN LATERAL` 取最新 MOMO 價，移除 product-wide window scan。`_fetch_unmatched_priority_skus()` 也改用 lateral 最新價，並優先重搜低風險 `no_result / refresh_no_result`，讓 V10.550 的安全召回詞先用在最可能被救回的商品。
   - V10.550 補安全搜尋召回詞：`_build_variant_recall_search_plan()` 對低風險穩定品類新增 `品牌 + 品類` 的補搜尋詞，讓 `no_result / refresh_no_result` 更有機會找到 PChome 候選後再交給 matcher 安全判斷；美甲片、指甲油、唇彩、香氛/精油、粉底、防曬、任選/色號/款式等高 variant 風險商品不走通用召回，DASHING DIVA 仍只走既有 line-specific recall + sort fallback。此變更不改 `MIN_MATCH_SCORE`、hard veto、fresh-search write safety 或 stronger existing match 覆寫保護。
   - V10.549 收斂比價新鮮度 KPI 口徑：coverage cache 升到 v10，`expires_at IS NULL` 不再算進「可用比價 / decision ready」，改拆成 `unknown_freshness_matches` / `unknown_freshness_count`，避免沒有到期時間的舊資料被當成可直接決策的新鮮價格。Dashboard / daily / growth 同步顯示未知新鮮度與「未形成有效身份配對」，並把 PChome/MOMO 價格方向文案改成 `PChome 價格壓力` / `MOMO 價格優勢`，降低誤讀。
   - V10.548 接線更多 focused exact 舊候選回刷：把 matcher 已驗證可安全走 total-price 的 3W CLINIC 膠原蛋白粉底液 50ml x2、花美水 Moisture/Inclear 1.7g x3、KUSSEN 寶寶益菌屁屁膏 50ml 3 入、Lab52 齒妍堂嬰幼兒/汪汪隊牙刷 2 入接進 `_fetch_retryable_candidate_skus()` focused true-low / rescore 窄門。這只擴大「舊候選可被新版 matcher 重評」的入口，不改 `MIN_MATCH_SCORE`、hard veto、auto price write safety 或既有覆寫保護。
   - V10.547 強化單位價覆核洞察：`manual_unit_price_required` 不再只是人工狀態，覆核隊列與商品看板會重新帶出單位價換算、MOMO/PChome 單位價方向、差距百分比與處理建議；決策信封 / OpenClaw / PPT 摘要可讀到 `unit_price_insight`。人工覆核寫回也會保留原始 `match_diagnostic_json` / comparison mode / diagnostic codes，避免後續簡報、審計或 AI 策略只剩人工文案而失去 matcher 證據鏈。
   - V10.546 補近門檻舊候選回刷隊列：`run_retryable_candidate_revalidation()` 新增 `legacy_unmasked_attempt`，當最新狀態是 `no_result` / `refresh_no_result` / `expired_match` 時，可回撈同 SKU 早期近門檻候選交給最新版 matcher 重評；仍要求 candidate id、分數下限、無 hard veto、exact_identity，且不打開人工否決、單位價、identity_veto 或 protected existing match。
   - V10.545 收斂 Dashboard 比價覆蓋率口徑：coverage cache 升到 v9，新增身份覆蓋、可用比價、新鮮度、待補身份、過期身份與人工閉環欄位；商品看板和 PChome 覆核頁改只把真正待處理狀態算進「比價覆核」，人工已否決 / 人工單位價 / 需補研究改列為人工閉環；PChome competitor map 只吃有效價格、新鮮、identity_v2 最新 row，資料新鮮度也改看可用比價 row。
   - V10.544 收斂變體安全與 YES 指甲工具線：新增 YES 德悅氏指甲剪附除垢銼刀、腳皮銼腳板、藍寶石銼刀、三面拋光棒與 6/8cm 指甲剪的精準 total-price 線，要求同品牌、同工具名稱、同尺寸與同亮面/霧面/可收納/三面/不掉屑等款式訊號；同步接進 revalidation SQL。新增 MUJI / COCODOR 未知香味差異與 OPI 無型號不同色名 hard veto，HOOOME 暖燈材質差留人工覆核，搜尋詞也會優先帶香味/色名，提升 crawler 精準候選率。
   - V10.543 打通 `rescore_accepted_current` 窄門回刷：已進人工覆核池的候選若命中具名 focused exact 線，可進 `run_retryable_candidate_revalidation()` 重新評分；新增 SK-II 青春露 330ml 兩入、AMIINO 安美諾 30ml、YES 腳指甲剪刀 10.5cm、YES 極細指甲緣硬皮剪刀 9cm 的安全 total-price 線，並補 ANNY / OPI 指甲油型號 code hard veto，避免不同色號被錯配。
   - V10.542 拆開「可用比價覆蓋率」與「身份覆蓋率」：`decision_ready_rate = fresh identity / ACTIVE 商品數`，Dashboard 第一張 KPI 改顯示真正可進入決策、圖表、簡報的比價資料比例；daily / growth / Webcrumbs / OpenClaw payload 同步輸出，避免把身份覆蓋、新鮮率、價格可用率混成單一數字。
   - V10.541 補正式覆核頁高信心 exact 線：The Ordinary 咖啡因 EGCG 單側漏 30ml、Natures Care 綿羊油同入數 125ml/125m、TOMOON 指甲剪同 L/S 尺寸、HH 私密潔淨露+衣物手洗精雙 200ml、SEBAMED 護潔露 200ml x2、YES 德悅氏 9cm 剪刀；都同步進 revalidation SQL，且 TOMOON/O.P.I 不同型號或尺寸仍不得自動通過。
   - V10.540 補 O.P.I 類光繚指彩精準型號線：雙方同為 O.P.I 類光繚 / 如膠似漆指甲油或指彩，且共享 `ISL...` 型號 token 時才允許 total-price；不同型號/色號仍不得自動寫入。同步把此族群接進 `true_low_confidence` revalidation 窄門，降低高信心指彩候選卡在人工覆核池的比例。
   - V10.539 補 PChome 任選 catalog focused exact 線：FLORTTE 水果沙拉眼線液筆 0.5ml、露得清護手霜 56g 無香/有香、Kanebo ALLIE 持采亮化 UV 防曬水凝乳 60g 雙方皆任選時可走 total-price；同步接進 revalidation queue。focused bypass 新增 commercial condition 防線，`即期品` 等商業狀態差異不會被自動寫入正式價差。
   - V10.538 修 ai_calls provider CHECK 對齊：Hermes/Ollama 全失敗或未選定 host 時的 `ollama_other` 只作 telemetry bucket，migration 043 放行此值，`ai_call_logger` 也會將空值/unknown/非白名單 provider 正規化，避免觀測寫入失敗。
   - V10.537 將 V10.536 focused exact 線接進 `run_retryable_candidate_revalidation()` 窄門：既有 `true_low_confidence` 舊候選若命中新品線且無 hard veto / 型別、款式、香味、件數、組合阻擋，就可重新走 matcher 寫入正式價差；有色號/香味/即期等阻擋仍不進回刷。
   - V10.536 補 PChome 高分 `true_low_confidence` 安全救回線：新增花美水 Relax 薰衣草潤滑凝膠 1.7g x3、St.Clare 私密呼呼慕斯 x2 / 慕斯+噴霧組、BIOPEUTIC 果酸煥膚水凝乳 20% 150ml、台塑生醫嬰兒沐浴洗髮 3 件組、Elizabeth Arden 八小時護唇膏 SPF15 3.7g x3、理膚寶水全面修復潤唇膏 7.5ml focused total-price 規則；這些都要求同品牌、同品線與同規格/同組合，仍保留色號、香味、款式敏感品的 `variant_selection_review` 防線。
   - V10.535 修 ElephantAlpha 價格 trigger statement timeout：`price_drop_alert` / `market_opportunity` / DB evidence prefetch 改為先篩最近有效 PChome identity_v2，再用 `JOIN LATERAL` 查單一 SKU 最新 MOMO 價格；保留 match_score/tags/diagnostic evidence，避免 scheduler 週期性重查整張 `price_records`。
   - V10.534 收緊 PChome rescore accepted gate：`no_match / price_basis=none / alert_tier=suppress` 不得再進 `rescore_accepted_current`，並新增 `--retract-unsafe-accepted` 退回舊的 unsafe accepted rows；Dashboard / daily / growth / OpenClaw 文案改為「重算待人工覆核」，避免操作員把人工覆核隊列誤解為可直接採用或可自動寫價。
   - V10.533 補 ElephantAlpha legacy OpenClaw advisory 相容：`generate_dynamic_pricing_strategy` 與既有 `generate_market_strategy` / `generate_resource_optimization_strategy` 一樣只記錄為 skipped，不再觸發 `Unrecognized step` 與 circuit breaker；避免舊協調器輸出的建議型動態定價步驟被誤解為真正可執行任務。
   - V10.532 修正 PChome coverage / review queue 口徑落差：`fetch_competitor_coverage()` 的 `attempt_status` / `rescore_accepted_count` / `actionable_review_count` 改跟 review queue 一樣統計「沒有新鮮有效 identity」的商品，而不是只看「完全沒有 identity」；這讓已過期 identity 的 `rescore_accepted_current` 待審能正確顯示在 Dashboard / 狀態 API。
   - V10.531 補 PChome matcher 過度保守的安全 exact 線：同品線、同規格、同數量的多件組若沒有 variant / count / bundle / commercial / unit-price 等阻擋理由，且商品型別完全對齊，允許進 `exact / total_price / price_alert_exact`；新增 DHC 純欖護唇膏 1.5g、FRUDIA 蜂蜜藍莓護唇膏 10g、SEBAMED 嬰兒護唇膏 4.8g x2、理膚寶水滋養修護潤唇膏 4.7ml 的 focused total-price 規則。負例仍鎖住混合組、香味款、粉底色號與蠟燭 catalog，不放寬全域門檻。
   - V10.530 輕量化 PChome 狀態 preview 並暫停 `recover-stale` 主操作入口：`_fetch_retryable_candidate_skus()` 先從最新 `competitor_match_attempts` 縮小可重評候選，再用 `JOIN LATERAL` 只取該 SKU 最新 MOMO 價，避免 `/api/ai/pchome-match/backfill/status` 因 `price_records` 全量 window scan 超時；正式 smoke 同時顯示過期 identity fresh-search rescue 5 筆耗時約 109 秒且 0 筆成功，因此 Dashboard 移除「救援過期 40 筆」按鈕，只保留 `stale_recovery_preview` 的只讀「可救援」觀測；後端 `/api/ai/pchome-match/recover-stale` 改由 `PCHOME_STALE_RECOVERY_ENABLED=true` 顯式開關才可執行，避免操作員誤按低成功率慢路徑拖住 worker。
   - V10.529 補強 `recover-stale` 名稱風險擋詞：過期 identity 搜尋救援會先排除 `+`、`x2`、`*2` 等組合暗示，以及湛藍、麋香、海洋、玫瑰、薰衣草、生理呵護、日用型、清爽、潤澤等常見變體 / 香味 / 版本詞，避免同品牌同規格但不同香味、不同膚感、不同使用情境的 stale pair 進慢速 fresh search。
   - V10.528 將 `recover-stale` 救援 preview 改成輕量雙階段篩選：SQL 從過期 `competitor_prices` 小集合出發，只做 identity_v2、過期、exact/total_price/price_alert_exact 等必要條件並限制候選量，再用 `JOIN LATERAL` 取 ACTIVE 商品最新 MOMO 價；variant / catalog / commercial condition / 高風險名稱訊號改在 Python 對小樣本過濾，避免正式站看板狀態端點因全量 price_records、JSONB + regex 過重查詢拖垮 app worker。
   - V10.527 收斂 PChome 過期 identity 搜尋救援隊列：`recover-stale` 不再直接吃全部過期 `identity_v2`，改走 `_fetch_expired_identity_recovery_skus()`，只收既有正式診斷為 `exact_identity / total_price / price_alert_exact` 且無 variant、catalog、commercial condition、count、bundle、unit-price 等阻擋理由的舊配對；名稱含任選、多款、香味、色號、即期、融燭燈、香氛蠟燭等高風險訊號也先排除，避免慢速 fresh search 把人工覆核型 stale pair 全部掃進來。
   - V10.526 將 PChome 近門檻重評池與過期 identity 搜尋救援變成可觀測、可操作產線：`preview_retryable_candidate_revalidation()` / `preview_expired_identity_recovery()` 都是 read-only，不啟動 PChome 搜尋、不呼叫 LLM、不寫 DB；`/api/ai/pchome-match/backfill/status` 回傳 `revalidation_preview` / `stale_recovery_preview`，Dashboard 顯示「可重評 / 窄門 / 可救援」數字，並新增「救援過期 40 筆」按鈕呼叫 `/api/ai/pchome-match/recover-stale`，只在舊 PChome ID 缺失或低分時走受控 fresh-search recovery，最後仍經 hard veto、auto price write safety 與 overwrite protection。
   - V10.525 補高分 review-gated exact 舊候選重評入口：`run_retryable_candidate_revalidation()` 仍以 `low_score / refresh_low_score / recoverable_low_score` 為主，只額外允許 Beauty Foot / KAMERIA / TS6 / Vaseline 這批已補 focused exact 規則、舊分數 >= 0.95、無商業狀態 / 款式 / 入數 / 組合阻擋理由的 `true_low_confidence` 進窄門重評，讓 V10.523 的安全規則可以實際回收舊資料，不把所有人工審核候選打開。
   - V10.524 將「待刷新」變成可操作入口：商品看板 PChome 補抓產線新增「刷新過期 120 筆」按鈕，呼叫 `/api/ai/pchome-match/refresh-stale` 背景執行 `run_expired_identity_refresh()`，只刷新既有 `identity_v2` 的 PChome product_id，不跑 fresh search recovery、不呼叫 LLM，完成後重算 AI 挑品並清除 Dashboard / 競價快取。
   - V10.523 補一批高分真同款 exact identity 比價規則：Beauty Foot 足膜、KAMERIA 積雪草足膜、TS6 蜜愛潤滑液 / 蜜桃煥白凝膠 / 極淨白+煥白組合、Vaseline 嬰兒高純修護凝膠在規格、入數、品牌與品線完全對齊時可進 `exact / total_price / price_alert_exact`，讓可用比價覆蓋增加；同時保留 TS6 香味衣物手洗精等 variant-sensitive 款式在 `manual_review`，不放寬全域門檻。
   - V10.522 將 PChome 補抓狀態 API 接上 read-only coverage snapshot：`/api/ai/pchome-match/backfill/status` 會同步回傳身份覆蓋、新鮮率、待刷新與待補抓數，Dashboard 補抓產線即使沒有最近任務結果，也能直接判讀下一步該刷新過期價格或補抓未搜尋商品。
   - V10.521 將比價新鮮度 stale 指標上屏：首頁 KPI / PChome 補抓產線 / daily / growth 都顯示價格過期數，讓操作員分清「已確認同款但價格待刷新」與「尚未找到身份配對」；過期 identity refresh 也優先刷新 `total_price / price_alert_exact` 的正式價差配對。
   - V10.520 拆開過期價格刷新與搜尋救援：`run_expired_identity_refresh()` 只刷新既有 `identity_v2` PChome product_id，不再因少數 product_id 查不到或低分而同步進入慢速 `fresh_search_recovery`；缺失 / 低分候選交給 `run_retryable_candidate_revalidation()` 處理，避免正式刷新 500+ 筆時被外部搜尋拖死，讓價格新鮮度可以穩定批次回升。
   - V10.519 對齊 Webcrumbs host data metadata 與新版比價覆蓋口徑：`services/webcrumbs_host_data_service.py` 會同時輸出身份覆蓋、價格新鮮、過期配對與待補抓數，讓 shared-ui plugin / 其他專案 proxy 不會把 `coverage_rate` 誤讀成價格可用率。
   - V10.518 修正 PChome 比價覆蓋率口徑與新鮮度產線：`fetch_competitor_coverage()` 改拆「身份覆蓋」與「價格新鮮」，覆蓋率不再因 `expires_at` 過期被歸零；首頁 / 業績 / 成長頁同步顯示身份覆蓋、價格新鮮數與新鮮率。PChome 快取 TTL 預設由 6h 改 48h，並把每日 expired identity refresh / retryable / unmatched limits 改為環境變數，預設提高到 1200 / 240 / 240，避免 1800+ 已配對 identity 因刷新量不足長期失效。
   - V10.517 補 PChome 近門檻比對安全 exact 與香氛 variant 防線：Lab52 齒妍堂汪汪隊嬰幼兒牙刷 2 入組可由低分區提升為 `exact / total_price / price_alert_exact`；Les nez 香氛融蠟燈不同款式、Time Leisure 香薰蠟燭單側香味款式會被留在覆核 / veto，不再進 recoverable 自動回刷，避免為了壓低 low_score 而錯配款式。
   - V10.515 補 Webcrumbs host data 硬性授權：即使正式環境 `DISABLE_LOGIN=true` 讓一般 `@login_required` 放行，`/api/webcrumbs/marketplace-host-data` 仍必須有登入 session 或 `X-Internal-Key` 才能取真實 SKU/價差；`/webcrumbs` 未授權時只注入 `auth_required` 空狀態，避免 inline seed data 公開正式比價資料。
   - V10.514 新增 Webcrumbs MOMO/PChome host data read-only API：`/api/webcrumbs/marketplace-host-data` 回傳與 `/webcrumbs` inline seed 相同的登入後 JSON contract，提供 plugin / QA / 其他專案 proxy 驗證；API boundary 明確標示不寫 DB、不呼叫 LLM、不抓外站，只允許 exact / total_price / price_alert_exact 價差摘要。
   - V10.513 外部工具診斷頁 payload 模組化：新增 `services/external_tool_payload_service.py`，把 Metabase/Grist/Webcrumbs 的診斷 payload 與 Webcrumbs host data 組裝移出 `routes/system_public_routes.py`，讓 route 回到 HTTP glue，`system_public_routes.py` 從 600+ 行降至 500 行內。
   - V10.512 Webcrumbs live plugin 接上 MOMO/PChome 只讀 host data：新增 `services/webcrumbs_host_data_service.py`，復用 `competitor_intel_repository.fetch_top_competitor_risks()` / coverage，把 exact / total_price / price_alert_exact 價差摘要轉成 `StockPlatformSharedUI.marketSnapshot` / `aiCandidate`；不呼叫 LLM、不抓外站、不寫 DB，無風險或失敗時仍輸出安全空狀態。
   - V10.511 Webcrumbs live plugin 補 host data 安全空狀態：`/webcrumbs` 會注入 `StockPlatformSharedUI.marketSnapshot` / `aiCandidate` 的診斷空資料，避免 plugin fallback demo 數字被誤認成真實市場或 AI 建議。
   - V10.510 Webcrumbs 從 runtime 接線推進到專案內 live plugin 試點：`/webcrumbs` 會設定 `StockPlatformSharedUI.allowedPluginUris` 並嵌入同源 `/webcrumbs-assets/plugins/finance.market-ticker-strip/0.1.0`、`finance.ai-candidate-card/0.1.0`，用同一頁同時驗 runtime、plugin proxy 與共享 UI loader 初始化。
   - V10.509 新增市場情報 MCP Fetch Candidate Queue Writer Review Decision Approval Writer Preflight 安全預覽 gate：只審核 human approval 通過後由操作員貼回的 writer preflight 摘要，確認 approval identity、writer_preflight_id、row count、dedupe keys、approved decision 到 target review_state 的逐列映射、decision/approval/preflight evidence refs、exact identity / variant / overwrite guard 與 operator boundary；API 不讀 token、不執行 CLI、不開 DB、不寫 preflight/approval/decision/match、不更新 review_state、不補 queue、不掛 scheduler，只放行到後續 CLI review / run package 設計。
   - V10.508 Webcrumbs 轉為 momo-pro 同源 asset proxy：`WEBCRUMBS_RUNTIME_URL` 預設改為 `/webcrumbs-assets/loader/webcrumbs-compatible-loader.js`，新增 allowlist proxy 只代理 188 Shared UI Hub 的 `loader/`、`plugins/`、`demo/`，避免 `webcrumbs.wooo.work` 公網 TLS / Basic Auth 尚未收斂時影響正式頁面載入；`/webcrumbs` 診斷頁同步顯示 asset upstream。
   - V10.507 接入 Webcrumbs 共用 UI Runtime：新增 `WEBCRUMBS_*` 環境設定與 `/webcrumbs` 診斷入口，`ewoooc_base.html` 會在 runtime 啟用且 URL 有效時載入自架 Webcrumbs script；側欄新增 Webcrumbs 入口，並補 `docs/guides/webcrumbs_shared_runtime.md` 作為跨專案接入手冊。生產仍需固定版本與自架 plugin URI，不使用官方 `@latest`。
   - V10.506 新增市場情報 MCP Fetch Candidate Queue Writer Review Decision Approval 安全預覽 gate：只審核 review decision 通過後由操作員貼回的人工 approval 摘要，確認 approval identity、row count、dedupe keys、approved decision、evidence refs、exact identity / variant / overwrite guard 與 operator boundary；API 不讀 token、不執行 CLI、不開 DB、不寫 approval/decision/match、不更新 review_state、不補 queue、不掛 scheduler，只放行到後續人工 approval writer preflight 設計。
   - V10.505 新增市場情報 MCP Fetch Candidate Queue Writer Review Decision 安全預覽 gate：只審核 review inventory 通過後由操作員貼回的人工 candidate queue review decision 摘要，確認 decision identity、target table、row count、dedupe keys、`needs_review` 現態、允許決策集合、evidence refs、matched row exact-identity/variant/overwrite guard、operator confirmation 與 forbidden API actions；API 不讀 token、不執行 CLI、不開 DB、不寫 decision record、不更新 review_state、不寫 match result、不補 queue、不掛 scheduler。UI 同步新增 Decision gates / Inventory link / Decision summary / Decision rows / Boundary next 預覽區。
   - V10.504 新增市場情報 MCP Fetch Candidate Queue Writer Review Inventory 安全預覽 gate：只審核 writer review handoff 通過後由操作員貼回的 read-only candidate queue inventory 摘要，確認 handoff identity、target table、row count、dedupe keys、review_state、artifact paths、read-only query result、missing/duplicate rows、operator confirmation 與 forbidden API actions；API 不讀 token、不執行 CLI、不開 DB、不寫 queue、不更新 review_state、不做 inventory query、不掛 scheduler。主 gate 拆為 inventory / gates / sample 三檔，避免單檔膨脹。
   - V10.503 新增市場情報 MCP Fetch Candidate Queue Writer Review Handoff 安全預覽 gate：只審核 post-closeout inventory review 通過後的人工 candidate queue review 交接包，確認 inventory linkage、handoff identity、target table、row count、artifact paths、review contract、forbidden API actions 與 operator confirmation；API 不讀 token、不執行 CLI、不開 DB、不寫 queue、不更新 review_state、不掛 scheduler。
   - V10.502 修正 AiderHeal 自動修復診斷鏈：先做 ADR-020 檔案白名單再打 110 preflight，`tests/` finding 會明確略過而不誤報 repo preflight；Code Review 完成通知會把全數不在白名單的 finding 標成需人工處理，不再宣稱已觸發 AiderHeal；白名單放行 `services/routes/database` 子目錄 Python 檔，preflight 通知帶 stderr/stdout 細節，健康檢查同時接受 `/health` 回 `ok` 與 `healthy`。
   - V10.501 新增市場情報 MCP Fetch Candidate Queue Writer Post-Closeout Inventory Review 安全預覽 gate：只審核 closeout review 後由操作員 shell 完成的 live inventory read-only 摘要，確認 closeout linkage、row count、inventory artifact、closeout review artifact、read-only query result、missing/duplicate rows 與 operator confirmation；API 不讀 token、不執行 CLI、不開 DB、不寫 queue、不做 inventory query、不掛 scheduler。
   - V10.500 新增市場情報 MCP Fetch Candidate Queue Writer Run Closeout Review 安全預覽 gate：只審核 receipt review 通過後的 operator closeout 摘要，確認 receipt linkage、closeout artifact、receipt review artifact、post-closeout inventory plan、writer output / post-write smoke / backup manifest、rollback note 與 operator confirmation；API 不讀 receipt 原文、不讀 token、不執行 CLI、不開 DB、不寫 queue、不做 post-closeout query、不掛 scheduler。
   - V10.499 新增市場情報 MCP Fetch Candidate Queue Writer Run Receipt Review 安全預覽 gate：只審核操作員 shell writer run 後貼回的 receipt 摘要，確認 readiness linkage、run package id、候選/dedupe keys、writer output、post-write smoke、backup path 與 operator confirmation；API 不讀 receipt 原文、不讀 token、不執行 CLI、不開 DB、不寫 queue、不做 post-write query、不掛 scheduler。
   - V10.498 新增市場情報 MCP Fetch Candidate Queue Writer Run Readiness 安全預覽 gate：只審核 run package review 後的操作員 readiness 證據，確認 run readiness artifact、reviewed sample、備份、read-only preflight 與 post-write smoke 路徑安全，以及 CLI-only / approval token shell-only 邊界；API 不產檔、不讀 token、不執行 CLI、不開 DB、不寫 queue、不掛 scheduler。
   - V10.497 新增市場情報 MCP Fetch Candidate Queue Writer Run Package Review 安全預覽 gate：只審核 CLI review 通過後的 operator run package 草案，要求 package id、artifact manifest、operator shell command sequence、candidate/dedupe keys 與 CLI review 對齊；API 不產檔、不讀 approval token、不執行 CLI、不開 DB、不寫 queue、不掛 scheduler，只放行到 run readiness review。
   - V10.496 新增市場情報 MCP Fetch Candidate Queue Writer CLI Review 安全預覽 gate：只審核 writer preflight 後的 CLI review 草案，確認 script path、target table、preflight id、payload row count、candidate/dedupe keys 與 command argv；禁止 API 執行 CLI、禁止 `--execute` / `--apply-real-write` / `--approval-token` 進 payload，API 不讀 token、不寫檔、不開 DB、不寫 queue、不掛 scheduler。
   - V10.495 新增市場情報 MCP Fetch Candidate Queue Writer Preflight 安全預覽 gate：只審核 queue review 後的 writer preflight 草案，確認 target_table、write_mode、dedupe strategy、insert columns、payload rows 與候選 key 對齊；API 不開 DB、不執行 CLI、不建立 queue、不更新 review_state、不寫 DB、不連外、不掛 scheduler。
   - V10.494 新增市場情報 MCP Fetch Candidate Queue Review 安全預覽 gate：只審核 candidate handoff 後的人工 queue review 草案，要求候選 key 對齊、review_state 停在 needs_review、allowed actions 限定人工確認/否決/延後、queue_write_status 維持 not_persisted；API 不建立 queue、不更新 review_state、不寫 DB、不連外、不掛 scheduler。
   - V10.493 新增市場情報 MCP Fetch Candidate Handoff Review 安全預覽 gate：只審核 parser review 後的候選交接包，確認 source/candidate key 對齊、queue policy 仍是 manual preview、候選數維持小批次、無 raw/secret/side-effect；API 不建立 queue、不寫 DB、不讀 artifact、不連外、不掛 scheduler。
   - V10.492 收緊 PChome 近門檻自動回刷隊列：`retryable_candidate_revalidation` 不再把 `identity_veto`、`unit_comparable`、`true_low_confidence` 納入每日自動回刷；只處理 `recoverable_low_score` 與 legacy `low_score / refresh_low_score`，並要求無 hard veto、仍在 `exact_identity`、且具備同品線/identity anchor 證據。這讓「可救回」與「正確阻擋」在操作層面真正分流，避免為了壓低 low_score 而重跑不該自動推進的候選。
   - V10.491 新增市場情報 MCP Fetch Result Parser Review 安全預覽 gate：只審核操作員貼回的 parser 結構化摘要，對齊 receipt source/path、候選必要欄位、公開 URL、小批次上限與 raw HTML/secret/side-effect 風險；API 不讀 artifact、不執行 parser CLI、不抓外站、不寫 DB、不掛 scheduler。
   - V10.489 補 PChome 低分同款人工覆核回收與 gate-pass 風險邊界：TS6 超美白香氛誘霜 120g/ml、W 修護保養蝸牛特潤修護面膜 6 片、Derma 大地 Eco 植萃護膚油 2 入，從低信心升成 `identity_review` 人工覆核候選；Clarins 輕盈美體護理油 vs 身體調和護理油、台塑生醫嬰兒沐浴/洗髮組合數量反轉、isLeaf 私密慕絲香型數量不一致改 hard veto；HOOOME 大理石暖燈 vs 泛稱經典款改留 `variant_selection_review`。正式價差表仍需人工採用才會寫入。Production 已部署 `/health=V10.489`；500 筆 read-only audit 由 V10.486 基線 `gate_pass=129 / identity_veto=1 / still_low=370` 收斂為 `gate_pass=124 / identity_veto=4 / still_low=372`。測試：完整 `pytest` 1289 passed / 9 skipped。
   - V10.488 新增市場情報 MCP Fetch Run Receipt 安全預覽 gate，只審核操作員 dry-run receipt，不執行 CLI、不抓外站、不寫 DB。
   - V10.486 補 PChome near-threshold 風險邊界：NEW DIRECTIONS 甜杏仁油 vs 酪梨油直接 `core_ingredient_line_conflict` hard veto；COCODOR 經典擴香瓶多款任選 vs generic、KAMERIA 足膜任選三款 vs 單一涼感足膜、Hakugen 白元入浴劑橘盒/綠盒不同變體都保留 `variant_selection_review`，不進可採用 gate。Production 已部署 `/health=V10.486`；240 筆 near-threshold audit `gate_pass 83→79`、`identity_veto 0→1`、`still_low 157→160`。測試：`tests/test_marketplace_product_matcher.py`、`tests/test_competitor_match_attempts_persistence.py`、`tests/test_competitor_match_attempt_rescore_audit.py` 通過。
   - V10.485 補 NITORI 香氛噴霧器短型號防線：read-only near-threshold pilot 找到唯一 gate pass 為 5510 vs J82 LBR，不應入隊；matcher 現在會把 `J82` 這類短英數型號納入 NITORI diffuser model conflict，與 5510 / YX168 等不同型號一樣 hard veto。Production 已部署 `/health=V10.485`；120 筆 near-threshold audit 由 `gate_pass=1` 變 `gate_pass=0`，accepted audit `scanned=89 / gate_pass=89 / still_low=0`。測試：`tests/test_marketplace_product_matcher.py`、`tests/test_competitor_match_attempts_persistence.py`、`tests/test_competitor_match_attempt_rescore_audit.py` 通過。
   - V10.484 拆分 PChome manual gate：POWERMAN 男性私密養護液 30ml、PHYSIOGEL AI 冰鎮精華露 200ml 2入、TS6 緊彈水嫩凝膠 40g、DERMA 寶寶洗髮沐浴露 150/500ml、Clarins 黃金亮眼萃 20ml、Cetaphil 長效潤膚乳 237/473ml 等明確同款可走 `exact / total_price / price_alert_exact`；COCODOR 大豆蠟燭單側多款任選改留 `variant_selection_review`，Pavaruni 雙側 20 香味蠟燭不受新型錄保護誤傷。Production 曾部署 `/health=V10.484`，並退回 COCODOR 舊 accepted 風險 1 筆。測試：`tests/test_marketplace_product_matcher.py`、`tests/test_competitor_match_attempts_persistence.py`、`tests/test_competitor_match_attempt_rescore_audit.py` 通過。
   - V10.483 收斂舊 gate pass 風險：NARS 遮瑕蜜任選、LOREAL 玻尿酸啵啵精華水/液態紫熨斗 vs 水光精華、SEBAMED 洗髮乳任選、Schick 舒綺 2-in-1 型號落差、TAICEND 保護膜 vs 噴霧，現在都會保留高分但加 `variant_selection_review` 與專屬 reason，不再被 rescore 自動送進 accepted queue。Production 已部署 `/health=V10.483`；目標 5 SKU audit `gate_pass=0 / still_low=5`，並用 `--retract-variant-accepted` 退回 4 筆舊 accepted 變體風險，latest accepted audit `scanned=90 / gate_pass=90 / still_low=0`。測試：`tests/test_marketplace_product_matcher.py`、`tests/test_competitor_match_attempts_persistence.py`、`tests/test_competitor_match_attempt_rescore_audit.py` 通過。
   - V10.482 補 exact variant-safe 回收：LUSH 櫻之花身體噴霧 200ml、ARTMIS 金縷梅/蔓越莓私密清潔慕斯 250ml、SO NATURAL FIXX 120ml plain 與 Baan 原味/草莓同 catalog，若雙方同品名、同規格且同明確 variant，移除過度保守的 `variant_selection_review` 並進 `exact / total_price / price_alert_exact`；SO NATURAL 經典款/光澤款/霧面款/夏日款 catalog 對單款 120ml 仍維持人工覆核。Production 已部署 `/health=V10.482`，並只 materialize 5 筆新增 exact-line SKU 到 `rescore_accepted_current`，最新 accepted audit `scanned=94 / gate_pass=94 / still_low=0`。測試：`tests/test_marketplace_product_matcher.py`、`tests/test_competitor_match_attempts_persistence.py`、`tests/test_competitor_match_attempt_rescore_audit.py` 通過。
   - V10.481 補 rescore accepted retraction 工具缺口：`--retract-variant-accepted` 不只看舊 row 已存的 `diagnostic_codes`，也會用當前 matcher 重判 latest `rescore_accepted_current`；若新版規則已變成 `variant_selection_review / low_score_current`，會追加退回 `true_low_confidence`，避免舊 accepted queue 殘留不該採用候選。Production 已先保守 materialize 15 筆安全 SKU，再退回 7 筆舊 accepted 變體風險；最終 `rescore_accepted_current=89`，accepted audit `gate_pass=89 / still_low=0`。
   - V10.480 依 production accepted-current 風險樣本補安全閘門：rom&nd 零絲絨/果凍唇釉不可被果汁唇釉多款 listing 誤收為同款；Relove 潔淨凝露若一側為傳明酸/淨白活性變體改送 `variant_selection_review`；1990 融燭燈不同設計（歐式可彎 vs 韓風原木底座）改 hard veto。此版先清 accepted queue 風險，再做保守 materialize。
   - V10.479 依 production audit 再補二階風險：Cetaphil 修護乳 vs 潔膚露改 hard veto；私密防護慕絲二款可選 vs 單一香型、雪芙蘭滋養霜 vs 單側清爽型改走 `variant_selection_review`，避免仍殘留在 accepted queue。
   - V10.478 補 PChome 高分錯配 / catalog 變體防線：精油/香氛類若兩側明確香味不同（如檸檬草 vs 茶樹）直接 veto；NOW 椰子油膏 vs 乳木果油、港香蘭漢本 vs 艾魔菈爽身粉改為商品線硬擋；多色/多香/數字區間 catalog 對單一款式（粉餅盒、眉筆、眼線膠筆、車用擴香蕊等）只進 `variant_selection_review`，不自動進 accepted queue。
   - V10.477 補 PChome 高分錯配防線：SPF 數值不同（如 SPF25 vs SPF50）直接 veto；MAKE UP FOR EVER 定妝噴霧 vs 活氧水不同線直接 veto；多款任選對單一款（私密潔浴露、身體去角質、乳液、染眉膏等）與單側色號改送 `variant_selection_review`，避免高分候選誤入 accepted queue。
   - V10.476 補 PChome 商品比對「商業條件差」防線：即期品、效期/保存期限、盒損、福利品等條件若只出現在單側，matcher 會加 `commercial_condition_gap` + `variant_selection_review`，保留高分但不讓 rescore 自動進 accepted queue。這可避免 3W CLINIC 粉底液、KAMERIA 足膜、Sisley 全能乳液這類同名但商品狀態不同的候選被當成一般正品價差。
   - V10.475 補 PChome rescore 操作與高分錯配防線：`scripts/audit_competitor_match_attempt_rescore.py` 預設不再只掃 `strong_exact_spec_match`，避免漏掉 `focused_exact_*` 等新版 matcher 理由；matcher 新增暖燈 S/M/L 尺寸差、NITORI 香氛噴霧器型號差的 hard veto，並把彩妝色號單邊出現的高分候選送進 `variant_selection_review`，避免 LA MER 氣墊等色號型商品被誤入 accepted queue。測試：`tests/test_marketplace_product_matcher.py`、`tests/test_competitor_match_attempts_persistence.py`、`tests/test_competitor_match_attempt_rescore_audit.py` 通過。
   - V10.474 補 PChome near-threshold matcher / feeder 下一階段：新增 HOOOME 白色經典香氛暖燈與 Gdesign Aroma Lava 2.0 的窄範圍 total-price exact 回收；Recipe Box 可撕式水性兒童指甲油只進 identity_review，不自動寫正式價差；Pavaruni 蠟燭 vs 精油、DASHING DIVA 不同款式仍維持 veto/低信心。known-id refresh 現在會對 hard-veto 舊候選執行 fresh search recovery，missing known-id 若 fresh search 只找到低分候選也會保留 best candidate + diagnostics，而非落成 `refresh_no_result`；正式覆寫保護新增 stronger existing guard，避免較弱新候選以高分覆蓋既有強正式配對。測試：`tests/test_marketplace_product_matcher.py`、`tests/test_competitor_match_attempts_persistence.py`、`tests/test_competitor_match_attempt_rescore_audit.py` 通過。
   - V10.473 補背景 embedding host_health skip：`allow_111_fallback=false` 會讀最近 `host_health_probes`，跳過 runtime unhealthy 的 GCP 節點（預設 20 分鐘，DB fail-open），避免每筆任務都等待已知壞節點 timeout；路由安全不變，不把背景 embedding 落 111。
   - V10.472 補 GCP Ollama failover rootless 診斷：新增 `scripts/ops/diagnose_ollama_gcp_failover.sh`，可一鍵檢查 GCP-A direct、GCP-B direct、111、110:11435、110:11436 與 GCP-B `bge-m3` runtime；目前輸出確認 GCP-A `11434` refused、GCP-B direct/embed OK、110:11435 502、110:11436 OK。110 無免密 sudo、GCP-A 22 refused、GCP-B SSH key denied，因此 primary 修復需 GCP/SSH 或 110 root 權限；應用層維持 GCP-A → GCP-B → 111，不把背景 embedding 落 111。
   - V10.471 依 GCP-B `bge-m3` 實測 latency 調整 embedding timeout，已部署正式環境並確認 `/health=V10.471`：GCP-B `/api/embed` 三次實測約 6.4s / 7.3s / 23.5s，原本 `OLLAMA_EMBED_MAX_TIMEOUT=15` 與 host health `8s` 會誤殺慢但成功的 embedding；已將背景 embedding cap 與 host health model probe timeout 預設調為 30s。正式 smoke 顯示容器內 embedding 回 1024 維、耗時 10.07s；手動 host health probe 後最新狀態為 GCP-A unhealthy、GCP-B healthy、111 healthy。路由安全不變：背景 embedding 仍只跑 GCP-A/GCP-B，不落 111。
   - V10.470 強化 Ollama host health probe，已部署正式環境並確認 `/health=V10.470`：scheduler 與觀測台 host health 對 GCP-A / GCP-B 除 `/api/tags` 外，再做短 `bge-m3` `/api/embed` 實作探針；可抓出 GCP-B「tags/version 正常但 embedding runner 8s timeout」這類假健康。111 預設不做背景 embedding probe，避免監控任務把 `bge-m3` 載入 fallback Mac。正式 smoke 後 `host_health_probes` 最新狀態為 GCP-A unhealthy、GCP-B unhealthy、111 healthy。
   - V10.469 將背景 embedding 的 GCP-only 全失敗改為專業降級語意，已部署正式環境並確認 `/health=V10.469`：`allow_111_fallback=False` 時若 GCP-A/GCP-B 都不可用，開啟 failure circuit 並記 WARNING，不再把可預期的背景熔斷每分鐘打成 ERROR；同步 / 允許 fallback 的 embedding 全失敗仍保留 ERROR。Smoke 顯示 GCP-B `/api/version` 可用，但 `/api/embed` 仍可能 15s timeout，下一步需修 GCP-A primary 與 GCP-B runner/model 負載。
   - V10.468 補 Ollama import-time 防凍結與背景 embedding GCP failure circuit，已部署正式環境並確認 `/health=V10.468`：`config.OLLAMA_HOST` / `HERMES_URL` / `EMBEDDING_HOST` 舊相容常數不再於 import 時 probe network，也不會因 GCP-A/GCP-B 暫時拒連而 freeze 到 111；動態 caller 仍走 `get_*()` / `OllamaService` 三主機級聯。當 `allow_111_fallback=False` 且 GCP-A/GCP-B 皆失敗時，短暫熔斷 60 秒，不重複打兩台 GCP、不落 111，降低 app/scheduler 因連續 embedding timeout 造成的 log 與 worker 壓力；部署 smoke 時 GCP-B `/api/version` 已恢復 200 並成為動態路由落點，GCP-A `22/11434` 仍拒連，需後續用 GCP 權限修復 primary Ollama 主機。
   - V10.467 補 PChome focused exact total-price 安全通道：針對正式近門檻樣本中已確認同品牌、同品名、同規格/同入數的 3W CLINIC 粉底液 2入、花美水凝膠 3支、The Ordinary 咖啡因 EGCG 30ml、KUSSEN 屁屁膏 3入、Bone 擴香禮盒、1990 融燭燈白色款與 CANMAKE 淚袋盤，從 `exact/manual_review` 收斂為 `exact/total_price`；未放寬 `MIN_MATCH_SCORE`，DASHING DIVA、唇彩、香味、色號/款式敏感商品仍維持 variant / veto 保護。Production pilot 已將 9 筆安全 SKU 送入 `rescore_accepted_current`，`true_low_confidence` 802→793、`rescore_accepted_current` 38→47；`6101784` 即期品保留在 `true_low_confidence`。
   - V10.466 修正 rescore audit duplicate 判斷：只在「最新 attempt 已是同候選 `rescore_accepted_current`」時跳過；若歷史曾 accepted、但後續 crawler 又追加低信心列，允許重新 materialize，避免 Dashboard latest-state 仍停在 `true_low_confidence`。Production pilot 已將 SKU `14756069`、`11159042`、`13842560`、`8394210`、`15192547`、`10509765`、`10603780` 送入人工覆核隊列；只寫 `competitor_match_attempts`，`competitor_prices` / `competitor_price_history` 未變。
   - V10.465 修正 embedding fallback-disabled 控制流：`allow_111_fallback=False` 時若 resolver 回 111，不再直接退出或只試單台 GCP-B，會強制改試尚未嘗試的 GCP-A/GCP-B；背景 embedding 仍不落 111。
   - V10.464 補 rescore audit 精準 SKU pilot：`audit_competitor_match_attempt_rescore.py --sku` 可只掃指定 SKU，再搭配 `--apply-accepted` 只把通過新版 matcher 的目標 SKU 追加到 `rescore_accepted_current` 人工覆核隊列，不寫正式價格表。
   - V10.463 補 DR.WU / 達爾膚品牌 alias：同規格 `DR.WU 達爾膚` 與 `DR.WU` 候選不再被當成 brandless identity review，會以既有 exact_identity / total_price / price_alert_exact 閘門處理；未調整 `MIN_MATCH_SCORE`，保留 variant / hard veto 保護。
   - V10.462 進一步收斂 PChome 補抓 UI 語意：Dashboard 區塊標題改為「PChome 補抓產線」，AI 中樞按鈕、前端確認與 API 訊息改為「補抓未搜尋 / 未搜尋補抓」，避免操作員把尚未搜尋的工作誤判成已有候選待審。
   - V10.461 修正商品看板 PChome 補抓優先清單的狀態語意：尚未進入搜尋/補抓的品項改顯示「尚未搜尋」與「尚未進入 PChome 補抓」，並補前端守門測試禁止回退成籠統「待比對」，避免操作員把未搜尋誤判成已有候選待人工覆核。
   - V10.460 收斂 daily/growth 圖表空白誤判與 ElephantAlpha 告警信封：`page-daily-sales.js`、`page-growth.js` 的 chart 判斷改為至少有一個非零資料點才繪製 Chart.js，避免全 0 序列只畫座標軸；`resource_optimization` / `ea_escalation` 改輸出 deterministic `decision_envelope`，只使用 action_plans、CPU 實測與 hygiene evidence，不再輸出空泛「48 小時效益」敘事。
   - V10.459 強化 PChome `protected_existing_match` 決策封包：解析 `existing_match_conflict` 的既有候選、新候選與雙方 score，寫入 `decision_envelope.evidence` / `expected_impact` / `guardrails`，並把下一步明確標成「比較既有正式候選與新候選」；仍保持 `can_auto_execute=false`，避免新候選分數較高時繞過人工覆核自動覆蓋正式價差。
   - V10.458 將 OpenClaw / 競品 PPT 接上 PChome 覆核 `decision_envelope` 摘要：`competitor_intel_repository.summarize_review_decision_envelopes()` 成為共用 formatter，OpenClaw 週報/日報/月報與競品簡報 data_summary / KPI slide 都讀同一份信封文字，避免策略報告與 PPT 各自翻譯覆核狀態或遺失 HITL guardrails。
   - V10.457 將 PChome 覆核 `decision_envelope` 連到人工操作面：Dashboard 覆核卡新增決策等級、資料品質、HITL/trace 信封摘要；`/api/export/excel/pchome-review` 匯出同步增加決策信封 ID、決策類型、建議代碼、責任人、資料品質、自動執行允許與證據摘要，讓線上操作與下載檔都保留同一份 guardrails。
   - V10.456 將 PChome 覆核隊列接上 `decision_envelope` contract：`fetch_competitor_review_queue()` 與 `/api/pchome-review/queue` 每筆候選都輸出同一份 SKU、PChome 候選、match evidence、recommended_action、expected_impact 與 HITL guardrails，Dashboard、Agent、Telegram、PPT 後續不得再各自重建比價判讀格式；同版將 review queue cache key 升到 v3，避免正式環境沿用舊 payload。
   - V10.455 讓 EventRouter 對 `decision_envelope` 事件走直送證據模板：NemoTron / 價格比對已產生 SKU、PChome 候選、match evidence 與 HITL guardrails 時，不再進 L1/L2 AI 重新摘要，避免額外模型呼叫與告警文字二次發散；Telegram 決策信封同步補「標的」區塊，顯示 SKU、商品與 PChome 候選。同版補 `audit_competitor_match_attempt_rescore.py --retract-variant-accepted`，可把最新仍帶 `variant_selection_review` 的 `rescore_accepted_current` 批次追加退回 `true_low_confidence`，且不寫正式價差表。
   - V10.454 補 feeder / rescore 正式寫入安全閘門：matcher 若只到 `manual_review` / `identity_review` / `variant_selection_review`，例如 MOMO 多款任選唇膏對 PChome 單一款式，只能進 `true_low_confidence` 覆核，不得由 retryable replay、known identity refresh 或 rescore accepted 語意自動寫入 `competitor_prices` 正式價差。
   - V10.453 補 PChome matcher 安全回收規則：新增 Herbacin 小甘菊護手霜 20ml brandless 同款 anchor；修正 `EX8` 型號不可被誤解析成 `x8` 入數；新增 GONESH / 香氛固體凝膠的一側泛稱、一側明確香味或 No. 款式 veto，避免近門檻 replay 把不同香味、不同入數商品錯寫成正式價差。
   - V10.452 修正 PChome rescore audit 掃描口徑：`audit_competitor_match_attempt_rescore.py` 預設先取每個 SKU 最新 attempt，再套用 status / reason 篩選，和 Dashboard review queue 的最新狀態一致；舊 SKU/候選考古掃描需明確加 `--include-historical-candidates`，避免已修正或已入隊商品被舊低信心紀錄重複推回報表。
   - V10.451 拆分 PChome `low_score` 操作分流並補 read-only queue API：比價覆核頁把近門檻可救、證據不足、低信心舊候選拆成獨立篩選；repository 同步提供 `recoverable_low_score`、`true_low_confidence`、`legacy_low_score` 三個 status filter，`/api/pchome-review/queue` 可直接用同一套 review_status 做 smoke / operator tools 查詢，讓回刷、人工覆核與報表不再把所有低信心候選混在一起。
   - V10.450 補 PChome 覆核 fast-count UI 語意與重算可採用指標：預設全量覆核頁跳過 exact count 時，模板會顯示「約」作為快取總數提示；搜尋、分類、單一狀態仍是精準總數。`fetch_competitor_coverage()` 同步輸出 `rescore_accepted_count`，讓 Dashboard、daily/growth 與 OpenClaw 摘要能把「重算可採用待審」從一般覆核隊列拆出來。
   - V10.449 修正 PChome 覆核 exact count 條件：只有預設「全部覆核、無搜尋、無分類」頁跳過 exact count；只要有搜尋詞、分類篩選或單一 review status，就保留精準總數，避免分頁資訊失準。
   - V10.448 讓 PChome 覆核「全部」頁跳過 exact count：`review_status=all` 使用 shared overview cache 的待處理總數作為分頁總數提示，只查當頁 50 筆；單一狀態分流仍保留 exact count，降低全量覆核頁互動成本。
   - V10.447 反轉 PChome 覆核頁查詢方向：review queue page 先從最新 `competitor_match_attempts` 的可覆核狀態縮小候選，再 join ACTIVE 商品與最新價，並用 `NOT EXISTS` 排除已有有效 identity_v2 正式價；避免每次「全部覆核」先掃全站 ACTIVE 商品。
   - V10.446 修正 PChome 覆核頁輕量路徑的 overview timeout：覆核頁總覽改讀已存在的 shared dashboard cache / stale cache，沒有快取時只用目前覆核頁資料補足狀態，不再現場跑 `_load_competitor_decision_overview(session)` 的重型後備 SQL。
   - V10.445 補 PChome 覆核頁輕量渲染路徑：`filter=pchome_review` 不再先建完整 Dashboard `unique_items`，改為只查覆核當頁 50 筆商品、當前價、昨日價與週前價，再沿用同一張新版表格與人工覆核按鈕；降低核心比價覆核頁的全站資料負載。
   - V10.444 瘦身 PChome 覆核頁查詢：`fetch_competitor_review_queue_page()` 將覆核隊列總數與當頁資料合併在單一 SQL 內取回，避免 `/?filter=pchome_review` 為 count/page 重複掃 `latest_momo`、`latest_attempt`、`valid_competitor` CTE；保留狀態分流、人工覆核與正式價格寫入保護不變。
   - V10.443 補 PChome rescore 人工覆核入隊：`audit_competitor_match_attempt_rescore.py --apply-accepted` 只追加 `rescore_accepted_current` attempt 進人工覆核隊列，不直接寫 `competitor_prices` / `competitor_price_history`；商品看板新增「重算可採用」分流與狀態文案，讓可救回候選先由人審確認再正式更新價差。
   - V10.442 降噪 `/cicd` 舊 GitLab 探測：沒有明確啟用 `GITLAB_ENABLED=true` 與 token 時，不再打退役的 `192.168.0.110:8929` 或 SSH fallback，正式 responsive smoke 造訪 `/cicd` 只呈現空 pipeline 狀態，不污染 app logs。
   - V10.441 補 PChome matcher re-score audit 與商品看板原因標籤：新增 read-only `competitor_match_attempt_rescore_audit` / `scripts/audit_competitor_match_attempt_rescore.py`，可用最新版 matcher 重新分類既有 `competitor_match_attempts`，預設不寫 DB、不更新正式價格；商品看板同步補蘭蔻/達特醫/hoi/Saugella/Lactacyd 等 focused matcher reason 中文標籤，讓「待對比」能拆成商品線不符、款式版本不符、可回刷或仍低信心。
   - V10.439 收斂外部 BI / 資料協作入口：`/metabase`、`/grist` 正式頁維持 momo-pro 內部診斷 bridge，`.env.example` 與 bi profile Grist 預設改回 `https://mo.wooo.work/grist` / `GRIST_APP_HOME_URL`，並補測試禁止 `grist.wooo.work` / `awoooi` 回流到導覽設定；外部工具頁標題字級改用新版 token 與手機 media query。
   - V10.414 補市場情報 MCP fetch run readiness gate：新增 `mcp_fetch_run_readiness` read-only builder、GET/POST endpoint、UI run readiness 審核面板與 deployment readiness smoke target，在 run package 後檢查 command preview、receipt path、artifact path、節流/timeout/dry-run-first 與操作員 shell-only 邊界；API/UI 不執行 CLI、不抓外站、不寫檔、不開 DB、不掛 scheduler，只放行到人工 shell dry-run 與後續 receipt gate。
   - V10.412 補市場情報 MCP fetch run package gate：新增 `mcp_fetch_run_package` read-only builder、route extension、GET/POST endpoint、UI run package 審核面板與 deployment readiness smoke target，將已通過的 target review 轉成操作員可覆核的 command argv preview 與 receipt path 契約；API/UI 不執行 CLI、不抓外站、不寫檔、不開 DB、不掛 scheduler，只放行到後續 run readiness review。
   - V10.409 補市場情報 MCP fetch target review gate：新增 `mcp_fetch_target_review` read-only builder、GET/POST endpoint、UI target review 審核面板與 deployment readiness smoke target，讓 manual fetch handoff 通過後，先人工審核 adapter registry 公開入口、每平台節流、樣本數、timeout 與 rollback plan；API/UI 不保存 payload、不發外部 request、不開 DB、不寫入、不掛 scheduler，也不會自動打開 manual fetch。
   - V10.405 補市場情報 MCP manual fetch handoff gate：新增 `mcp_manual_fetch_handoff` read-only builder、GET/POST endpoint、UI handoff package 審核面板與 deployment readiness smoke target，將 runtime promotion package 與操作員安全確認合併成「可進人工 fetch gate 審核」的交接收據；API/UI 不保存 payload、不打 health、不開 DB、不抓外站、不掛 scheduler，也不會自動打開 manual fetch。
   - V10.379 補市場情報 MCP runtime promotion gate：新增 `mcp_runtime_promotion` read-only builder、GET/POST endpoint、UI promotion package 審核面板與 deployment readiness smoke target，將 MCP activation evidence 與 runtime smoke receipt 合併成可審核的 runtime promotion package；API/UI 不保存 payload、不打 health、不開 DB、不抓外站、不掛 scheduler，也不會自動打開人工 fetch gate。
   - V10.366 補市場情報 MCP runtime smoke 收據審核：新增 `mcp_runtime_smoke_receipt` read-only builder、GET/POST endpoint、UI receipt JSON 審核面板與 deployment readiness smoke target，讓操作員貼上 `/api/market_intel/mcp_readiness?execute=true&timeout=3` 的實際收據後，判斷 external/internal MCP runtime 是否可升級為已驗收；API/UI 不保存 payload、不打 health、不開 DB、不抓外站、不掛 scheduler，且會阻擋任何 DB write/commit/scheduler/writes 旗標或原始 readiness blocked reasons。
   - V10.360 收斂瀏覽器自動開啟與 PChome 熱路徑：`tests/test_image_fetch.py` 改成 `RUN_MOMO_BROWSER_TESTS=1` 才會跑，預設 headless 且關閉 Chrome 密碼管理，避免一般 pytest 自動打開 MOMO 網站與觸發密碼允許提示；scheduler Selenium 同步關閉 password manager/autofill；PChome coverage/review queue 熱查詢改用 `JOIN LATERAL` 取 active 商品最新價，並補 Dashing Diva 品線召回搜尋詞。
   - V10.359 導入 Browse.sh 可選爬蟲診斷與強化 MOMO/PChome 色號比對：新增 `BrowseShTool` wrapper、probe CLI 與操作手冊，讓 browse.sh 只作 selector/XHR/network trace 探勘、不進正式 scheduler；matcher 補護甲油/洗手慕斯/足膜精準搜尋詞，保留小數規格，並對唇釉、妝前乳、素顏霜等顯性色號/色系不一致候選做 hard veto，避免同系列不同色號污染正式價差。
   - V10.358 補市場情報 MCP 啟用證據審核：新增 `mcp_activation_evidence` read-only builder、GET/POST endpoint、UI redacted evidence 審核面板與 deployment readiness smoke target，讓操作員貼上 env/health/router/telemetry/fallback 證據後判斷能否補齊 external/internal MCP runtime 缺口；API/UI 不保存 payload、不打 health、不啟動 MCP、不執行 docker/SSH、不開 DB、不抓外站、不掛 scheduler，且會阻擋真實 secret 字串與任何 DB write/fetch/scheduler 證據。
   - V10.357 補市場情報 MCP 完整度稽核：新增 `mcp_completion_audit` read-only builder、GET endpoint、UI 面板與 deployment readiness smoke target，彙整外部 MCP design/runtime、內部 tool contract/runtime、activation runbook 與 fetch gate 狀態；API/UI 不啟動 MCP、不打 health、不執行 docker/SSH、不開 DB、不寫檔、不抓外站、不掛 scheduler。
   - V10.356 補市場情報 candidate queue review AI summary Telegram dispatch report catalog record final closeout gate：新增 read-only report catalog record final closeout builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 archive summary gate 後覆核 catalog record identity、artifact traceability、sections、DB commit/post-write smoke、pipeline complete 與無後續 follow-up；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不 commit、不更新 review_state、不掛 scheduler。
   - V10.355 補市場情報 candidate queue review AI summary Telegram dispatch report catalog record archive summary gate：新增 read-only report catalog record archive summary builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 archive gate 後整理 catalog record identity、artifact traceability、DB commit/post-write smoke、archive manifest/retention policy 與後續 final closeout separate gate；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不 commit、不更新 review_state、不掛 scheduler。
   - V10.354 補市場情報 candidate queue review AI summary Telegram dispatch report catalog record archive gate：新增 read-only report catalog record archive builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 closeout gate 後審核 closeout/commit/run receipt/writer output/post-write smoke/backup 封存證據、archive manifest/retention policy 與後續 archive summary separate gate；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不 commit、不更新 review_state、不掛 scheduler。
   - V10.353 補市場情報 candidate queue review AI summary Telegram dispatch report catalog record closeout gate：新增 read-only report catalog record closeout builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 commit gate 後審核 catalog record identity、DB commit/post-write smoke 證據、操作員 closeout 確認與後續 archive separate gate；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不 commit、不更新 review_state、不掛 scheduler。
   - V10.352 補市場情報 candidate queue review AI summary Telegram dispatch report catalog record commit gate：新增 read-only report catalog record commit builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 run receipt 後審核外部 CLI catalog record DB commit、post-write smoke、操作員 commit gate 確認與後續 closeout separate gate；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不 commit、不更新 review_state、不掛 scheduler。
   - V10.351 補市場情報 candidate queue review AI summary Telegram dispatch report catalog record run receipt：新增 read-only report catalog record run receipt builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 run readiness 後審核外部 CLI writer output、catalog record key/hash、DB commit receipt 與 post-write smoke；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不 commit、不更新 review_state、不掛 scheduler。
   - V10.348 補市場情報 candidate queue review AI summary Telegram dispatch report catalog record run readiness：新增 read-only report catalog record run readiness builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 run package 後檢查 payload manifest、manual CLI command、backup/dry-run、run receipt 與 postwrite smoke 條件；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不更新 review_state、不掛 scheduler。
   - V10.347 補市場情報 candidate queue review AI summary Telegram dispatch report catalog record run package：新增 read-only report catalog record run package builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 record write gate 後整理 payload manifest、CLI command bundle、backup/dry-run trace 與後續 run readiness separate gate；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不更新 review_state、不掛 scheduler。
   - V10.344 補市場情報 candidate queue review AI summary Telegram dispatch report catalog record write gate：新增 read-only report catalog record write builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 write preflight 後檢查 catalog record key/schema/hash trace、operator dry-run、backup 與 commit separate gate；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不寫 catalog record、不更新 review_state、不掛 scheduler。
   - V10.342 補市場情報 candidate queue review AI summary Telegram dispatch report catalog write preflight：新增 read-only report catalog write preflight builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 report catalog index 後整理 catalog record identity、write source trace、record schema preflight 與 runtime safety，只放行到後續 report catalog record write gate；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫 catalog preflight file、不寫 catalog record、不更新 review_state、不掛 scheduler。
   - V10.339 補市場情報 candidate queue review AI summary Telegram dispatch report catalog index：新增 read-only report catalog index builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 report catalog handoff 後整理 catalog index identity、handoff source trace、index manifest 與 runtime safety，只放行到後續 report catalog write preflight gate；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫 catalog index file、不寫 catalog record、不更新 review_state、不掛 scheduler。
   - V10.338 補市場情報 candidate queue review AI summary Telegram dispatch report catalog handoff：新增 read-only report catalog handoff builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 report archive summary 後整理 catalog identity、artifact manifest、section keys 與 hash traceability，只放行到後續 report catalog index gate；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫 catalog record、不更新 review_state、不掛 scheduler。
   - V10.335 補市場情報 candidate queue review AI summary Telegram dispatch report archive summary：新增 read-only report archive summary builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 report archive 後整理 report identity、archive traceability、integrity review 與 runtime safety sections，只放行到後續 report catalog handoff gate；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不更新 review_state、不掛 scheduler。
   - V10.334 強化 MOMO/PChome 核心比價第二波：matcher 補常見品牌 alias、任選/平輸/國別 noise 收斂、刀把/刀片/刀頭等件數解析與系列衝突硬否決，避免 Gillette/Schick 同品牌不同系列或刀片數被誤當同款；新增近門檻候選重新評分流程，會把舊 low_score 中 0.70 以上且非 hard veto、有 PChome product_id 的候選先批次重評，再補抓高價未配對商品；商品看板新增 PChome 補抓產線狀態卡，顯示 run id 階段、成功/低信心/無結果/挑品寫入與錯誤，不再讓核心比價補抓變成黑盒。
   - V10.333 補市場情報 candidate queue review AI summary Telegram dispatch report archive：新增 read-only report archive builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 report closeout 後審核 archive/closeout/receipt/report output artifact path、hash/章節、archive manifest、retention policy 與後續 archive summary separate gate；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不更新 review_state、不掛 scheduler。
   - V10.332 補市場情報 candidate queue review AI summary Telegram dispatch report closeout：新增 read-only report closeout builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 report run receipt 後審核 closeout artifact、receipt/report artifact path、hash/章節覆核、後續 report archive separate gate 與 runtime boundary；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不更新 review_state、不掛 scheduler。
   - V10.331 強化 PChome 比價 matcher 邊界：正式端 pilot 先刷新 30 筆過期 identity_v2、補抓 15 筆高價未配對 SKU，確認 structured diagnostics 開始寫入；針對「同品牌、同核心多組件、無任何否決理由、價格正常」但因規格文字不完整卡在 0.74x 的候選，新增 strong_component_line_match 窄門補分，避免 Gennies 類完整套組被誤留在低信心，同時維持雙入組對單品、容量衝突、不同品牌與補充瓶硬否決。
   - V10.330 補市場情報 candidate queue review AI summary Telegram dispatch report run receipt：新增 read-only report run receipt builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 report run readiness 後審核人工/獨立 job 產出的 report receipt、artifact path/hash、必要章節、summary hash 與 runtime boundary；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不更新 review_state、不掛 scheduler。
   - V10.329 優化 `/growth_analysis` 冷快取策略：source fingerprint 未變時，成長分析共享快取由 30 分鐘延長為 6 小時有效；每日匯入仍會主動清除快取，避免資料更新後沿用舊圖表，同時降低正式端重啟或冷 worker 重新掃 `realtime_sales_monthly` 的 14 秒級等待。
   - V10.328 強化 MOMO/PChome 核心比價準確性第一波：補高頻品牌 alias、中文商品線 bigram 訊號、保健/包裝同義單位與買送件數解析，搜尋詞改為品牌/核心/主規格三層；PChome 比對嘗試與正式快照補存 URL、圖片、庫存與結構化 diagnostics，商品列表用 tone 分流顯示尚未搜尋、低信心、身份否決、單位價與過期狀態，不再把不同問題全部壓成灰色待比對；同步持久化首頁 / PChome coverage 熱路徑索引，避免重開機後慢查詢回歸。
   - V10.327 補 OpenClaw fallback 可觀測性：週報、月報、Meta、日報洞察、每日報告的 Gemini/NIM 備援 caller 納入 caller registry、AI 觀測台 agent group 與 Telegram 狀態統計，並補 MCP collector Ollama-first regression test，避免 fallback 真實使用量在觀測層被歸類成未知或漏算。
   - V10.326 補市場情報 candidate queue review AI summary Telegram dispatch report run readiness：新增 read-only report run readiness builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 report run package 後整理 report generation readiness manifest、manual report command boundary、artifact path gate 與後續 report run receipt gate；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不派送 Telegram、不開 DB、不寫檔、不產報表、不更新 review_state、不掛 scheduler。
   - V10.325 收斂 Gemini 主路徑：OpenClaw 週/月/meta/日報洞察、Telegram PPT 分析與 MCP fallback 全部改成先走 OllamaService 的 GCP-A → GCP-B → 111 三主機級聯；Gemini 只在 Ollama/NIM 不可用後作備援。Elephant Alpha resource_optimization 告警補上待處理 action_plans 焦點列表，避免只報隊列數字卻沒有可執行對象。
   - V10.324 補市場情報 candidate queue review AI summary Telegram dispatch report run package：新增 read-only report run package builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 report input 後整理 run package contract、evidence refs、package sections 與後續 report run readiness gate；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不派送 Telegram、不開 DB、不寫檔、不產報表、不更新 review_state、不掛 scheduler。
   - V10.323 收斂市場情報 seed writer token hardening drift：正式端 service smoke 已確認 `seed_writer_cli_status` 不再回吐 `approval_token_hint`、不洩漏環境 token；輸出補 `api_reads_approval_token=false`、`api_executes_cli=false`、`api_writes_database=false`，讓 API/CLI 邊界可被 regression test 與 smoke 明確驗證。
   - V10.322 修正 Telegram 決策/審核推播舊入口：`price_decision_notify()` 改用 `send_telegram_with_result()` 統一套用 HTML sanitizer 與多 chat 結果彙整，並補齊 `price_decision(report_url=...)` 相容；RAG awaiting review 推播改用正確 `chat_ids=[...]` 呼叫，避免 Stage 4 人工審核按鈕因參數名錯誤完全送不出去。
   - V10.321 修正 Telegram HTML 發送格式：所有 `sendMessage` / `sendPhoto` caption 在 HTML parse mode 送出前會把 `<br>` / `<br/>` / `<BR />` 統一轉成換行，避免 Telegram Bot API 回 `Unsupported start tag "br"` 造成告警或報告送出失敗。
   - V10.320 補市場情報 candidate queue review AI summary Telegram dispatch report input：新增 read-only report input builder、獨立 report route extension、UI 按鈕與 deployment readiness smoke target，在 archive summary 後整理 report input sections、report contract、message evidence 與 dispatch audit traceability；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不派送 Telegram、不開 DB、不寫檔、不產報表、不更新 review_state、不掛 scheduler。
   - V10.319 補市場情報 candidate queue review AI summary Telegram dispatch archive summary：新增 read-only archive summary builder、POST endpoint、UI 按鈕與 deployment readiness smoke target，在 Telegram dispatch archive 後整理 message identity、dispatch audit、artifact manifest 與後續 report input sections；API/UI 不讀 approval/Telegram token、不呼叫 LLM、不派送 Telegram、不開 DB、不寫檔、不更新 review_state、不掛 scheduler。
   - V10.318 收緊 Elephant Alpha HITL 告警治理：`ea_escalation` 只有真正含 SKU/價格比較的 actions 才排成 TOP 待審 SKU 卡片；非 SKU 診斷改為「待確認事項」，並用測試鎖住價格類低信心但無 DB/Hermes 實證時只 suppress、不寫 human_review、不發 Telegram，避免空泛告警打擾人工審核。
   - V10.317 修正 PChome 比價覆蓋率分子：`fetch_competitor_coverage()` 的 valid_matches 改成 `ACTIVE + 有 MOMO 最新價` 商品與有效 PChome `identity_v2` 價格的交集，不再把非活躍或無 MOMO 現價的舊 competitor_prices 列入覆蓋率，避免 daily/growth/PPT/AI 報表高估比價資料品質。
   - V10.315 修正競品簡報/報表指定日期取價：`fetch_competitor_comparison_results()` 在有 start/end date 時改讀 `competitor_price_history` 的期間快照，MOMO 價格也取期間結束前最新價；沒有指定日期才使用目前有效 `competitor_prices`，避免把今天的 PChome 快取價塞回歷史 daily/growth/PPT 判讀。
   - V10.314 擴大 PChome 候選池與搜尋韌性：PChome 搜尋 API 改為依 limit 掃多頁並對 429/5xx/timeout 做有限重試；feeder 預設每個商品最多 5 組搜尋詞、每詞 20 候選、2 頁，且搜尋清理不再刪掉括號/方括號內的品牌與規格，讓正確候選更有機會進 matcher，而不是長期停在「待對比」。
   - V10.312 強化 PChome 商品身份比對防錯配：matcher 開始解析 mg/mcg 劑量、件組套組與多規格集合，60ml+150ml vs 60ml+20ml、10mg vs 20mg、10片 vs 10盒、精華 vs 化妝水都會進硬否決或單位價覆核，不再靠單一規格重疊放行；覆核診斷同步新增「劑量差異」標籤，降低核心比價錯配污染 daily/growth/PPT/AI 分析。
   - V10.311 統一競品價差語意：`fetch_competitor_comparison_results()`、competitor PPT 與 OpenClaw competitor prompt 全部改用 `MOMO - PChome`，正值代表 MOMO 較貴 / PChome 低價壓力，負值代表 MOMO 價格優勢；避免 daily/growth 顯示價格壓力但 PPT/AI 反向解讀。
   - V10.310 強化 MOMO/PChome 核心比價閉環：PChome feeder 搜尋候選只有強同款 `0.90` 才提前停止，避免第一個 0.76 次佳候選卡掉後續精準搜尋詞；人工否決的候選會被跳過並改挑下一個候選，不再讓已否決商品長期阻塞同 SKU。人工 `reject_identity`、`unit_price_required`、`needs_research` 會立即讓同候選正式 `competitor_prices` 過期，Dashboard 即使尚有舊價也不再顯示正式總價差；手機版比價覆核欄位標籤、覆核按鈕冒泡與候選證據顯示同步修正。
   - V10.308 修正商品列表 PChome 比價閉環狀態：`manual_rejected`、`manual_unit_price_required`、`manual_needs_research` 不再掉回籠統「待比對」，改顯示「人工已否決 / 人工標記單位價 / 人工要求補搜尋」與後續 feeder 行為說明，避免人工覆核後 UI 看起來像沒有處理。
   - V10.307 將 PChome 人工覆核成效接進 daily/growth/PPT 共用資料出口：`fetch_competitor_coverage()` 讀取 `competitor_match_reviews` 最新決策，輸出人工採用、人工否決、人工單位價與採用率；`daily_sales` 與 `growth_analysis` 的比價資料品質區塊直接顯示這些閉環指標，讓報表與簡報不只看待審數，也能看人工處理成效。
   - V10.305 將 PChome 人工覆核回饋接回 feeder：下一輪搜尋若命中已被 `reject_identity` 否決的同一候選，會記錄 `manual_rejected` 並跳過正式寫入；已被標記 `unit_price_required` 的候選只保留單位價比較，不寫入正式總價差；人工 `accept_identity` 可保守覆蓋低分門檻但會打 `manual_review/manual_accept` 標籤，讓核心比價閉環可被後續報表與簡報追蹤。
   - V10.304 補 PChome 比價人工覆核決策閉環：新增 `competitor_match_reviews`、`/api/pchome-review/<sku>/decision` 與商品看板覆核列「採用同款 / 否決候選 / 標記單位價」動作；只有人工採用同款才寫入 `competitor_prices` + `competitor_price_history`，否決與單位價標記只追加 manual attempt 並關閉本輪覆核，避免錯配污染核心價差。
   - V10.302 補 PChome 比價覆核匯出與診斷原因：`filter=pchome_review` 每筆覆核把 matcher `reasons=` 翻成品牌不符、商品線不符、容量差異、組合差異、需單位價、價差極端等可行動標籤；新增 `/api/export/excel/pchome-review` 匯出完整覆核隊列、人工處置、候選 PChome、單位價比較與原始診斷，避免核心比價只停在籠統「待對比」。
   - V10.301 補市場情報 candidate queue review AI summary Telegram dispatch gate：新增 `/api/market_intel/manual_sample_review/candidate_queue_review_ai_summary_persistence_telegram_dispatch_gate` 與 UI 按鈕，在 summary persistence closeout 後檢查 Telegram 訊息契約、channel label、artifact path、token 外洩風險與後續 run package promotion；API/UI 仍不讀 approval/Telegram token、不呼叫 LLM、不開 DB、不寫檔、不派送 Telegram、不掛 scheduler。
   - V10.300 補商品看板比價覆核狀態分流：`filter=pchome_review` 新增全部、需單位價、身份否決、低信心、價格過期、找不到同款 segmented 篩選與分頁保留參數，讓 6,000+ 筆覆核隊列能依 matcher 診斷類型分批處理；同步修正覆核列表表頭/分頁連結狀態保留。
   - V10.299 補市場情報 candidate queue review AI summary persistence run closeout：新增 `/api/market_intel/manual_sample_review/candidate_queue_review_ai_summary_persistence_run_closeout` 與 UI 按鈕，在 receipt 通過後收尾 metadata_json persistence gate，確認 closeout artifact、操作員確認與後續 Telegram dispatch 必須另開 gate；API/UI 仍不讀 approval token、不執行 CLI、不連 DB、不寫 `metadata_json`、不派送 Telegram、不掛 scheduler。
   - V10.298 補市場情報 candidate queue review AI summary persistence run receipt：新增 `/api/market_intel/manual_sample_review/candidate_queue_review_ai_summary_persistence_run_receipt` 與 UI 按鈕，審核操作員貼回的 metadata_json CLI writer output、post-write smoke、dedupe key、summary payload hash、artifact path 與 token 外洩風險；API/UI 仍不讀 approval token、不執行 CLI、不連 DB、不寫 `metadata_json`、不派送 Telegram、不掛 scheduler。
   - V10.297 將 PChome 單位價覆核隊列接回商品看板第一屏：KPI 顯示待處理/需單位價覆核數，焦點區列出候選 PChome 商品、候選價、match score 與人工動作；新增 `filter=pchome_review` 的比價覆核隊列，讓使用者可直接進入待處理 SKU，不再只在 daily/growth/PPT 摘要看到統計。
   - V10.296 補核心 MOMO/PChome 比價第三層語意與覆核閉環：同核心商品但買送、套組、件數不同且只有單一基礎規格時標記 `unit_comparable`，只寫入 `competitor_match_attempts`；商品看板、daily/growth 報表、OpenClaw/PPT 摘要共用 `competitor_intel_repository` 的覆核隊列，顯示「需單位價比較」、候選商品、候選 PChome 價格與單位價換算證據；多容量/多品項套組仍保持不可比較，避免把不同販售組合直接寫進正式總價差。
   - V10.289 重排 Elephant Alpha L3 HITL `ea_escalation` Telegram 告警：改成專業 incident brief 格式，分成決策狀態、背景摘要、風險摘要、TOP 待審 SKU 與建議處置；價格行動會拆出 MOMO/PChome 價格、價差、人工處置與 PChome ID，避免長 bullet 難讀。
   - V10.284 關閉 Code Review Hermes LLM scan 預設路徑：Step 2 改 deterministic fast static scan，不再讓部署後先卡三段 Ollama timeout；若需要 LLM scan 可用 `CODE_REVIEW_HERMES_LLM_SCAN_ENABLED=true` 顯式開啟，仍只走本地矩陣、不走 Gemini。
   - V10.283 將 Code Review Hermes scan 收斂為 fast compact prompt：預設 2 檔 × 900 字、輸出 384 tokens，仍走 GCP-A → GCP-B → 111 本地矩陣，避免部署後 code_review_hermes 先卡三段 timeout。
   - V10.282 補齊 Code Review Hermes scan 本地模型矩陣：掃描階段也走 GCP-A `qwen2.5-coder:7b` → GCP-B `gemma3:4b` → 111 `hermes3:latest`，避免 `hermes3` 在三主機各卡 35s 後只留下 error；Hermes scan 不會啟用 Gemini。
   - V10.281 強化 Code Review OpenClaw 本地備援矩陣：主機順序仍為 GCP-A → GCP-B → 111，但改成 GCP-A `qwen2.5-coder:7b`、GCP-B `gemma3:4b`、111 `hermes3:latest`，三段本地 Ollama 全失敗後才允許 Claude/Gemini 備援。
   - V10.279 收斂 Code Review Ollama-first 路徑：OpenClaw assessment 預設改 `qwen2.5-coder:7b` + 45s/host timeout，Hermes scan 改 compact snippet + 35s/host timeout，避免三主機各卡 120s 後被迫觸發 Gemini 備援。
   - V10.278 補 PChome 競價摘要 30 分鐘共享快取與 feeder/backfill 主動清除，並新增市場情報 `candidate_queue_review_ai_summary_preflight` 預覽 gate；API 只檢查未來摘要輸入與 Ollama-first/Gemini-backup-only policy，不呼叫 LLM、不派 Telegram、不寫 DB、不掛 scheduler。
   - V10.276 修正 ElephantAlpha 價格類 Hermes prefetch timeout：`price_drop` / `market_opportunity` trigger 直接把 SQL 命中的 MOMO / PChome 價差實證轉成 HITL action lines，完整 Hermes LLM prefetch 預設關閉；無 DB 實證仍只記 suppressed telemetry / cooldown，不寫 `human_review`、不發空 Telegram。
   - V10.266 強化核心 MOMO/PChome 比價鏈路：新增 `marketplace_product_matcher.py` 身份比對、只讓 `identity_v2` 且分數 ≥ 0.76 的高信心配對進 Dashboard/AI/Excel/Daily/Growth/PPT，並建立 `competitor_intel_repository.py` 統一圖表與簡報資料出口；同品牌但不同型號、不同組數、套組/單品或多品項不一致會進待審，不進正式比價。
   - V10.267 專業化 ElephantAlpha `resource_optimization` 告警：不再讓 LLM 生成「48 小時預期效益 / 已執行」敘事，改由程式量測 action queue、P1/P2、pending_review、逾時項目與 CPU load；單純 backlog 不發 Telegram，只有可行動資源壓力才寫 `ai_insights(resource_pressure)` 並發送量測型告警。
   - V10.254 續補 `/growth_analysis` 快取命中效能：PostgreSQL source fingerprint 加 60 秒短 TTL，匯入 realtime_sales_monthly 後同步清除 growth shared cache 與短快取，避免快取命中仍頻繁掃大表 COUNT。
   - V10.253 修正 Elephant Alpha L3 HITL 空告警：價格類與資源調配低信心事件若沒有 Hermes/實證資料，只記 suppressed telemetry 與 cooldown，不寫 pending human_review、不發 Telegram；`resource_optimization` 會保留 queue/load 原始指標供追查。
   - V10.251 修正 OpenClaw Q&A 備援遙測：Ollama 主路徑仍為 GCP-A → GCP-B → 111，Gemini 只記為 `openclaw_qa_gemini_fallback`，NIM 只記為 `openclaw_qa_nim`；AI Calls 會把 legacy `openclaw_qa + gemini` 標成 Gemini 備援，避免再次誤判 Gemini-first。
   - V10.251 穩定 `/growth_analysis` 正式站速度：成長分析快取從單 worker memory 擴充為 `data/growth_analysis_cache.pkl` 跨 worker 共享快取，避免 Gunicorn 冷 worker 偶發掃明細表造成 5 秒級 TTFB；補 `tests/test_cache_manager.py` 覆蓋 shared file roundtrip 與清除行為。
   - V10.249 收斂 `/observability/ppt_audit_history` 手機與平板第一屏密度：將 4 個產線訊號從 hero 內移出成獨立狀態列，手機版維持 2 欄狀態卡並降低 hero 卡片間距；本機 10 個 AI 觀測台頁面 rendered visual contract 全數通過，PPT 頁 hero 高度 desktop/tablet/mobile 為 214/361/398px。
   - V10.246 強化 `/observability/ppt_audit_history` 視覺 QA runtime 可讀性：功能開關、轉檔器與視覺模型改成中文 checklist，Vision QA 狀態卡直接顯示 runtime 就緒資訊，DB 產出狀態統一為「已產出」。
   - V10.245 重整 `/observability/ppt_audit_history` 首屏資訊階層：改成簡報操作摘要、最新可預覽簡報、下一步動作與自適應報表類型 segmented grid；產線覆蓋矩陣改為下方驗收明細，避免一進頁只看到大量「產線狀態」或類型按鈕右側溢出。
   - V10.242 修正 `/metabase`、`/grist` 外部工具入口：全域導覽固定回 momo-pro 內部橋接頁，避免資料協作錯連其他專案站；入口頁補路由狀態、設定診斷與可用替代分析入口，降低空白頁誤判。
   - V10.221 補 `/observability/ppt_audit_history` AiderHeal 背景任務可見性：正在修復中的簡報會顯示於產線頁，並提供 JSON 狀態端點讓派工後即時刷新，避免重新整理後不知道是否已在修。
   - V10.218 補 `/observability/ppt_audit_history` AiderHeal 去重鎖：同一份簡報已在背景修復時，再次點擊會回「已在執行中」，避免重複開 SSH / 模型 / git 修復流程。
   - V10.217 讓 `/observability/ppt_audit_history` 的 AiderHeal 派工改為非阻塞背景任務：頁面立即回「已排入」，修復工作在背景執行，避免瀏覽器與 Gunicorn worker 等 SSH、模型與 git push 到超時。
   - V10.216 修正 `/observability/ppt_audit_history` 的 AiderHeal 派工斷點：失敗簡報即使只有 `issues_found` 診斷摘要也能一鍵送修，並修正 `execute_code_fix` 參數與 dict 回傳解析，避免按鈕 400/500。
   - V10.215 強化 `/observability/ppt_audit_history` 視覺問題追蹤：將 `issues_found` 拆成投影片、問題類型、問題文字與回放入口，新增「視覺問題追蹤」面板，讓問題簡報能直接定位與預覽。
   - V10.213 補 `/observability/ppt_audit_history` 視覺 QA 診斷摘要：審核歷史與 Action Queue 直接顯示 `ppt_audit_results.issues_found` 的投影片問題，讓「有問題」可追查，不再只剩問題數或空白錯誤欄。
   - V10.212 修正 PPT 視覺 QA 的 Ollama 三主機 fallback：當 Primary/Secondary request timeout 超過 unhealthy TTL 時，第三輪仍強制打 111 final fallback；PPT 截圖送模型前轉輕量 JPEG、縮小輸出 token，降低單檔審核耗時。
   - V10.211 補 `/observability/ppt_audit_history` 全類型視覺 QA：審核歷史不再限 daily，頁面新增「立即視覺 QA」非阻塞補跑，結果寫入 `ppt_audit_results`；模型失敗時也保留 slide error，避免產線狀態只剩空白。
   - V10.210 補 `/observability/ppt_audit_history` 審核歷史同頁回放：每筆 daily 視覺審核紀錄的動作欄新增「回放」按鈕，沿用 PDF 預覽抽屜並保留下載/開新頁，讓問題追查不必再回檔案表找簡報。
   - V10.208 修正 `/observability/ppt_audit_history` 同頁預覽抽屜 selector：Modal 標題改用獨立 `data-ppt-preview-modal-title`，避免與多個預覽連結的資料屬性衝突。
   - V10.207 強化 `/observability/ppt_audit_history` 同頁線上預覽：所有可預覽簡報按鈕改為開啟頁內 PDF 預覽抽屜，保留開新頁與下載，降低產線頁來回跳轉成本並改善手機操作。
   - V10.205 補 `/observability/ppt_audit_history` 本頁批次 PDF 預熱：Preview Workbench 可一鍵預熱頁面上尚未快取的 PPTX，沿用單檔 JSON 端點逐一建立 PDF 快取並即時更新狀態。
   - V10.203 補 `/observability/ppt_audit_history` 單檔 PDF 預熱操作：未快取的可預覽 PPTX 會顯示「預熱 PDF」，透過 JSON 端點建立 PDF 快取並即時更新頁面狀態。
   - V10.201 強化 `/observability/ppt_audit_history` 線上預覽可診斷性：產線清單不觸發轉檔即可顯示 PDF 預覽快取狀態，Pipeline Health、Preview Workbench 與已產檔案表同步標記「PDF 快取 / 首次轉檔」。
   - V10.199 讓 `/observability/ppt_audit_history` Action Queue 可直接處理異常：待補齊與異常優先項目新增單一報表「重跑」按鈕，透過既有非阻塞背景產線排入指定 report_type。
   - V10.197 強化 `/observability/ppt_audit_history` Action Queue：新增「異常優先」lane，將產出失敗、PPTX 檔案異常、視覺 QA 失敗拉到最前面，並顯示錯誤訊息與可預覽入口。
   - V10.196 補 `/observability/ppt_audit_history` Action Queue：把待補齊、可預覽、視覺 QA、DB 寫入集中成工作隊列，讓使用者不用在多張卡與表格間找下一個處理點。
   - V10.194 重整 `/observability/ppt_audit_history` 產線資訊階層：新增 Pipeline Health、五段式流程階段、排程/覆蓋/DB/預覽/視覺 QA 狀態摘要，讓「已產生」改為可判斷的目標產生、其他版本、待排程補齊等狀態。
   - V10.192 補 `/observability/ppt_audit_history` 最近可預覽簡報 workbench：最新 4 份 PPT 直接在控制台下方提供線上預覽與下載，降低使用者找檔案的操作成本；完整檔案清單仍保留在下方表格。
   - V10.190 補 `/observability/ppt_audit_file/<filename>` 站內線上預覽：PPTX 由 LibreOffice 轉 PDF 快取後以 iframe 預覽，保留原始 PPTX 下載；Dockerfile 加 `libreoffice-impress`，compose 預設啟用 `PPT_VISION_ENABLED=true`，PPT 產線頁新增視覺 QA 停用原因與更精簡的控制台式排版。
   - V10.188 補強 `/observability/ppt_audit_history` PPT 視覺 QA 產線：頁面明確呈現每日、每週、每月、每季、每半年、每年定期產出節奏，並顯示 `ppt_generation_runs` DB 寫入紀錄；保留自動補齊缺漏與資料庫/檔案覆蓋狀態。
   - V10.187 修正 `/daily_sales`、`/growth_analysis` 圖表空白：Chart JSON 改從 `<template>.content.textContent` 讀取，補空資料診斷狀態；成長分析改用 realtime 明細新鮮度覆蓋過期月結摘要，並為 growth cache 加入資料指紋。
   - V10.151 接續前端 V3 全站 UI/UX：廠商缺貨 `/vendor-stockout/vendor-management`、`/vendor-stockout/send-email`、`/vendor-stockout/history` 改走新版 `ewoooc_base.html` shell 與 `page-vendor-tools.css`，移除舊紫藍 navbar/live route。
   - V10.151 補 `/abc_analysis/detail` 新版 ABC 詳情頁與安全 loading state，移除 raw HTML fallback，資料表維持正式快取資料來源與匯出連結。
   - V10.151 補 `/login` 新版登入頁：暖紙背景、點陣視覺、EwoooC 品牌、手機版 390px 無水平 overflow。
   - V10.151 本機全站 responsive overflow guard 通過 147/147；`?ui=legacy` 入口已不再回到舊 `dashboard.html` / `edm_dashboard.html` / vendor legacy templates。
   - 新版設計系統資產已落到正式 Flask static path：`web/static/css/ewoooc-tokens.css`、`web/static/css/ewoooc-shell.css`、`web/static/css/ewoooc-dotmatrix.css`、`web/static/css/page-*.css` 與對應 `web/static/js/page-*.js`。
   - V3 page-level 資產已補做設計規範清理：移除 UI 表面殘留 radial-gradient / pure-white rgba / `bg-white` header，AI 推薦頁 keyword 狀態改用語意 class。
   - `ewoooc_base.html` 補 `extra_head` / `content` / `extra_scripts` 相容 block，支援新版包混用 block 命名，避免頁面空白或互動 JS 不輸出。
   - Base CSS 載入順序已補齊 `ewoooc-tokens-v2-alias.css`，符合 V3 spec 的 tokens → alias → shell → dotmatrix 順序。
   - `_ewoooc_shell.html` 更新為 V3 側欄結構，保留正式路由連結與 AI 觀測台完整導覽 label。
   - 高風險替換已退回：`dashboard_v2.html` 與 `templates/admin/*` 觀測台頁保留現行真實功能版，拒絕使用會移除 PChome / AI 挑品 / 歷史價格 / 觀測台真實資料的 prototype 空殼。
   - AI 觀測台 CSS canonical 與 Flask mirror 已通過同步檢查：`./scripts/quick_review.sh --check-observability-css`。
   - AI 觀測台 UI guard 已更新為 V3 token 化規範，不再要求舊版 sidebar 漸層片段，並通過 `./scripts/quick_review.sh --observability-ui`。
   - 新增 ADR-036：FastAPI 可作為 strangler migration 中期方向，但不得作為前端 V3 前置條件；後端重構先抽 service 與補 contract，不做 Flask→FastAPI 大爆炸。
   - `/sales_analysis` 修正 V3 首次進頁 JSON context 合約：`category_data` 與模板 fallback 補齊，避免 Jinja `Undefined` 進入 `tojson` 造成 error handler。
   - 本機瀏覽器 QA 完成：`/sales_analysis`、`/daily_sales`、`/monthly_summary_analysis`、`/ai_recommend`、`/auto_import`、`/vendor-stockout/*` 均載入 V3 shell、無錯誤 banner、console error 0。
   - 正式環境已推版：白名單同步 55 個 V3 runtime 檔案與 `config.py` 版本號，僅 recreate `momo-app`，未碰 `momo-db`、未使用 `--remove-orphans`；`https://mo.wooo.work/health` 回報 V10.91，V3 頁面 smoke 與觀測台 production QA 均通過。
   - 版本同步至 V10.91。
   - 依使用者截圖回饋修正 `/daily_sales`：KPI 改為首屏摘要格、日曆密度提升、桌機 1440 與手機 390 均無整頁水平 overflow。
   - 依使用者截圖回饋修正 `/edm`：寬螢幕內容最大寬度調整至 1600px、活動表格限制在局部 scroll container、手機版無整頁水平 overflow。
   - 新增 `scripts/check_v3_responsive_ui.js`，覆蓋 23 個主要 route 的 desktop/mobile responsive smoke；本機通過 46/46。
   - 移除 V3 主要頁面 CSS 內殘留負字距，符合新版排版規範。
   - 版本同步至 V10.92。
   - 正式環境 V10.92 已白名單部署：備份 `/tmp/codex_v3_1092_predeploy_20260512_164549.tgz`，只 recreate `momo-app`，未碰 `momo-db`、未使用 `--remove-orphans`。
   - 正式驗證通過：`https://mo.wooo.work/health` 回報 V10.92，觀測台 production QA PASS，23 個主要 route 的 desktop/mobile responsive smoke 46/46 PASS。
   - 人工視覺 QA 追修 `/growth_analysis` 手機 KPI 可讀性：KPI 卡片改為暖墨文字、左側 accent、明確數字層級，避免淡底反白造成首屏不可讀。
   - 版本同步至 V10.93。

【下次待辦】
   - V10.93 白名單部署後補正式 health 與 responsive smoke 結果。
   - 為 FastAPI strangler 補 endpoint inventory：先列 route owner、資料來源、auth/CSRF/session 需求與 smoke URL，再決定第一批可遷移 API。
   - `production_v3 3/templates/dashboard.html` 與 `production_v3 3/templates/observability/*` 不得直接覆蓋正式頁；需先補回真實資料功能後才可進入替換候選。

================================================================================
                 跨平台市場情報模組 (ADR-035 / 2026-05-06) [IN PROGRESS]
================================================================================

【已完成】
   - ADR-035：定義跨平台市場活動情報系統、feature flags、market_* schema、爬蟲安全邊界與分階段 rollout。
   - 模組化盤點：更新 `docs/memory/code_modularization_inventory_20260430.md`，標記市場情報不可塞回 `app.py`、`scheduler.py`、`routes/sales_routes.py` 等大檔。
   - Phase 1 安全骨架：新增 `routes/market_intel_routes.py`、`services/market_intel/`、`templates/market_intel/disabled.html`，預設只顯示 disabled 狀態。
   - Phase 2 schema 骨架：新增 `database/market_intel_models.py`，定義 `market_platforms`、`market_campaigns`、`market_campaign_snapshots`、`market_campaign_products`、`market_product_price_history`、`market_product_matches`、`market_crawler_runs`。
   - Metadata 守門：`database/manager.py` 顯式 import market_intel models，`app.py` expected metadata tables 已同步。
   - 安全開關：`.env.example` 補 `MARKET_INTEL_ENABLED=false`、`MARKET_INTEL_CRAWLER_ENABLED=false`、`MARKET_INTEL_WRITE_ENABLED=false`。
   - Phase 3 read-only adapter 骨架：新增 `services/market_intel/adapters/`，目前註冊 MOMO 與 PChome，僅回傳 discovery plan，不發 HTTP request、不寫 DB、不掛 scheduler。
   - Phase 4 手動 dry-run discovery：新增 `services/market_intel/discovery_runner.py` 與 `/api/market_intel/manual_discovery`。預設 `fetch=false` 只回 planned；`fetch=true` 也必須在 `MARKET_INTEL_ENABLED` 與 `MARKET_INTEL_CRAWLER_ENABLED` 同時開啟時才允許 HTTP，且仍不寫 DB、不掛 scheduler。
   - Phase 5 parser 診斷層：新增 `services/market_intel/html_diagnostics.py`，手動 fetch 成功後只萃取 title、page_hash、link count、campaign link candidates，不建立正式 campaign/product。
   - Phase 6 平台別 scorer：MOMO/PChome adapter 提供 URL/text 加權規則，diagnostics 同時輸出 generic_score 與 platform_score，仍只用於候選排序與人工診斷。
   - Phase 7 confidence bands：diagnostics 將候選標成 `high` / `medium` / `low`，並輸出 `confidence_reason`；只作人工審核提示，不自動建立活動。
   - Phase 8 candidate preview API：新增 `/api/market_intel/candidate_preview`，把本次 discovery diagnostics 候選合併排序，支援 `min_band` 與 `limit`，只供人工預覽，不入庫。
   - Phase 9 UI preview panel：`templates/market_intel/disabled.html` 讀取 `/api/market_intel/candidate_preview?fetch=false`，顯示安全空狀態與 flags，不做自動外部 fetch。
   - Phase 10 platform seed plan：新增 `/api/market_intel/platform_seed_plan`，只產生 adapter registry 對應的 `market_platforms` seed rows 與 gate 狀態，不寫 DB。
   - Phase 11 Coupang read-only adapter：新增 Coupang 酷澎 adapter，以官方台灣站與火箭跨境入口作為公開 discovery 起點，預設不發 request、不寫 DB、不掛 scheduler。
   - Phase 12 Shopee read-only adapter：新增 Shopee 蝦皮 adapter，以公開首頁與 Shopee Mall 入口作為 discovery 起點；不得登入、碰會員券、購物車、帳號池或反爬繞過。
   - Phase 13 platform seed write guard：新增 `/api/market_intel/platform_seed_write_guard`，只回報寫入前 gate 與阻擋原因，預設永遠不寫 DB。
   - Phase 14 platform seed writer dry-run：新增 `/api/market_intel/schema_smoke` 與 `/api/market_intel/platform_seed_writer_plan`，實際檢查 ORM metadata 並產生 parameterized upsert preview，不建立 session、不 commit。
   - Phase 15 writer preview panel：`templates/market_intel/disabled.html` 讀取 `/api/market_intel/platform_seed_writer_plan`，顯示 schema smoke、upsert preview 與 blocked reasons，仍不寫 DB。
   - Phase 16 deployment readiness panel：新增 `/api/market_intel/deployment_readiness` 與 UI「推版準備檢查」，明確回報尚未正式推版、尚未 commit/push、部署 SOP 與 production smoke 尚待人工執行。
   - Phase 17 deployment handoff checklist：`/api/market_intel/deployment_readiness` 補人工步驟、備援方案、安全部署邊界、production smoke targets 與 `python backup_system.py` 備份要求；UI 直接顯示，不執行任何 git/部署/DB 操作；版本同步至 V10.87。
   - Phase 18 write approval runbook：新增 `/api/market_intel/write_approval_runbook` 與 UI「正式寫入批准檢查」，列出 schema smoke、備份、migration review、feature flag、人工批准、rollback 等 gate；預設 `ready_for_real_write=false`、`database_session_created=false`、`database_commit_executed=false`；版本同步至 V10.88。
   - Phase 19 migration blueprint：新增 `/api/market_intel/migration_blueprint` 與 UI「Schema migration 草案」，產生 `migrations/032_market_intel_core_schema.sql` 建議內容、migration apply command shape 與 seed writer command design；預設 `file_created=false`、`migration_executed=false`、`database_commit_executed=false`，且 forward SQL 只允許 additive DDL；版本同步至 V10.89。
   - Phase 20 migration file draft：新增本地草稿檔 `migrations/032_market_intel_core_schema.sql`，blueprint API 會檢查檔案存在且內容與 blueprint 相符；仍然 `migration_executed=false`、`database_session_created=false`、`database_commit_executed=false`；版本同步至 V10.90。
   - Phase 21 seed writer CLI skeleton：新增 `scripts/market_intel_seed_writer.py`、`services/market_intel/seed_writer_cli.py` 與 `/api/market_intel/seed_writer_cli_status`；CLI 可輸出 seed writer blocked plan，但即使帶 `--execute` 與 approval token 也會拒絕真寫入，維持 `database_session_created=false`、`database_commit_executed=false`；版本同步至 V10.94。
   - Phase 22 app-only release gate：`/api/market_intel/deployment_readiness` 改為區分「安全檢查已可進 app-only 推版」與「API 不執行部署動作」；新增 `mode=app_only_release_gate`、`execution_boundary`，維持 `api_runs_migration=false`、`api_writes_database=false`、`production_deployed=false`；版本同步至 V10.95。
   - 正式環境 V10.95 已白名單部署：備份 `/tmp/codex_market_intel_v1095_predeploy_20260512_194041.tgz` 與 compose 備份 `/tmp/docker-compose.market-intel-v1095-mount-20260512_194827.yml`，同步 market_intel runtime 檔案並補 app-only `scripts/`、`migrations/` mount 後僅 recreate `momo-app`，未碰 `momo-db`、未使用 `--remove-orphans`；`https://mo.wooo.work/health` 回報 V10.95，market_intel schema/writer/readiness/migration/seed execute-block smoke 通過。
   - Phase 23 seed transaction preview：`/api/market_intel/seed_writer_cli_status` 內新增 `transaction_preview`，輸出 `market_platforms` idempotent upsert SQL template、parameter hash、diff 狀態與 runtime order；UI 新增「Seed CLI 交易預覽」panel；仍維持 `database_session_created=false`、`transaction_opened=false`、`database_commit_executed=false`；版本同步至 V10.96。
   - 正式環境 V10.96 已白名單部署：備份 `/tmp/codex_market_intel_v1096_predeploy_20260512_211619.tgz`，僅同步 market_intel runtime/docs/test 檔案並 recreate `momo-app`，未碰 `momo-db`、未使用 `--remove-orphans`；`https://mo.wooo.work/health` 回報 V10.96，`seed_writer_cli_status` dry-run/execute-block、deployment readiness 與正式頁 UI smoke 均通過。
   - Phase 24 read-only DB schema probe：新增 `/api/market_intel/schema_db_probe` 與 UI「正式 DB Schema 探針」panel；預設 `execute=false` 只回 planned、不連 DB，人工 smoke 才可用 `execute=true` 查正式 DB catalog；不使用 `DatabaseManager()`、不呼叫 `create_all()`、不建立 ORM session、不寫入、不 commit；版本同步至 V10.97。
   - 正式環境 V10.97 已白名單部署：備份 `/tmp/codex_market_intel_v1097_predeploy_20260512_214226.tgz`，僅同步 market_intel runtime/docs/test 檔案並 recreate `momo-app`，未碰 `momo-db`、未使用 `--remove-orphans`；`https://mo.wooo.work/health` 回報 V10.97，`schema_db_probe` planned/read-only execute、seed execute-block、deployment readiness 與正式頁 UI smoke 均通過。
   - Phase 25 platform seed DB diff probe：新增 `/api/market_intel/platform_seed_db_diff` 與 UI「平台 Seed DB 差異探針」panel；預設 `execute=false` 只回 planned、不連 DB，人工 smoke 才可用明確只讀參數比對 adapter seed 與 `market_platforms` 既有 rows；不使用 `DatabaseManager()`、不建立 ORM session、不寫入、不 commit；版本同步至 V10.98。
   - 正式環境 V10.98 已白名單部署：備份 `/tmp/codex_market_intel_v1098_predeploy_20260512_220309.tgz`，僅同步 market_intel runtime/docs/test 檔案並 recreate `momo-app`，未碰 `momo-db`、未使用 `--remove-orphans`；`https://mo.wooo.work/health` 回報 V10.98，`platform_seed_db_diff` planned/read-only execute、seed execute-block、deployment readiness 與正式頁 UI smoke 均通過；正式 DB 只讀 diff 顯示 `market_platforms` 目前 0 筆，四平台 seed 仍 missing，符合未正式寫入狀態。
   - Phase 26 platform seed CLI writer：`scripts/market_intel_seed_writer.py` 支援 CLI-only 受控寫入，必須同時帶 `--execute`、`--apply-real-write` 與確認 token 才會以 SQLAlchemy Core 短 transaction upsert `market_platforms`；API 仍不執行寫入，不建立 ORM session、不連外、不掛 scheduler；V10.101 補強 insert 顯式寫入 `created_at` / `updated_at`，避免正式 schema 無 default 時觸發 not-null rollback。
   - 正式環境 V10.101 已白名單部署：備份 `/tmp/codex_market_intel_v10100_predeploy_20260513_103809.tgz`、`/tmp/codex_market_intel_v10101_predeploy_20260513_104053.tgz` 與 seed 前快照 `/tmp/codex_market_platforms_v10100_before_20260513_103809.json`；僅 recreate `momo-app`，未碰 `momo-db`、未使用 `--remove-orphans`。CLI seed 首次因 timestamp not-null rollback，V10.101 修正後成功 insert `momo/pchome/coupang/shopee` 四筆 seed；read-only diff 顯示 existing=4、missing=0、matching=4，正式頁 console error 0。
   - 2026-05-13 Codex 只讀複核：`https://mo.wooo.work/health` 回報 V10.111；`/api/market_intel/status` 仍為 `enabled=false`、`crawler_enabled=false`、`write_enabled=false`、`dry_run_only=true`、phase 26；`/api/market_intel/platform_seed_db_diff?execute=true&platform=all` 只讀確認 `market_platforms` 已有 `momo/pchome/coupang/shopee` 四筆，`existing_seed_count=4`、`missing_codes=[]`、`database_write_executed=false`。
   - V10.323 已補正式端 seed writer token-hardening smoke：`seed_writer_cli_status` 不回吐 `approval_token_hint`、不洩漏環境 token，且明確標示 API 不讀 approval token、不執行 CLI、不寫 DB。
   - Phase 27 legacy source bridge preview：新增 `services/market_intel/legacy_source_bridge.py` 與 `/api/market_intel/legacy_source_bridge`，只讀盤點既有 `promo_products`、`competitor_prices`、`competitor_price_history`，產生導入 `market_*` 的 mapping / dedupe / blocked operation preview；預設 `execute=false` 不連 DB，`execute=true` 也只做 read-only query，不寫 DB、不建立 ORM session、不連外、不掛 scheduler；UI 新增「既有資料橋接預覽」panel；版本同步至 V10.182。
   - Phase 45 migration live smoke preview：新增 `/api/market_intel/migration_live_smoke` 與 UI「正式 DB 只讀 smoke」panel；預設 `execute=false` 只回 planned，人工 smoke 才可用 `execute=true` 整理 catalog / seed diff 結果，不執行 migration、不寫 DB、不跑 rollback、不掛 scheduler；版本同步至 V10.207。
   - Phase 46 live DB inventory preview：新增 `/api/market_intel/live_db_inventory` 與 UI「正式 DB 庫存總覽」panel；預設 `execute=false` 不連 DB，人工 smoke 才可用 `execute=true` 對 `market_*` tables 做只讀 count / group by，建立平台、活動、商品、比對、告警與 crawler run 基準；版本同步至 V10.209。
   - Phase 47 manual sample fetch plan：新增 `/api/market_intel/manual_sample_plan` 與 UI「人工樣本 Fetch 計畫」panel；預設只輸出平台順序、每平台 1 個公開入口、MCP gate、操作員步驟與備援，不抓外站、不寫 DB、不建立 crawler run、不掛 scheduler；版本同步至 V10.214。
   - Phase 48 manual sample acceptance contract：新增 `/api/market_intel/manual_sample_acceptance` 與 UI「樣本結果驗收契約」panel；定義 sample result 必要欄位、diagnostics 欄位、驗收門檻、拒收條件、人工決策與升級順序，不載入 sample result、不抓外站、不允許候選導入、不寫 DB；版本同步至 V10.215。
   - Phase 49 manual sample result review：新增 `services/market_intel/manual_sample_review.py`、`/api/market_intel/manual_sample_review` 與 UI「樣本結果審核預覽」panel；以純函式評估人工 sample result 是否可進候選預覽，預設不載入結果、不抓外站、不存檔、不寫 DB、不允許候選導入、不掛 scheduler；版本同步至 V10.216。
   - Phase 50 manual sample review evaluate：新增 `/api/market_intel/manual_sample_review/evaluate` POST 與 UI JSON 審核入口，允許操作員貼入單筆 sample result 即時回傳 PASS/BLOCK；不保存 payload、不回吐完整 HTML、不寫 DB、不建立候選活動、不允許候選導入、不掛 scheduler；版本同步至 V10.219。
   - V10.220 補 Phase 50 UI POST CSRF header：`manual_sample_review/evaluate` 保持 CSRF 保護，頁面 fetch 送出 `X-CSRFToken`，不豁免安全檢查。
   - Phase 51 manual sample candidate handoff：新增 `/api/market_intel/manual_sample_review/candidate_handoff` POST 與 UI handoff 按鈕，將已通過審核的 sample result 轉成只讀候選活動 preview payload；不保存 handoff、不建立 review queue、不寫 market_*、不允許候選導入、不掛 scheduler；版本同步至 V10.222。
   - Phase 52 manual sample candidate queue draft：新增 `services/market_intel/manual_sample_candidate_queue.py`、`/api/market_intel/manual_sample_review/candidate_queue_draft` POST 與 UI queue 草案按鈕，將 handoff 候選轉成只讀人工審核 queue draft；不建立正式 queue、不保存草案、不寫 market_*、不自動核准候選、不掛 scheduler；版本同步至 V10.223。
   - V10.224 補 PPT 報表覆蓋矩陣：`/observability/ppt_audit_history` 將每個定義簡報同列串起 DB 寫入、線上預覽、視覺 QA 與交付狀態，並提供預覽、預熱、重跑操作，避免只顯示「目標已產生」。
   - Phase 53 manual sample candidate queue approval：新增 `/api/market_intel/manual_sample_review/candidate_queue_approval` POST 與 UI 送審 gate 按鈕，將 queue draft row preview 對齊既有 `market_alert_review_queue` 契約，檢查必填欄位、寫入 flags、備份與人工批准 gate；不建立 approval record、不寫 review queue、不開 DB transaction、不掛 scheduler；版本同步至 V10.225。
   - V10.226 補 PPT 視覺 QA runtime checklist：`/observability/ppt_audit_history` 在視覺模型未就緒時顯示 Feature Flag、LibreOffice、Vision Model 三段檢查與下一步操作，避免只看到「停用」而不知道卡在哪。
   - Phase 54 manual sample candidate queue transaction：新增 `/api/market_intel/manual_sample_review/candidate_queue_transaction` POST 與 UI transaction preview 按鈕，將 queue row preview 轉成 `market_alert_review_queue` idempotent insert statement、payload hash 與 rollback plan；不開 DB connection、不開 transaction、不 commit、不建立 approval record；版本同步至 V10.227。
   - V10.228 補 PPT 視覺 QA 背景狀態卡：新增 `/observability/ppt_audit/vision_status` 與頁面 Vision QA 狀態卡，讓立即視覺 QA 排入後可看 queued/running/completed/error 與最近審核摘要，不必刷新猜測。
   - V10.229 修正 PPT 視覺 QA 多 worker 狀態漂移：將 queued/running/completed/error 寫入 `/app/data/ppt_vision_audit_status.json` runtime state，所有 Gunicorn worker 共用同一份狀態並阻擋重複排入。
   - Phase 55 candidate queue writer CLI gate：新增 `/api/market_intel/manual_sample_review/candidate_queue_writer_status` POST、`scripts/market_intel_candidate_queue_writer.py` 與 UI writer gate 按鈕，定義 `MARKET_INTEL_QUEUE_WRITE_APPROVAL` 一次性 token、execute/apply flags、備份、migration smoke 與 rollback gate；本階段仍不開 DB connection、不寫 `market_alert_review_queue`、不 commit、不掛 scheduler；版本同步至 V10.230。
   - Phase 56 candidate queue writer preflight：新增 `/api/market_intel/manual_sample_review/candidate_queue_writer_preflight` POST 與 `services/market_intel/candidate_queue_writer_preflight.py`，檢查 transaction payload key 到 `market_alert_review_queue` 欄位映射、缺欄與 dedupe unique index；頁面預設 execute=false 不連 DB，CLI 可明確 `--read-only-preflight` 只讀 catalog；版本同步至 V10.232。
   - Phase 57 candidate queue writer CLI transaction：`scripts/market_intel_candidate_queue_writer.py` 在 CLI-only 情境支援受控 transaction，必須同時通過 transaction payload、read-only preflight、`--execute`、`--apply-real-write`、一次性 token、備份確認與 migration live smoke 才會以 SQLAlchemy Core idempotent insert `market_alert_review_queue`；API/UI 仍不傳 token、不連 DB、不寫 queue、不掛 scheduler；版本同步至 V10.234。
   - V10.235 補 PPT 視覺 QA stale recovery：背景狀態寫入 worker PID；若部署 reload 後舊 PID 已不存在，`/observability/ppt_audit/vision_status` 會自動把 running 轉為可診斷 error 並允許重新排入，避免人工清 runtime state。
   - Phase 58 candidate queue writer post-write smoke：新增 `services/market_intel/candidate_queue_writer_postwrite_smoke.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_writer_postwrite_smoke` 與 UI smoke 按鈕，依 transaction preview 的 dedupe key 只讀查詢 `market_alert_review_queue`，讓 CLI 真寫入後可驗證 row 是否存在；頁面預設 execute=false 不連 DB、不寫 queue、不 commit、不掛 scheduler；版本同步至 V10.236。
   - Phase 59 candidate queue writer operator drill：新增 `services/market_intel/candidate_queue_writer_operator_drill.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_writer_operator_drill` 與 UI drill 按鈕，組裝 reviewed sample、備份、read-only preflight、CLI writer、post-write smoke 的操作員順序；API/UI 不讀 approval token、不執行 CLI、不連 DB、不寫 queue、不 commit、不掛 scheduler；版本同步至 V10.237。
   - V10.238 補業績圖表 runtime QA 與分析 tabs 窄版修正：新增 `quick_review --sales-charts` 檢查 `/daily_sales`、`/growth_analysis` 的 Chart.js ready、可繪製資料集與 canvas 非空白；同時把分析報表 tabs 手機版改為自適應 grid，避免 Metabase/Grist 外部連結超出右側。
   - Phase 60 candidate queue writer run package：新增 `services/market_intel/candidate_queue_writer_run_package.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_writer_run_package` 與 UI run package 按鈕，整理正式 CLI 小流量寫入前的 payload manifest、required artifacts、command bundle、operator signoff 與 rollback plan；API/UI 不產檔、不讀 approval token、不執行 CLI、不連 DB、不寫 queue、不 commit、不掛 scheduler；版本同步至 V10.240。
   - Phase 61 candidate queue writer run readiness：新增 `services/market_intel/candidate_queue_writer_run_readiness.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_writer_run_readiness` 與 UI readiness 按鈕，檢查 reviewed sample 檔案路徑、備份路徑、preflight 輸出、migration live smoke、shell-only token acknowledgement 與禁止 token 進 API；API/UI 不產檔、不讀 approval token、不執行 CLI、不連 DB、不寫 queue、不 commit、不掛 scheduler；版本同步至 V10.245。
   - Phase 62 candidate queue writer run receipt：新增 `services/market_intel/candidate_queue_writer_run_receipt.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_writer_run_receipt` 與 UI receipt 按鈕，審核 CLI 寫入後的 writer output、post-write smoke、dedupe key 一致性與 artifact 路徑；API/UI 不回吐 receipt 原文、不讀 approval token、不執行 CLI、不連 DB、不寫 queue、不掛 scheduler；版本同步至 V10.247。
   - Phase 63 candidate queue writer run closeout：新增 `services/market_intel/candidate_queue_writer_run_closeout.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_writer_run_closeout` 與 UI closeout 按鈕，在 receipt 通過後檢查 closeout artifact、操作員人工 queue review/read-only inventory 確認與安全 promotion gate；API/UI 不回吐原始 receipt、不讀 approval token、不執行 CLI、不連 DB、不寫 queue、不掛 scheduler；版本同步至 V10.248。
   - Phase 64 candidate queue review handoff：新增 `services/market_intel/candidate_queue_review_handoff.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_handoff` 與 UI handoff 按鈕，將 writer closeout 轉成人工 queue review / read-only inventory 交接契約；API/UI 不讀 approval token、不查 DB、不更新 review_state、不補寫 queue、不掛 scheduler；版本同步至 V10.251。
   - Phase 65 candidate queue review inventory：新增 `services/market_intel/candidate_queue_review_inventory.py`、`routes/market_intel_review_routes.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_inventory` 與 UI inventory 按鈕，把 handoff、post-write smoke、live DB inventory 合併成只讀人工審核庫存檢查；預設不連 DB，人工只讀查詢仍不更新 review_state、不補寫 queue、不讀 token、不掛 scheduler；版本同步至 V10.252。
   - Phase 66 candidate queue review decision：新增 `services/market_intel/candidate_queue_review_decision.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_decision` 與 UI decision 按鈕，將通過 inventory 的 queue row 整理成人工決策草案；API/UI 不更新 review_state、不寫 decision record、不讀 token、不掛 scheduler；版本同步至 V10.254。
   - Phase 67 candidate queue review decision approval：新增 `services/market_intel/candidate_queue_review_decision_approval.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_decision_approval` 與 UI approval gate 按鈕，檢查人工決策草案是否可進入下一個 CLI-only transaction preview；API/UI 不更新 review_state、不寫 decision record、不建立 approval record、不讀 token、不掛 scheduler；版本同步至 V10.255。
   - Phase 68 candidate queue review decision transaction：新增 `services/market_intel/candidate_queue_review_decision_transaction.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_decision_transaction` 與 UI transaction preview 按鈕，將 approval update preview 轉成 `review_state` update statement、payload hash 與 rollback plan；API/UI 不更新 review_state、不開 DB connection、不執行 CLI、不讀 token、不掛 scheduler；版本同步至 V10.256。
   - Phase 69 candidate queue review decision writer CLI gate：新增 `services/market_intel/candidate_queue_review_decision_writer_cli.py`、`scripts/market_intel_review_decision_writer.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_decision_writer_status` 與 UI writer gate 按鈕，先建立 shell-only review_state writer gate 與 command bundle；writer implementation 本階段保持 disabled，API/UI 不讀 token、不執行 CLI、不連 DB、不更新 review_state、不掛 scheduler；版本同步至 V10.257。
   - Phase 70 candidate queue review decision writer preflight：新增 `services/market_intel/candidate_queue_review_decision_writer_preflight.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_decision_writer_preflight` 與 UI preflight 按鈕，檢查 writer status、review_state update payload、狀態轉換與禁止 token 進 API；API/UI 即使收到 execute/apply_real_write 也不連 DB、不執行 CLI、不更新 review_state、不 commit、不讀 token、不掛 scheduler；版本同步至 V10.258。
   - V10.259 補 Phase 70 preflight 合約與 OCLearn queue 時區：preflight 補 planned/read-only catalog probe 欄位、dedupe unique index 檢查與 route 重複註冊清理；OCLearn embedding queue 的 created_at/updated_at/stale cutoff 改為台北 naive，避免 UTC/台北時間差讓 processing 任務卡住。
   - Phase 71 candidate queue review decision writer post-write smoke：新增 `services/market_intel/candidate_queue_review_decision_writer_postwrite_smoke.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_decision_writer_postwrite_smoke` 與 UI smoke 按鈕，人工 CLI 更新 review_state 後可用 dedupe key 只讀驗證 row 是否存在且 state 符合預期；API/UI 預設不連 DB，execute=true 也只讀查詢，不更新 review_state、不 commit、不讀 token、不掛 scheduler；版本同步至 V10.260。
   - Phase 72 candidate queue review decision writer operator drill：新增 `services/market_intel/candidate_queue_review_decision_writer_operator_drill.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_decision_writer_operator_drill` 與 UI drill 按鈕，將 review_state CLI 更新前後的 transaction JSON、備份、preflight、CLI writer、post-write smoke 與 rollback plan 組成可稽核操作順序；API/UI 不讀 token、不執行 CLI、不連 DB、不更新 review_state、不 commit、不掛 scheduler；版本同步至 V10.261。
   - Phase 73 candidate queue review decision writer run package：新增 `services/market_intel/candidate_queue_review_decision_writer_run_package.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_decision_writer_run_package` 與 UI package 按鈕，將 review_state transaction、preflight、operator drill、writer gate、post-write smoke、必要 artifact 與 rollback plan 組成正式 CLI 更新前的可稽核 run package；API/UI 不寫檔、不讀 token、不執行 CLI、不連 DB、不更新 review_state、不 commit、不掛 scheduler；版本同步至 V10.262。
   - Phase 74 candidate queue review decision writer run readiness：新增 `services/market_intel/candidate_queue_review_decision_writer_run_readiness.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_decision_writer_run_readiness` 與 UI readiness 按鈕，檢查 review_state CLI 更新前的 transaction JSON、備份、preflight、shell-only token 與 post-write smoke 計畫是否齊備；API/UI 不寫檔、不讀 token、不執行 CLI、不連 DB、不更新 review_state、不 commit、不掛 scheduler；版本同步至 V10.264。
   - Phase 75 candidate queue review decision writer run receipt：新增 `services/market_intel/candidate_queue_review_decision_writer_run_receipt.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_decision_writer_run_receipt` 與 UI receipt 按鈕，審核 review_state CLI 更新後的 writer output、post-write smoke、dedupe key 一致性、artifact 路徑與 token 外洩風險；API/UI 不回吐 receipt 原文、不讀 token、不執行 CLI、不連 DB、不更新 review_state、不 commit、不掛 scheduler；版本同步至 V10.266。
   - Phase 76 candidate queue review decision writer run closeout：新增 `services/market_intel/candidate_queue_review_decision_writer_run_closeout.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_decision_writer_run_closeout` 與 UI closeout 按鈕，在 review_state receipt 通過後整理 closeout gate、操作員 closeout artifact、post-closeout read-only inventory 確認與 promotion 摘要；API/UI 不回吐 receipt 原文、不讀 token、不執行 CLI、不連 DB、不更新 review_state、不 commit、不掛 scheduler；版本同步至 V10.268。
   - Phase 77 candidate queue review decision post-closeout inventory：新增 `services/market_intel/candidate_queue_review_decision_post_closeout_inventory.py`、`routes/market_intel_review_post_routes.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_decision_post_closeout_inventory` 與 UI inventory 按鈕，在 review_state closeout 後整理 post-write smoke、live inventory、dedupe key 與 review_state 結果；API/UI 不讀 token、不執行 CLI、不更新 review_state、不寫 DB、不 commit、不掛 scheduler；版本同步至 V10.270。
   - Phase 78 candidate queue review completion archive：新增 `services/market_intel/candidate_queue_review_completion_archive.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_completion_archive` 與 UI archive 按鈕，在 post-closeout inventory 通過後整理 receipt、closeout、inventory、dedupe key、review_state row snapshot 與 artifact path manifest；API/UI 不寫檔、不讀 token、不執行 CLI、不更新 review_state、不寫 DB、不 commit、不掛 scheduler；版本同步至 V10.273。
   - Phase 79 candidate queue review archive summary：新增 `services/market_intel/candidate_queue_review_archive_summary.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_archive_summary` 與 UI summary 按鈕，在 review completion archive 後整理可供摘要/報表審核的結構化輸入；API/UI 不呼叫 LLM、不派送 Telegram、不寫檔、不讀 token、不執行 CLI、不更新 review_state、不寫 DB、不 commit、不掛 scheduler；版本同步至 V10.276。
   - Phase 80 candidate queue review AI summary preflight：新增 `services/market_intel/candidate_queue_review_ai_summary_preflight.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_ai_summary_preflight` 與 UI preflight 按鈕，在 archive summary 後檢查 Ollama-first 三主機級聯與 Gemini 備援邊界；API/UI 不呼叫 LLM、不派送 Telegram、不寫檔、不讀 token、不執行 CLI、不更新 review_state、不寫 DB、不 commit、不掛 scheduler；版本同步至 V10.278。
   - Phase 81 candidate queue review AI summary run package：新增 `services/market_intel/candidate_queue_review_ai_summary_run_package.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_ai_summary_run_package` 與 UI package 按鈕，在 AI summary preflight 後整理手動 Ollama 摘要任務包、prompt contract 與輸出 schema；API/UI 不呼叫 LLM、不派送 Telegram、不寫 run package、不讀 token、不執行 CLI、不更新 review_state、不寫 DB、不 commit、不掛 scheduler；版本同步至 V10.280。
   - Phase 82 candidate queue review AI summary output receipt：新增 `services/market_intel/candidate_queue_review_ai_summary_output_receipt.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_ai_summary_output_receipt` 與 UI receipt 按鈕，在 run package 後驗收人工 Ollama 摘要輸出的 schema、evidence_refs 與 model_route；API/UI 不呼叫 LLM、不派送 Telegram、不寫 receipt、不讀 token、不執行 CLI、不更新 review_state、不寫 DB、不 commit、不掛 scheduler；版本同步至 V10.285。
   - Phase 83 candidate queue review AI summary persistence preflight：新增 `services/market_intel/candidate_queue_review_ai_summary_persistence_preflight.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_ai_summary_persistence_preflight` 與 UI preflight 按鈕，在 output receipt 後整理 future CLI-only `market_alert_review_queue.metadata_json.ai_summary_review` persistence contract、payload hash 與 metadata patch preview；API/UI 不呼叫 LLM、不派送 Telegram、不寫 preflight、不寫 summary record、不寫 metadata_json、不讀 token、不執行 CLI、不更新 review_state、不寫 DB、不 commit、不掛 scheduler；版本同步至 V10.286。
   - Phase 84 candidate queue review AI summary persistence transaction：新增 `services/market_intel/candidate_queue_review_ai_summary_persistence_transaction.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_ai_summary_persistence_transaction` 與 UI transaction 按鈕，在 persistence preflight 後產生 future CLI-only `metadata_json` UPDATE statement preview、parameter preview 與 rollback plan；API/UI 不開 DB、不執行 SQL、不寫 transaction、不寫 summary record、不寫 metadata_json、不讀 token、不執行 CLI、不更新 review_state、不派送 Telegram、不呼叫 LLM、不 commit、不掛 scheduler；版本同步至 V10.287。
   - Phase 85 candidate queue review AI summary persistence writer preflight：新增 `services/market_intel/candidate_queue_review_ai_summary_persistence_writer_preflight.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_ai_summary_persistence_writer_preflight` 與 UI writer preflight 按鈕，在 transaction preview 後檢查 CLI-only writer contract、metadata_json backup requirement、post-write smoke requirement 與 artifact path gate；API/UI 不開 DB、不執行 SQL、不寫 preflight、不寫 summary record、不寫 metadata_json、不讀 token、不執行 CLI、不更新 review_state、不派送 Telegram、不呼叫 LLM、不 commit、不掛 scheduler；版本同步至 V10.290。
   - Phase 86 candidate queue review AI summary persistence run package：新增 `services/market_intel/candidate_queue_review_ai_summary_persistence_run_package.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_ai_summary_persistence_run_package` 與 UI run package 按鈕，在 writer preflight 後整理 payload manifest、CLI command bundle、required artifacts、operator signoff 與 rollback plan；API/UI 不開 DB、不執行 SQL、不寫 run package、不寫 summary record、不寫 metadata_json、不讀 token、不執行 CLI、不更新 review_state、不派送 Telegram、不呼叫 LLM、不 commit、不掛 scheduler；版本同步至 V10.294。
   - Phase 87 candidate queue review AI summary persistence run readiness：新增 `services/market_intel/candidate_queue_review_ai_summary_persistence_run_readiness.py`、POST `/api/market_intel/manual_sample_review/candidate_queue_review_ai_summary_persistence_run_readiness` 與 UI readiness 按鈕，在 run package 後檢查 artifact path、metadata_json backup、read-only preflight、shell-only token 與 post-write smoke 計畫；API/UI 不開 DB、不執行 SQL、不寫 readiness artifact、不寫 metadata_json、不讀 token、不執行 CLI、不更新 review_state、不派送 Telegram、不呼叫 LLM、不 commit、不掛 scheduler；版本同步至 V10.297。
   - V10.248 補市場情報 390px preview panel QA：sample review 工具列改為 textarea + 可換行 action rail，移除舊的硬編 8 欄 grid；`check_responsive_overflow` 新增 `--screenshot-all`，本機 390x844 `/market_intel` 真頁面 QA 通過且 overflow=0。
   - V10.250 補 Code Review Gemini 備援遙測護欄：Ollama 主路徑失敗時 `fallback_to` 明確指向 `code_review_openclaw_gemini`，測試鎖住「Gemini 不得記成 `code_review_openclaw` 主 caller」；AI Calls 觀測台會把 legacy `code_review_openclaw + gemini` 顯示成 Gemini 備援，避免誤判 Gemini-first。
   - Schema smoke：`tests/test_market_intel_skeleton.py` 檢查 `Base.metadata` 內含 ADR-035 八張 `market_*` tables。
   - Desktop UI QA：本機只註冊 `market_intel_bp` 的 Flask harness 載入 `/market_intel`，確認 Phase 15、候選預覽、writer preview、安全 flags、點陣暖紙視覺正常，console error 0。
   - API QA：`/api/market_intel/schema_smoke` 通過 7 張表與 `market_platforms` 必要欄位檢查；`/api/market_intel/platform_seed_writer_plan` 回傳 4 筆 dry-run upsert preview，`writes_executed=false`，四平台皆 `blocked_dry_run_only`。
   - Narrow viewport UI QA：in-app browser 窄版畫面確認側欄收合、卡片不水平爆版、候選狀態顯示 `momo/pchome/coupang/shopee:planned`。
   - 測試：新增 `tests/test_market_intel_skeleton.py`，確認預設 flags 全關、adapter 不允許 network/write/scheduler，手動 discovery / candidate preview 預設不發 request，parser/scorer/confidence 診斷只輸出 JSON，UI 只使用 `fetch=false`，platform seed plan 只讀且需 gate。

【下次待辦】
   - 下次市場情報 seed writer 只需保留定期 smoke，確認 `approval_token_hint` 不回歸且 `api_reads_approval_token=false`、`api_executes_cli=false`、`api_writes_database=false`。
   - 正式推版前需實際執行 worktree scope review、`python backup_system.py`、commit/push 目標變更、讀 deployment SOP 與 ADR-011，且只跑 `/health` 與市場情報頁 smoke。
   - 下一步才可在明確批准且具備真實 reviewed sample JSON 後做正式 DB 的 queue writer CLI 小流量 operator run；先用 run readiness、run package、operator drill、post-write smoke、run receipt、run closeout 與 queue review handoff 做順序與只讀驗證，預設 API/UI 不得寫 DB，也不得執行 migration。
   - 市場情報 UI 後續頁面必須沿用 V2 暖紙、暖墨、等寬數字與點陣風格，禁止複製巨型分析頁 template 模式。

================================================================================
                      AI 自動化閉環治理同步 (2026-04-29) [DONE]
================================================================================

【已完成】
   - ADR-018：四 AI Agent 自動化控制面立案。
   - Memory：新增 `docs/memory/ai_automation_closure_20260429.md`。
   - Guide/Skills 替代：新增 `docs/guides/ai_automation_session_sop.md`。
   - SOT：更新 `docs/AI_INTELLIGENCE_MODULE_SOT.md` 至 V10.11 AI Automation Metrics Scrape 架構。
   - Codex 規則：更新 `AGENTS.md`、`CONSTITUTION.md`、ADR/memory 索引。
   - Prometheus 指標化：新增 EventRouter / AutoHeal / safe action / replay in-process metrics，並接入 `/metrics`。
   - 線上 smoke dashboard：新增 `/ai_automation_smoke` 與 `/api/ai-automation/smoke`，覆蓋 EventRouter、AutoHeal、NemoTron fallback、OpenClaw embedding queue、ElephantAlpha HITL。
   - Smoke 趨勢保存：`/api/ai-automation/smoke` 每次快檢追加 JSONL 精簡紀錄，dashboard 顯示最近趨勢。
   - Smoke 趨勢管理：新增 JSONL 匯出、清理與每日摘要。
   - Smoke 每日摘要：新增 Telegram 手動推播 API 與 momo-scheduler 每日 09:10 排程入口。
   - Grafana 視覺化：新增 `MOMO AI Automation Overview` provisioning dashboard，覆蓋 EventRouter、safe action、replay、AutoHeal 指標。
   - Grafana 線上部署：188 active Grafana 已載入 4 個 dashboard，`MOMO AI Automation Overview` provisioning 成功。
   - Prometheus scrape 修復：active monitoring stack 新增 `momo-app` scrape job，目標 `momo-pro-system:80/metrics`。
   - Gunicorn preload 修復：`post_fork` 略過 Flask/Werkzeug request-bound LocalProxy，避免 worker boot fail。
   - CD 健康檢查強化：改為 internal container health + external `mo.wooo.work` 雙檢查，重試窗延長到約 3 分鐘。
   - CD Sync reload 修復：rsync 後明確 `docker compose restart momo-app scheduler telegram-bot`，避免檔案已同步但 process 仍跑舊版。
   - CD Gunicorn 掛載強化：`momo-app` 明確掛載 `./gunicorn.conf.py:/app/gunicorn.conf.py:ro`，避免重啟後吃到 image 內舊版設定。
   - Metrics schema drift 降噪：`realtime_sales_monthly` 總筆數改用 raw `COUNT(*)`，避免 ORM 欄位 drift 造成 Prometheus scrape warning。
   - CD Rebuild 切換強化：rebuild 模式改為先 `docker compose build --no-cache momo-app` 成功，再 stop/rm/recreate 三應用容器，避免長時間 502。
   - ElephantAlpha NIM fallback 強化：預設改用 production 可呼叫的 `nvidia/llama-3.3-nemotron-super-49b-v1.5`，Ultra 253B 權限 404 時自動 fallback。
   - DatabaseManager 連線池收斂：PostgreSQL 每 worker pool 調整為 `pool_size=2/max_overflow=3`，避免多 route 重複 new manager 時吃滿連線。
   - Ollama embedding 強化：改為優先 `/api/embed`，舊節點才 fallback `/api/embeddings`，並新增 `EMBEDDING_TIMEOUT`。
   - Scheduler 例外記錄強化：清除 `scheduler.py` 靜默 `except/pass`，資源清理、EDM 可選欄位、備份 insight/通知失敗全改為可診斷 log。
   - AI metrics baseline 觀測：`/metrics` 在尚無 AI 自動化事件時仍輸出 `momo_ai_*` zero-baseline series，避免重啟後 Grafana/Prometheus 看不到 metric names。
   - ElephantAlpha transient fallback：NVIDIA NIM timeout、connection error、429 與 5xx 會嘗試下一個 fallback model；400 等非暫時性請求錯誤不重試。
   - 模組化治理守門：新增 `docs/guides/modularization_governance.md`、`docs/memory/code_modularization_inventory_20260430.md` 與 `tests/test_modularization_governance.py`，盤點並鎖住 15 個 >800 行 Python 大檔。
   - Legacy 5888 入口清理：刪除 `tests/main_test.py` standalone Flask 死碼，測試與自動匯入文件改用 Port 80 入口。
   - OpenClaw Bot 第一刀拆分：Telegram API send/retry/file upload helper 已移至 `services/openclaw_bot/telegram_api.py`，避免 Blueprint 持續承接 delivery glue。

【下次待辦】
   - 繼續依 inventory 拆 `routes/openclaw_bot_routes.py`：下一刀優先拆 menu keyboard 或 report formatting。
   - 觀察 Prometheus scrape 後 `momo_ai_*` baseline 與非 baseline 事件序列是否持續穩定。
   - Superset panel 設定與 Smoke 摘要成效觀察。

================================================================================
                      品牌資產最終處理與維護 (Phase 7) [DONE]
================================================================================

26. [已完成] 品牌圖檔格式轉換：
    - 使用 `convert_assets.py` 生成多種格式。
    - 產出格式：TIFF, JPG, EPS, AI (PDF), SVG (x3 款 Logo)。
    - 位置：/Users/ogt/momo_pro_system/export_assets
    - 已部署至伺服器並建立品牌資產庫頁面：https://momo.wooo.work/brand_assets

27. [已完成] 維護頁面文案更新與部署：
    - 文案已更新為：「正在進行系統升級，為了提供更穩定的網站服務，系統正在進行必要的維護與優化，造成不便，敬請見諒」
    - 已同步至 GCP 生產環境。

================================================================================
                      WOOO TECH 公司入口網站 (Phase 8) [NEW PROJECT]
================================================================================

28. [待辦] 公司入口網站開發 (wooo.work)：
    - 將使用 **Flutter Web** 開發。
    - 需在獨立專案中進行（非 momo_pro_system）。
    - 詳細規劃文件：implementation_plan_wooo_website.md

    【網站定位】
    - 新創公司 WOOO TECH 的數位門面
    - 整合各子系統產品的導航與介紹
    - 一級域名：wooo.work
    - 子系統：momo.wooo.work, [未來產品].wooo.work

    【頁面結構】
    - 首頁：Hero Section + 產品卡片
    - 產品介紹頁：各系統功能詳情
    - 公司介紹：願景、使命
    - 聯繫我們：表單或 Email

    【視覺風格】
    - 延續 WOOO 品牌：漸變紫藍 + 深色科技感 + 玻璃質感
    - 動態流暢的互動效果

    【待確認】
    - DNS 託管商 (wooo.work)
    - 公司簡介文案
    - 是否需要多語言支援




【環境區分】

1. 開發/測試環境（本機 VS Code）：
   - 位置：macOS 本機 (/Users/ogt/momo_pro_system)
   - 用途：開發新功能、測試、除錯
   - 啟動方式：`python app.py`
   - 訪問：http://localhost:5000 或 http://127.0.0.1:5000
   - 資料庫：data/momo_database.db (本機 SQLite)

================================================================================
                         完整部署流程 (2026-01-13)
================================================================================

【部署完成狀態】
   ✅ 網站：https://momo.wooo.work
   ✅ 響應時間：1.7-2 秒
   ✅ SSL 有效期：2026-04-13
   ✅ Google Drive 自動匯入：每 30 分鐘
   ✅ 爬蟲任務：每小時執行
   ✅ 自動備份：已配置

================================================================================
                          日常開發工作流程
================================================================================

【本機開發流程】

1. 啟動開發環境：
   cd /Users/ogt/momo_pro_system
   python app.py
   # 訪問：http://localhost:5000

2. 開發新功能：
   - 編輯程式碼
   - 本機測試
   - 確認功能正常

3. 測試資料庫變更：
   - 修改 database/models.py
   - 執行 python init_db.py
   - 驗證資料庫結構

4. 版本控制（如果使用 Git）：
   git add .
   git commit -m "描述變更內容"

【版本同步檢查】

⚠️  重要：每次更新後確認本機和 GCP 版本一致

1. 檢查關鍵文件的修改時間和大小：
   # 本機
   ls -lh /Users/ogt/momo_pro_system/app.py
   ls -lh /Users/ogt/momo_pro_system/dashboard.html

   # GCP
   gcloud compute ssh momo-server --zone=asia-east1-a \
     --command="ls -lh ~/momo_pro_system/app.py ~/momo_pro_system/dashboard.html"

2. 比對檔案 MD5 雜湊值（確保內容完全一致）：
   # 本機
   md5 /Users/ogt/momo_pro_system/app.py

   # GCP
   gcloud compute ssh momo-server --zone=asia-east1-a \
     --command="md5sum ~/momo_pro_system/app.py"

3. 檢查最近更新的文件：
   # 本機（最近 1 天內修改的 Python 和 HTML 文件）
   find /Users/ogt/momo_pro_system -type f \( -name "*.py" -o -name "*.html" \) -mtime -1 -ls

   # GCP
   gcloud compute ssh momo-server --zone=asia-east1-a \
     --command="find ~/momo_pro_system -type f \( -name '*.py' -o -name '*.html' \) -mtime -1 -ls"

4. 版本追蹤建議：
   ✅ 每次更新後記錄更新時間和文件清單
   ✅ 使用 Git 進行版本控制（未來可考慮）
   ✅ 重大更新前先備份 GCP 當前版本
   ✅ 更新後測試關鍵功能確認正常

【常用維護命令】

# 查看服務狀態
gcloud compute ssh momo-server --zone=asia-east1-a \
  --command="sudo systemctl status momo"

# 查看即時日誌
gcloud compute ssh momo-server --zone=asia-east1-a \
  --command="sudo journalctl -u momo -f"

# 重啟服務
gcloud compute ssh momo-server --zone=asia-east1-a \
  --command="sudo systemctl restart momo"

# 停止服務
gcloud compute ssh momo-server --zone=asia-east1-a \
  --command="sudo systemctl stop momo"

# 啟動服務
gcloud compute ssh momo-server --zone=asia-east1-a \
  --command="sudo systemctl start momo"

# 查看 Nginx 狀態
gcloud compute ssh momo-server --zone=asia-east1-a \
  --command="sudo systemctl status nginx"

# 重新載入 Nginx 配置
gcloud compute ssh momo-server --zone=asia-east1-a \
  --command="sudo nginx -t && sudo systemctl reload nginx"

# 檢查 SSL 證書狀態
gcloud compute ssh momo-server --zone=asia-east1-a \
  --command="sudo certbot certificates"

# 手動更新 DuckDNS IP
gcloud compute ssh momo-server --zone=asia-east1-a \
  --command="~/duckdns/duck.sh && cat ~/duckdns/duck.log"

# 查看資源使用狀況
gcloud compute ssh momo-server --zone=asia-east1-a \
  --command="free -h && df -h && top -bn1 | head -n 15"

【維護模式管理】

# 啟用維護模式（顯示維護頁面，停止應用服務）
gcloud compute ssh momo-server --zone=asia-east1-a \
  --command="./enable_maintenance.sh"

# 禁用維護模式（恢復正常服務）
gcloud compute ssh momo-server --zone=asia-east1-a \
  --command="./disable_maintenance.sh"

# 維護模式說明：
# - 維護模式會將網站切換到靜態維護頁面
# - 顯示「系統維護中」訊息和即時時鐘
# - SSL/HTTPS 持續運作
# - 適用於系統更新、資料庫維護等需要暫停服務的場景
# - 維護頁面位置：~/momo_pro_system/maintenance.html

================================================================================
                            系統備份策略
================================================================================

【本機備份】
- 執行：python backup_system.py
- 或在系統設定頁面點擊「系統備份」按鈕
- 位置：backups/ 目錄
- 最新備份：momo_pro_system_backup_20260113_111011_V9.4.zip (261 MB)

【生產環境備份】

✅ 已設置每日自動備份（每天凌晨 2:00）

1. 自動備份配置：
   - 執行時間：每天 02:00（台北時間 10:00）
   - 備份腳本：~/daily_backup.sh
   - 備份位置：~/momo_backups/
   - 保留期限：最近 7 天
   - 備份內容：
     * 資料庫（momo_database.db）
     * 配置文件（config/）
     * Google Drive 憑證
     * 系統配置（Nginx, systemd）
     * DuckDNS 配置
     * 最近 7 天日誌

2. 查看備份狀態：
   gcloud compute ssh momo-server --zone=asia-east1-a \
     --command="ls -lh ~/momo_backups/*.tar.gz | tail -5"

3. 查看備份日誌：
   gcloud compute ssh momo-server --zone=asia-east1-a \
     --command="tail -50 ~/momo_backups/backup.log"

4. 手動執行備份：
   gcloud compute ssh momo-server --zone=asia-east1-a \
     --command="~/daily_backup.sh"

5. 下載備份到本機：
   gcloud compute scp momo-server:~/momo_backups/momo_production_backup_*.tar.gz \
     /Users/ogt/momo_pro_system/backups/ --zone=asia-east1-a

6. 恢復備份：
   # 解壓備份檔
   tar -xzf momo_production_backup_YYYYMMDD_HHMMSS.tar.gz
   # 恢復資料庫
   cp momo_production_backup_*/momo_database.db ~/momo_pro_system/data/
   # 重啟服務
   sudo systemctl restart momo

================================================================================
                           故障排除指南
================================================================================

【問題：網站無法訪問】
1. 檢查服務狀態：
   gcloud compute ssh momo-server --zone=asia-east1-a \
     --command="sudo systemctl status momo nginx"

2. 檢查防火牆：
   gcloud compute firewall-rules list --filter="name:allow-http*"

3. 檢查 DNS 解析：
   nslookup momo.wooo.work

【問題：網站速度慢】
1. 檢查資源使用：
   gcloud compute ssh momo-server --zone=asia-east1-a \
     --command="free -h && df -h && ps aux | grep python"

2. 檢查 Gunicorn workers：
   gcloud compute ssh momo-server --zone=asia-east1-a \
     --command="ps aux | grep gunicorn"

3. 查看應用日誌：
   gcloud compute ssh momo-server --zone=asia-east1-a \
     --command="sudo journalctl -u momo -n 100 --no-pager"

【問題：SSL 證書過期】
1. 檢查證書狀態：
   gcloud compute ssh momo-server --zone=asia-east1-a \
     --command="sudo certbot certificates"

2. 手動續期：
   gcloud compute ssh momo-server --zone=asia-east1-a \
     --command="sudo certbot renew"

【問題：Google Drive 自動匯入失敗】
1. 檢查日誌：
   gcloud compute ssh momo-server --zone=asia-east1-a \
     --command="sudo journalctl -u momo | grep -i 'google drive' | tail -n 20"

2. 檢查憑證檔案：
   gcloud compute ssh momo-server --zone=asia-east1-a \
     --command="ls -lh ~/momo_pro_system/config/google_*.{json,pickle}"

3. 手動測試：
   gcloud compute ssh momo-server --zone=asia-east1-a
   cd ~/momo_pro_system
   source venv/bin/activate
   python -c "from services.google_drive_service import GoogleDriveService; g=GoogleDriveService(); print(g.list_files())"

【問題：504 Gateway Timeout】
原因：某些頁面（如 sales_analysis）需要處理大量數據（31 萬+ 筆記錄），
      超過 Nginx 預設的 60 秒 timeout。

解決方案（已修復 2026-01-13）：
1. 增加 Nginx proxy timeout 到 300 秒：
   - proxy_read_timeout 300s;
   - proxy_connect_timeout 300s;
   - proxy_send_timeout 300s;

2. 如需調整 timeout，編輯 Nginx 配置：
   gcloud compute ssh momo-server --zone=asia-east1-a
   sudo nano /etc/nginx/sites-available/momo
   # 修改 location / { 區塊內的 proxy_*_timeout 值
   sudo nginx -t && sudo systemctl reload nginx

3. 如問題持續，考慮：
   - 查詢優化（已添加 11 個索引）
   - 增加 Gunicorn timeout（目前 120 秒）
   - 實作分頁或快取機制
   - 升級 VM 規格（✅ 已升級：e2-standard-2, 8GB RAM）

效能優化歷程：
   - 2026-01-13: Nginx timeout 增加到 300 秒
   - 2026-01-13: VM 記憶體從 4GB 升級到 8GB（解決 OOM 問題）
   - 記憶體使用率：從 94% 降至 7.5%，可用記憶體 6.9GB

【VM 規格升級方法】
如需再次升級 VM 規格：
1. 停止實例：gcloud compute instances stop momo-server --zone=asia-east1-a
2. 更改類型：gcloud compute instances set-machine-type momo-server --machine-type=e2-standard-4 --zone=asia-east1-a
3. 啟動實例：gcloud compute instances start momo-server --zone=asia-east1-a
4. 驗證升級：gcloud compute ssh momo-server --zone=asia-east1-a --command="free -h"

可用機器類型：
- e2-standard-2: 2 vCPU, 8GB RAM (當前)
- e2-standard-4: 4 vCPU, 16GB RAM
- e2-standard-8: 8 vCPU, 32GB RAM

================================================================================
                            重要檔案位置
================================================================================

【本機環境】
- 專案根目錄：/Users/ogt/momo_pro_system/
- 資料庫：data/momo_database.db
- 配置檔：config.py, .env
- Google Drive：config/google_credentials.json, config/google_token.pickle
- 備份目錄：backups/
- 日誌目錄：logs/

【生產環境 (VM)】
- 專案目錄：/home/ogt/momo_pro_system/
- 虛擬環境：/home/ogt/momo_pro_system/venv/
- 資料庫：/home/ogt/momo_pro_system/data/momo_database.db
- 配置檔：/home/ogt/momo_pro_system/.env
- Systemd 服務：/etc/systemd/system/momo.service
- Nginx 配置：/etc/nginx/sites-available/momo
- SSL 證書：/etc/letsencrypt/live/momo.wooo.work/
- DuckDNS 腳本：/home/ogt/duckdns/duck.sh
- Gunicorn 日誌：
  - Access: /home/ogt/momo_pro_system/logs/gunicorn-access.log
  - Error: /home/ogt/momo_pro_system/logs/gunicorn-error.log
- 系統日誌：sudo journalctl -u momo

================================================================================
                      系統重啟後待辦事項清單
================================================================================

【本機開發環境重啟】

1. 啟動系統：
   cd /Users/ogt/momo_pro_system
   python app.py

2. 驗證匯入功能 (關鍵)：
   - 進入「系統設定」頁面，匯入 Excel 報表。
   - 觀察終端機日誌，確認出現「自動去重」或「已建立新資料表」的訊息。
   - 若重複匯入相同檔案，應顯示「發現 X 筆重複資料，已忽略」。

3. 檢查資料顯示：
   - 進入「業績分析」頁面 (/sales_analysis)。
   - 確認 '狀態' 欄位是否正確顯示 'F' (目前系統處於原始匯入模式，未執行強制轉 0)。

4. 決定清理策略：
   - 目前 app.py 中的「智慧資料清理」邏輯已被註解掉 (約第 1160 行)。
   - 若確認資料無誤且不需要自動轉型，可維持現狀。
   - 若需要恢復清理功能，請取消註解並重啟 app.py。

5. 系統備份：
   - 確認一切正常後，點擊「系統備份」按鈕或執行 `python backup_system.py`。

【進階報表與策略分析規劃 (Phase 2)】

6. [已完成] 營運成長報表 (Growth Strategy):
   - 建立獨立頁面 `growth_analysis.html`。
   - 實作 MoM (月增率) / YoY (年增率) 雙軸趨勢圖。
   - 實作 YTD (年初至今) 累計達成率。
   - 實作 客單價 (AOV) 趨勢分析。

7. [已完成] BCG 矩陣分析 (波士頓矩陣):
   - 已在業績分析頁加入散佈圖，並自動計算中位數劃分四象限。
   - 視覺化顯示：明星(黃)、金牛(綠)、問題(藍)、瘦狗(灰)。

8. [已完成] ABC 分析 (帕累托法則):
   - 已實作 A/B/C 類商品佔比計算與視覺化。
   - 已加入 Excel 匯出功能，包含 ABC 分類欄位。

9. [已完成] 廠商獲利能力排行:
   - 已在業績分析頁新增廠商排行表格。
   - 顯示總業績、毛利額、毛利率、SKU 數與平均單品產值。

10. [已完成] 淡旺季熱力圖:
    - 已實作 Month x Category 熱力圖。
    - 透過氣泡大小與顏色深淺，視覺化呈現各分類在不同月份的業績表現。

【系統優化與維護 (Phase 3)】

11. [已完成] 業績分析頁面效能優化:
    - 實作 Server-side AJAX 載入列表資料，解決頁面卡頓問題。
    - 優化篩選邏輯與快取機制。

12. [已完成] 淡旺季熱力圖匯出:
    - 實作點擊氣泡匯出該月份分類明細的功能。

13. [已完成] 廠商排行與詳細列表優化:
    - 廠商排行：新增佔比、銷量、ASP 欄位，並優化版面高度。
    - 詳細列表：改為多維度聚合 (商品+品牌+廠商+分類)，新增品牌、均價、退貨率欄位。

14. [已完成] ABC 分析列表增加商品ID欄位:
    - 在 ABC 詳細報表頁面與匯出 Excel 中增加「商品ID」欄位。

【待辦功能與驗證 (Phase 4)】

15. [待辦] 廠商排行互動優化:
    - 實作點擊廠商名稱，自動跳轉並篩選該廠商的所有商品。

16. [待辦] 商品看板庫存顯示:
    - 研究是否能從爬蟲抓取一般商品的庫存量 (目前僅 EDM/Festival 有抓取)。
    - 若可行，在商品看板列表加入庫存欄位。

17. [已完成] 當日業績看板 (Daily Sales Dashboard):
    【功能目標】
    - ✅ 建立新頁面 `/daily_sales`，用於每日業績快照的分析與追蹤。

    【資料表設計】
    - ✅ 新建資料表 `daily_sales_snapshot`。
    - ✅ 欄位結構與 `realtime_sales_monthly` 相同，並額外增加 `snapshot_date` (日期) 欄位。
    - ✅ 實作自動去重機制，避免重複匯入相同日期的資料。

    【Excel 匯入功能】
    - ✅ 提供 Excel 上傳功能，欄位對應 `realtime_sales_monthly` 結構。
    - ✅ 智慧匯入：從 Excel 的「日期」欄位自動拆分 snapshot_date（支援單檔多日）。
    - ✅ 匯入後自動記錄快照日期，保留歷史記錄供比較分析。

    【KPI 卡片顯示】
    - ✅ 6 個核心指標卡片，每個指標計算 DoD% 和 WoW%：
      1. 總業績 (DoD%, WoW%)
      2. 總成本 (DoD%, WoW%)
      3. 毛利 (DoD%, WoW%)
      4. SKU 數 (DoD%, WoW%)
      5. 客單價 (DoD%, WoW%)
      6. 總銷量 (DoD%, WoW%)
    - ✅ KPI 卡片文字對比度優化（白色文字 + 陰影）

    【分析圖表】
    - ✅ 每日業績趨勢圖（混合圖表：柱狀 + 折線）
    - ✅ DoD 成長率圖（條件著色）
    - ✅ WoW 成長率圖（前 7 天灰色 + 第 8 天起彩色 + 說明工具提示）
    - ✅ 商品 Top 10 排行（橫向柱狀圖）

    【業績行事曆視圖】（全新功能）
    - ✅ 完整月份行事曆，顯示每日業績、毛利、SKU、客單價、銷量
    - ✅ 星期標註（週一～週日）
    - ✅ 2026 年台灣國定假日標註（根據人事行政總處公佈）
    - ✅ DoD 顏色系統：紅色 = 正成長，綠色 = 負成長
    - ✅ DoD 百分比標籤顯示（右上角）
    - ✅ 行事曆文字對比度優化（彩色背景上的白色文字 + 陰影）
    - ✅ 點擊日期切換查看詳細業績
    - ✅ 月份切換按鈕（上個月/下個月）

    【詳細列表】
    - ✅ 顯示當日各分類的業績明細（分類層級聚合）
    - ✅ 支援 DataTables 排序、搜尋、分頁功能

    【日期選擇功能】
    - ✅ 下拉選單顯示所有可用日期
    - ✅ 切換日期時，KPI、圖表、列表同步更新
    - ✅ 行事曆與日期選擇器連動

    【UI/UX 優化】（2026-01-12 完成）
    - ✅ 行事曆視覺優化：移除彩色背景，改用白底黑字 + DoD 徽章（上漲紅色、下跌綠色）
    - ✅ 金額格式改為完整顯示（千分位）：$123,456 取代 $123K
    - ✅ 移除行事曆日期格中的重複星期顯示（標題列已有星期標註）
    - ✅ 國定假日標籤改為日期右側顯示（inline layout）
    - ✅ 響應式設計優化：
      • 手機版採用橫向滾動（min-width: 700px）
      • KPI 標籤改用 emoji 圖示（💰業績、📊毛利、📦SKU、🛒客單、📈銷量）
      • 平板與手機適配字體大小與間距
      • 新增滾動提示訊息

    【多維度分析強化】（2026-01-12 完成）
    - ✅ 每日趨勢圖：多 Y 軸顯示（業績/毛利、客單價、銷量）
    - ✅ DoD 圖表：4 條線（業績、毛利、客單價、銷量）
    - ✅ WoW 圖表：4 條線 + 前 7 天灰色顯示 + 工具提示說明
    - ✅ 行事曆每格顯示 5 項指標（業績、毛利、SKU、客單價、銷量）
    - ✅ 毛利計算修正：自動計算 (revenue - cost)

    【廠商維度增強】（2026-01-12 完成）
    - ✅ Top 10 商品：顯示格式改為「商品名稱 (廠商名稱)」
    - ✅ 分類業績明細：新增廠商欄位，顯示廠商名稱（非 ID）
    - ✅ 欄位優先順序修正：['廠商名稱', '廠商', 'Vendor', 'Supplier']

    【系統配置更新】（2026-01-12 完成）
    - ✅ 服務端口從 5888 改為 80
    - ✅ 資料庫路徑確認：data/momo_database.db

    【已完成測試】
    - ✅ 行事曆顯示 5 項指標（完整金額 + 千分位）
    - ✅ 2026 年國定假日正確標註
    - ✅ DoD 徽章顏色系統（紅色上漲、綠色下跌）
    - ✅ WoW 圖表灰色線條邏輯（前 7 天無對比資料）
    - ✅ 行事曆文字清晰可讀（白底黑字 + DoD 徽章）
    - ✅ 月份切換功能
    - ✅ 日期選擇功能
    - ✅ 手機版橫向滾動（行事曆、分類列表、Top 10 圖表）
    - ✅ 廠商名稱顯示（Top 10 + 分類明細）
    - ✅ 手機版 KPI 文字可見性優化（行事曆標籤由灰色改為深色）
    - ✅ 毛利率百分比顯示（顯示於毛利金額右側）
    - ✅ DoD/WoW 徽章對比度優化（改用深色背景白色文字）
    - ✅ 分類業績明細表格手機版滾動（min-width: 800px）
    - ✅ Top 10 商品圖表手機版滾動（min-width: 400-500px）

    【修正的檔案】
    - app.py (第 3376-3450 行)：多維度圖表數據準備（DoD/WoW 計算、毛利計算、廠商維度）
    - app.py (第 3416, 3459 行)：廠商欄位優先順序修正
    - app.py (第 3456-3492 行)：台灣國定假日資料
    - app.py (第 3548-3628 行)：行事曆數據計算（客單價、銷量、毛利）
    - app.py (第 3752-3791 行)：行事曆數據準備函式（margin_rate 計算）
    - app.py (多處)：服務端口從 5888 改為 80
    - daily_sales.html (第 42-287 行)：CSS 樣式重構（白底黑字、DoD 徽章、響應式設計）
    - daily_sales.html (第 106-114 行)：Top 10 圖表響應式滾動容器樣式
    - daily_sales.html (第 177-200 行)：行事曆 HTML（5 項指標完整顯示）
    - daily_sales.html (第 227-242 行)：行事曆 KPI 文字顏色與毛利率樣式
    - daily_sales.html (第 260-262, 277-279 行)：手機版 Top 10 圖表最小寬度設定
    - daily_sales.html (第 387 行)：毛利率百分比顯示（inline 於毛利右側）
    - daily_sales.html (第 408-521 行)：DoD/WoW 徽章改用深色背景
    - daily_sales.html (第 580-588 行)：Top 10 圖表容器結構（加入滾動提示與響應式容器）
    - daily_sales.html (第 605-640 行)：分類列表表格響應式容器（加入滾動提示）
    - daily_sales.html (第 644-896 行)：Chart.js 多維度圖表配置

【系統架構優化與重構 (Phase 5)】

18. [已完成] 商品看板視覺優化 (V9.2)：
    【爬蟲效能優化】（2026-01-12 完成）
    - ✅ 商品圖爬取改用 i_code 直接構造 CDN URL
    - ✅ 格式：https://m.momoshop.com.tw/moscdn/goods/{i_code}_m.webp
    - ✅ 移除複雜 DOM 查詢（8+ CSS 選擇器），速度提升 20-30%
    - ✅ 提高圖片載入準確性與穩定性

    【UI/UX 全面升級】（2026-01-12 完成）
    - ✅ 統一紫色主題風格（#667eea, #764ba2）與 Daily Sales 一致
    - ✅ 現代化漸變效果（卡片、按鈕、表頭）
    - ✅ 商品卡片懸停動效（陰影、縮放）
    - ✅ 表格樣式優化（漸變表頭、hover 效果）
    - ✅ 商品圖片懸停效果（放大、邊框、陰影）
    - ✅ 分頁按鈕圓角與漸變設計

    【版面與排版修正】（2026-01-12 完成）
    - ✅ 修正按鈕群組排版（全部、新上架、漲價、跌價、下架）
    - ✅ 修正表格文字可見性（tbody 文字顏色 #2c3e50）
    - ✅ 修正商品列表標題區塊（增加 card-body 包裹）
    - ✅ 商品 ID 字體放大至 0.875rem（原 small class）
    - ✅ 商品 ID 改用紫色主題色（#667eea）

    【互動體驗增強】（2026-01-12 完成）
    - ✅ 價格顯示 hover 效果（背景漸變、放大、陰影）
    - ✅ 複製品號視覺回饋優化（✅ emoji + 縮放動畫）
    - ✅ 歷史圖表 Modal 視覺升級（漸變標題、圓角、陰影）
    - ✅ 圖表優化：漸變填充、平滑曲線、動態點樣式
    - ✅ Tooltip 優化：emoji 圖示、深色背景、紫色邊框
    - ✅ 圖表動畫：1 秒平滑動畫（easeInOutQuart）

    【修正的檔案】
    - scheduler.py (第 228-244 行)：商品圖 URL 構造邏輯
    - app.py (第 88 行)：版本號更新至 V9.2
    - dashboard.html (第 166-331 行)：完整 CSS 重構
    - dashboard.html (第 462-500 行)：商品列表標題區塊結構調整
    - dashboard.html (第 548-550 行)：商品 ID 樣式修正
    - dashboard.html (第 582-587 行)：價格顯示互動效果
    - dashboard.html (第 730-813 行)：圖表漸變與動畫配置
    - dashboard.html (第 777-789 行)：複製回饋動畫

19. [已完成] 商品看板 KPI 卡片重構與新增指標 (V9.3)：
    【需求整合】（2026-01-12 完成）
    - ✅ 將原有 4 張 KPI 卡片整合為 2 張卡片
    - ✅ 新增 7 個關鍵業務指標
    - ✅ 優化視覺層次與資訊密度
    - ✅ 提升使用者體驗與數據可讀性

    【卡片 1：商品監控概況】（2026-01-12 完成）
    - ✅ 監控商品總數（千分位格式化）
    - ✅ 今日新增商品數
    - ✅ 週增長（過去 7 天新增商品數）
    - ✅ 價格穩定商品數（7 天內無變價）

    【卡片 2：今日價格動態】（2026-01-12 完成）
    - ✅ 上排：漲價 / 降價 / 下架（3 個主要變動指標）
    - ✅ 中排：平均漲幅 / 平均跌幅 / 活躍度（價格分析）
    - ✅ 下排：最活躍分類 / 最大變動（關鍵商業指標）

    【新增 KPI 指標】（2026-01-12 完成）
    - ✅ 平均漲幅：漲價商品平均價格變動
    - ✅ 平均跌幅：降價商品平均價格變動
    - ✅ 今日活躍度：有價格變動的商品百分比
    - ✅ 週增長：過去 7 天新增商品數
    - ✅ 價格穩定商品數：7 天內價格無變化的商品數
    - ✅ 最活躍分類：今日變動商品數最多的分類
    - ✅ 最大變動：單一商品最大價格變動（含商品名稱）

    【後端數據計算】（2026-01-12 完成）
    - ✅ 平均漲跌幅計算邏輯（sum / count）
    - ✅ 活躍度百分比計算（變動商品 / 總商品 * 100）
    - ✅ 最大變動商品查找（絕對值比較）
    - ✅ 週增長查詢（7 天內 min(timestamp) 的商品數）
    - ✅ 價格穩定商品統計（7 天內 distinct(price) == 1）
    - ✅ 最活躍分類統計（category_activity 字典統計）

    【前端視覺優化】（2026-01-12 完成）
    - ✅ 新增 .kpi-grid CSS 樣式（3 欄網格佈局）
    - ✅ 新增 .kpi-item 樣式（漸變背景、hover 效果）
    - ✅ 顏色區分：increase (紅色) / decrease (綠色) / neutral (灰色)
    - ✅ 響應式設計：手機版改為單欄佈局
    - ✅ 卡片 1 藍色漸變背景（與 Daily Sales 風格一致）
    - ✅ 卡片 2 白色背景 + 網格佈局（清晰易讀）

    【修正的檔案】
    - app.py (第 494-554 行)：新增 KPI 計算邏輯
    - app.py (第 659-692 行)：render_template 傳遞新 KPI 數據
    - app.py (第 88 行)：版本號更新至 V9.3
    - dashboard.html (第 369-421 行)：新增 KPI 網格樣式
    - dashboard.html (第 440-448 行)：響應式設計更新
    - dashboard.html (第 477-585 行)：完整 2 張卡片 HTML 結構

20. [待辦] 爬蟲邏輯統一與效能優化 (Scheduler):
    - 將 run_momo_task 的優化邏輯 (批次寫入、無例外查找) 套用到 run_edm_task 與 run_festival_task。
    - 提升 EDM 與購物節爬蟲的穩定性與速度。

21. [待辦] 首頁 (Dashboard) 效能優化:
    - 對 get_consolidated_data 實作短時間快取 (5-10分鐘)，減少資料庫全表掃描。
    - 評估改用 SQL 分頁取代記憶體分頁。

22. [待辦] 程式碼重構與模組化:
    - 將 app.py 的路由拆分為 Blueprints (dashboard, analysis, api)。
    - 將資料處理邏輯移至 services 層。

23. [待辦] 清理冗餘程式碼:
    - 移除 database/manager.py 中不再使用的 update_data 函式。

【系統安全強化 (Phase 6) - URGENT】

=== 重大安全風險 (Critical - 須立即修復) ===

24. [CRITICAL] 移除硬編碼敏感資訊:
    - 檔案: config.py (第 17, 22, 26, 35, 40, 173 行)
    - 問題: 所有 API 金鑰、密碼、Token 直接寫在程式碼中
      • LOGIN_PASSWORD = "<LOGIN_PASSWORD>"
      • TELEGRAM_BOT_TOKEN = "<TELEGRAM_BOT_TOKEN>"
      • LINE_CHANNEL_ACCESS_TOKEN = "nD6MSXjB2FyB111zpT6Yik5B275mi6olHjjf94VnqN..."
      • EMAIL_HOST_PASSWORD = "jopokbhdpnnborjd"
      • NGROK_AUTH_TOKEN = "36e27NM5V7sUJ8QxJIAAWCp7sUv_3brtcrBarYvcP3SbvFKhF"
    - 風險: 任何有權限看到程式碼的人都能取得所有帳密，可接管系統
    - 修復:
      1. 安裝 python-dotenv: pip install python-dotenv
      2. 建立 .env 檔案存放所有敏感資訊
      3. 將 .env 加入 .gitignore
      4. 更新 config.py 改用 os.getenv() 讀取環境變數
      5. **立即更換所有已外洩的密碼與 Token**

25. [CRITICAL] 修復 SQL Injection 漏洞 #1:
    - 檔案: app.py (第 2539, 3469 行)
    - 問題: 使用字串插值直接組合 SQL 查詢
      • df_existing = pd.read_sql(f"SELECT * FROM {table_name}", engine)
      • df = pd.read_sql(f"SELECT {', '.join(req_cols)} FROM {table_name}", db.engine)
    - 風險: 攻擊者可透過惡意表格名稱執行任意 SQL 命令，竊取或刪除資料
    - 修復: 使用參數化查詢，或建立白名單驗證表格/欄位名稱

26. [CRITICAL] 修復 SQL Injection 漏洞 #2:
    - 檔案: database/manager.py (第 43, 52, 57 行)
    - 問題: ALTER TABLE 語句使用字串插值組合 SQL
      • session.execute(text(f"ALTER TABLE products ADD COLUMN updated_at TIMESTAMP DEFAULT '{now_str}'"))
    - 風險: 若 now_str 包含單引號可導致 SQL injection
    - 修復: 使用 SQLAlchemy 的 literal() 或驗證輸入格式

=== 高風險漏洞 (High - 本週內修復) ===

27. [HIGH] 強化登入驗證機制:
    - 檔案: auth.py (第 30-41 行)
    - 問題:
      • 明文密碼比對 (input_password == LOGIN_PASSWORD)
      • 無登入失敗次數限制
      • 無帳號鎖定機制
      • 使用簡單電話號碼作為密碼
    - 風險: 易遭受暴力破解攻擊
    - 修復:
      1. 使用 werkzeug.security 的 generate_password_hash / check_password_hash
      2. 實作登入失敗計數 (IP-based)
      3. 5 次失敗後鎖定 5 分鐘
      4. 要求更換為強密碼 (8+ 字元，含英數符號)

28. [HIGH] 加入 CSRF 防護:
    - 檔案: app.py (多處 POST 路由)
    - 問題: 所有 POST/PUT/DELETE 端點皆無 CSRF Token 驗證
    - 風險: 攻擊者可偽造請求執行未授權操作 (如刪除資料、修改設定)
    - 修復:
      1. 安裝 Flask-WTF: pip install Flask-WTF
      2. 在 app.py 設定 app.config['WTF_CSRF_ENABLED'] = True
      3. 在所有表單加入 {{ csrf_token() }}
      4. 為 AJAX 請求設定 X-CSRFToken header

29. [HIGH] 修復路徑遍歷漏洞:
    - 檔案: app.py (第 2069-2070 行)
    - 問題: 未驗證檔案路徑是否超出允許目錄
      • potential_path = os.path.join(BASE_DIR, 'web/static/screenshots', filename)
    - 風險: 攻擊者可使用 ../../../etc/passwd 存取系統檔案
    - 修復: 使用 pathlib.Path.resolve() 確保路徑在合法目錄內

30. [HIGH] 檔案上傳驗證:
    - 檔案: app.py (第 2406-2422 行)
    - 問題: 上傳 Excel 檔案無驗證
      • 未檢查副檔名
      • 未檢查檔案大小
      • 未驗證 MIME type
    - 風險: 可上傳惡意檔案 (如 webshell, 病毒)，或透過大檔案導致 DoS
    - 修復:
      1. 白名單副檔名: ['xlsx', 'xls', 'csv']
      2. 限制檔案大小: 10MB
      3. 使用 werkzeug.utils.secure_filename() 清理檔名
      4. 驗證 MIME type

=== 中風險漏洞 (Medium - 本月內修復) ===

31. [MEDIUM] 缺少 HTTP 安全標頭:
    - 檔案: app.py (全域)
    - 問題: 未設定安全相關 HTTP headers
    - 風險: 易受 XSS、點擊劫持、MIME type sniffing 攻擊
    - 修復: 在 @app.after_request 加入以下 headers:
      • X-Content-Type-Options: nosniff
      • X-Frame-Options: DENY
      • X-XSS-Protection: 1; mode=block
      • Strict-Transport-Security: max-age=31536000
      • Content-Security-Policy: default-src 'self'

32. [MEDIUM] Session 安全性不足:
    - 檔案: auth.py (第 34 行)
    - 問題: Session cookie 設定不安全
    - 風險: Session 易被劫持或遭 CSRF 攻擊
    - 修復: 在 app.py 設定:
      • app.config['SESSION_COOKIE_SECURE'] = True  # HTTPS only
      • app.config['SESSION_COOKIE_HTTPONLY'] = True  # 防 XSS
      • app.config['SESSION_COOKIE_SAMESITE'] = 'Lax'  # 防 CSRF
      • app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=2)

33. [MEDIUM] 弱亂數產生器:
    - 檔案: app.py (第 720 行)
    - 問題: 使用時間戳生成 ID
      • new_id = int(time.time() * 1000)
    - 風險: ID 可預測，攻擊者可猜測其他資源 ID
    - 修復: 使用 secrets.randbits(64) 產生密碼學安全的隨機數

34. [MEDIUM] 敏感資訊洩漏:
    - 檔案: 多個日誌輸出
    - 問題: 日誌可能記錄敏感資料 (密碼、Token、個資)
    - 風險: 日誌檔若外洩會暴露機密資訊
    - 修復:
      1. 檢視所有 log.info / log.debug 輸出
      2. 實作密碼遮罩函式 (顯示前 2 後 2 碼，中間用 * 遮蔽)
      3. 避免記錄完整 Token 或信用卡資訊

35. [MEDIUM] SSRF / Open Redirect 風險:
    - 檔案: app.py (第 756-778 行)
    - 問題: 未驗證外部 URL 就發送請求
      • response = requests.get(url, headers=headers, timeout=10)
    - 風險: 攻擊者可探測內網服務或發動 SSRF 攻擊
    - 修復:
      1. 建立 URL 白名單或黑名單
      2. 禁止存取私有 IP (127.0.0.1, 10.0.0.0/8, 192.168.0.0/16)
      3. 使用 urllib.parse 驗證 URL 格式

36. [MEDIUM] 資源耗盡風險:
    - 檔案: app.py (多處查詢)
    - 問題:
      • 查詢結果無分頁限制
      • 無請求速率限制
      • 檔案上傳無大小限制
    - 風險: 攻擊者可發送大量請求或上傳大檔案導致服務中斷
    - 修復:
      1. 安裝 Flask-Limiter: pip install Flask-Limiter
      2. 設定 API 速率限制 (如 100 requests/min)
      3. 設定 app.config['MAX_CONTENT_LENGTH'] = 10 * 1024 * 1024  # 10MB
      4. 資料庫查詢加入 LIMIT 與分頁

37. [MEDIUM] 缺少授權檢查:
    - 檔案: app.py (多個路由)
    - 問題: 部分路由未加 @login_required 裝飾器
    - 風險: 未登入使用者可存取受保護功能
    - 修復: 檢視所有路由，確保需要登入的端點都有 @login_required

=== 後續安全維護建議 ===

38. [建議] 定期安全掃描:
    - 使用工具定期檢測漏洞:
      • bandit (Python 程式碼安全掃描): pip install bandit && bandit -r .
      • pip-audit (依賴套件漏洞掃描): pip install pip-audit && pip-audit
      • semgrep (進階程式碼分析): https://semgrep.dev/
    - 建議每月執行一次，或於部署前執行

39. [建議] 建立安全開發規範:
    - 制定 secure coding guidelines 文件
    - Code review 時檢查安全性
    - 使用 pre-commit hooks 執行安全掃描
    - 定期更新依賴套件至最新版本

40. [建議] 備份與災難復原計畫:
    - 確保資料庫定期備份
    - 建立系統還原 SOP
    - 測試備份還原流程
    - 考慮實作異地備份

================================================================================
                    【業績分析儀表板邏輯定義 (2026-01-15 修復確認)】
================================================================================
所有後續開發與維護，必須嚴格遵守以下邏輯與定義：

1. 數據聚合維度 (Aggregation Granularity):
   - Dashboard Top 3 卡片: 
     * 聚合鍵: `[商品ID, 商品名稱]` (不可僅用名稱，避免同名不同規商品混淆)。
     * 顯示名稱: 僅顯示 `商品名稱` (前端截斷)。
     * 目的: 確保卡片數值與詳細列表中的單品數值完全一致。
   - 詳細列表 (Modal): 
     * 聚合鍵: `[商品ID, 商品名稱, 品牌, 廠商名稱, 商品館(分類)]`。
     * 目的: 提供最完整的商品細節。

2. 利潤計算邏輯 (Profit Logic):
   - 通用公式: 
     * 若資料源存在「利潤」欄位 (`col_profit`): 優先使用 `SUM(col_profit)`。
     * 若無: 使用 `SUM(總業績) - SUM(總成本)`。
   - 應用範圍: 
     * 所有 KPI 卡片 (利潤、毛利率)。
     * 所有圖表 (BCG 矩陣)。
     * 詳細列表 SQL 查詢。
     * Excel 匯出功能。

3. 欄位映射與動態性 (Dynamic Column Mapping):
   - 機制: 必須優先從 `_SALES_PROCESSED_CACHE` 讀取 `cols_map`。
   - 禁止行為: 嚴禁在 SQL 查詢中硬編碼中文欄位名稱 (如 "商品館", "品牌", "總業績")。
   - 變數使用: 必須使用變數 (如 `col_category`, `col_amount`) 構建 SQL。

4. 篩選連動性 (Filter Consistency):
   - 全域連動: 任何全域篩選條件 (日期、分類、品牌、廠商、價格區間、毛利區間、關鍵字) 必須同時作用於：
     * 主畫面所有圖表 (趨勢圖、圓餅圖、長條圖)。
     * Top 3 商業洞察卡片。
     * 點擊卡片後的詳細列表 (Modal)。
     * 詳細列表的 Excel 匯出。

================================================================================
                    【V10.490 OpenClaw 舊策略 Action 相容修補】
================================================================================
2026-05-31:
- 正式日誌觀察到 ElephantAlpha 執行器收到 `agent=openclaw action=generate_market_strategy` 時，被誤判為未知步驟。
- 本次修補將 `generate_market_strategy` 納入既有 OpenClaw advisory no-op 清單，與 `generate_resource_optimization_strategy` 一致：
  * 只記錄 skipped warning
  * 不觸發 circuit breaker
  * 不執行外部策略動作
  * 不變更任何價格或正式候選資料
- 已補測試：舊策略 action 可安全跳過，未知 action 仍維持 fail-fast。
