Files
ewoooc/TODO_NEXT_STEPS.txt
2026-06-01 13:17:06 +08:00

1260 lines
168 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
================================================================================
前端 V3 守門落地 + FastAPI 重新評估 (2026-05-12) [IN PROGRESS]
================================================================================
【已完成】
- 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 vetoHOOOME 暖燈材質差留人工覆核,搜尋詞也會優先帶香味/色名,提升 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 bucketmigration 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 rowsDashboard / 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 boundaryAPI 不讀 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 boundaryAPI 不讀 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 actionsAPI 不讀 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 actionsAPI 不讀 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 confirmationAPI 不讀 token、不執行 CLI、不開 DB、不寫 queue、不更新 review_state、不掛 scheduler。
- V10.502 修正 AiderHeal 自動修復診斷鏈:先做 ADR-020 檔案白名單再打 110 preflight`tests/` finding 會明確略過而不誤報 repo preflightCode 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 confirmationAPI 不讀 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 confirmationAPI 不讀 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 confirmationAPI 不讀 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` 進 payloadAPI 不讀 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_persistedAPI 不建立 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-effectAPI 不建立 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 vetoHOOOME 大理石暖燈 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 vetoCOCODOR 經典擴香瓶多款任選 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 gatePOWERMAN 男性私密養護液 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 茶樹)直接 vetoNOW 椰子油膏 vs 乳木果油、港香蘭漢本 vs 艾魔菈爽身粉改為商品線硬擋;多色/多香/數字區間 catalog 對單一款式(粉餅盒、眉筆、眼線膠筆、車用擴香蕊等)只進 `variant_selection_review`,不自動進 accepted queue。
- V10.477 補 PChome 高分錯配防線SPF 數值不同(如 SPF25 vs SPF50直接 vetoMAKE 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 recoverymissing 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()` 成為共用 formatterOpenClaw 週報/日報/月報與競品簡報 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 guardrailsDashboard、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 planAPI/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 packageAPI/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/autofillPChome coverage/review queue 熱查詢改用 `JOIN LATERAL` 取 active 商品最新價,並補 Dashing Diva 品線召回搜尋詞。
- V10.359 導入 Browse.sh 可選爬蟲診斷與強化 MOMO/PChome 色號比對:新增 `BrowseShTool` wrapper、probe CLI 與操作手冊,讓 browse.sh 只作 selector/XHR/network trace 探勘、不進正式 schedulermatcher 補護甲油/洗手慕斯/足膜精準搜尋詞,保留小數規格,並對唇釉、妝前乳、素顏霜等顯性色號/色系不一致候選做 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-upAPI/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 gateAPI/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 gateAPI/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 gateAPI/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 gateAPI/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 smokeAPI/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 gateAPI/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 gateAPI/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 gateAPI/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 gateAPI/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 gateAPI/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 gateAPI/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 gateAPI/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 boundaryAPI/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 boundaryAPI/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 gateAPI/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 gateAPI/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 traceabilityAPI/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 sectionsAPI/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 promotionAPI/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 必須另開 gateAPI/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 後只留下 errorHermes 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 timeoutHermes scan 改 compact snippet + 35s/host timeout避免三主機各卡 120s 後被迫觸發 Gemini 備援。
- V10.278 補 PChome 競價摘要 30 分鐘共享快取與 feeder/backfill 主動清除,並新增市場情報 `candidate_queue_review_ai_summary_preflight` 預覽 gateAPI 只檢查未來摘要輸入與 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 → 111Gemini 只記為 `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 可讀性:功能開關、轉檔器與視覺模型改成中文 checklistVision 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 fallbackPPT 截圖送模型前轉輕量 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` 同頁預覽抽屜 selectorModal 標題改用獨立 `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` headerAI 推薦頁 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-036FastAPI 可作為 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.91V3 頁面 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 PASS23 個主要 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 平台別 scorerMOMO/PChome adapter 提供 URL/text 加權規則diagnostics 同時輸出 generic_score 與 platform_score仍只用於候選排序與人工診斷。
- Phase 7 confidence bandsdiagnostics 將候選標成 `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.95market_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 orderUI 新增「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、不連外、不掛 schedulerV10.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 rollbackV10.101 修正後成功 insert `momo/pchome/coupang/shopee` 四筆 seedread-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、不連外、不掛 schedulerUI 新增「既有資料橋接預覽」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 不連 DBCLI 可明確 `--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 planAPI/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 進 APIAPI/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 gateAPI/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 previewAPI/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 planAPI/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 bundlewriter implementation 本階段保持 disabledAPI/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 進 APIAPI/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 預設不連 DBexecute=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 packageAPI/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 manifestAPI/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 與輸出 schemaAPI/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_routeAPI/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 previewAPI/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 planAPI/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 gateAPI/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 planAPI/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 QAsample 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 QAin-app browser 窄版畫面確認側欄收合、卡片不水平爆版、候選狀態顯示 `momo/pchome/coupang/shopee:planned`。
- 測試:新增 `tests/test_market_intel_skeleton.py`,確認預設 flags 全關、adapter 不允許 network/write/scheduler手動 discovery / candidate preview 預設不發 requestparser/scorer/confidence 診斷只輸出 JSONUI 只使用 `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 fallbackNVIDIA NIM timeout、connection error、429 與 5xx 會嘗試下一個 fallback model400 等非暫時性請求錯誤不重試。
- 模組化治理守門:新增 `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 Driveconfig/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 行):行事曆 HTML5 項指標完整顯示)
- 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 = "0936223270"
• TELEGRAM_BOT_TOKEN = "8075645931:AAH-EGKMo8ZC4QJs-Nc1_0s92xHrGdQvdpg"
• 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。