Files
ewoooc/docs/memory/history_logs.md
OoO 133232e2f4
All checks were successful
CD Pipeline / deploy (push) Successful in 1m7s
V10.583 補 Paula PChome Nick 比價對齊
2026-06-04 14:13:37 +08:00

130 KiB
Raw Blame History

EwoooC 專案歷史紀錄 (History Logs)

📌 重大里程碑

  • 2026-04-29: ADR-018 四 AI Agent 自動化控制面立案Hermes / NemoTron / OpenClaw / ElephantAlpha 的告警、自癒、記憶與 HITL 邊界完成文件化。
  • 2026-04-29: ADR-017 Phase 3f 模組化收尾立案,啟動 DB metadata、路由雙註冊、cache、scheduler、模板與死碼清理六線收斂。
  • 2026-04-18: 專案正式正名為 EwoooCAI 治理架構 Phase 4 結案V10.3)。
  • 2026-02-13: WOOO AIOps SaaS 核心模組完成。
  • 2026-01-24: 曾嘗試遷移至 K3s後於 04-18 審計確認回歸 Docker Compose
  • 2026-01-12: 專案啟動MOMO 監控系統初版。

📅 詳細更新日誌 (考古存檔)

2026-06-01PChome 比價新鮮度操作閉環

  • V10.583 Paula's Choice 身體乳 PChome Nick 具名 alignment: matcher 新增 Paula's Choice 2%水楊酸身體乳210ml二入 的窄範圍 alignment讓 PChome Nick 補出的 水楊酸身體乳雙入組 / 210ml x2 可和 MOMO 品名對齊並進 exact / total_price / price_alert_exact。此版不泛用放寬中文入數;118ml二入組(金蓋限定版) 對上 PChome 效期品仍維持 manual_review / identity_review,不寫正式價差。
  • V10.582 PChome 比價通知專業分級 + Nick 副標身份證據: NemoTron 價格決策信封補齊 momo_pricecompetitor_pricecandidate_gap_pctsales_7d_delta_pct,避免 EventRouter / Telegram 模板拿不到核心價格事實。價格決策模板新增「通知分級」,將 match_type / price_basis / alert_tier 翻成直接價格威脅、單位價覆核、身份覆核或壓制告警,並同步顯示操作邊界;單位價或 identity 未確認時明確禁止以總價直接判定價格威脅。PChome crawler 另保留 Nick 副標為 match_name 給 matcher 使用UI/DB 顯示仍用原品名,讓容量、入數、濃度資訊可參與比對。
  • V10.581 重複單品組 retryable revalidation 接線: 將 V10.580 的安全 matcher 線接到 run_retryable_candidate_revalidation(),但只收 true_low_confidence 中舊診斷已是 match_type=exact / price_basis=manual_review、沒有 review block且命中具名安全商品線的候選。這讓 Bioneo / Cetaphil / Avene / Schick / KOSE 等重複單品組可以小批次重評並由最新版 matcher 決定是否寫入正式 competitor_prices,仍不開放泛用高分掃描。
  • V10.580 PChome 重複單品組 total-price 窄門 + 核心油種 veto: matcher 將同品牌、同入數、同基礎規格且名稱高度對齊的重複單品組,從 exact / manual_review 收斂到 exact / total_price / price_alert_exact;正式部署前以最新 true_low_confidence 重算213 筆高分候選中僅 7 筆符合自動寫入安全條件。同步新增 NEW DIRECTIONS 甜杏仁油 vs 杏桃核仁油 hard veto避免同容量同按壓頭但核心油種不同的候選被誤放行PChome 端缺規格的 Paula's Choice 雙入組仍停在 manual review。
  • V10.579 PChome 高信心 total-price safe family + Code Review timeout 收斂: matcher 新增 SAB 私密防護舒緩噴霧 30ml 與 Herbacin 小甘菊 20ml 護手霜的窄範圍 total-price safe 路徑。這些候選仍必須通過既有 score、hard veto、variant/commercial gap 與 overwrite protectionHerbacin 柔皙 vs 野生玫瑰跨 variant 反測維持不進正式價差。目的在不放寬 MIN_MATCH_SCORE 的前提下,把可證明同款的高信心 true_low_confidence 轉進正式比價覆蓋。同版將 Code Review GCP-B secondary timeout 預設由 60 秒收斂到 25 秒GCP-A preflight 不通且 GCP-B 生成卡住時更快回 deterministic local degraded不呼叫 Gemini/111。
  • V10.578 Code Review 靜態掃描 timeout 誤報修正: Hermes deterministic scan 對 requests.get/post/put/delete/patch 改檢查同一呼叫 block 的後續行,已在多行呼叫中帶 timeout= 時不再報「HTTP request 未設定 timeout」。這修掉 V10.577 preflight helper 被 Code Review 自己誤判為 MEDIUM 的噪音。
  • V10.577 Code Review Ollama host preflight: OpenClaw 架構評估在 explicit GCP host generate 前先以短 /api/version 探測健康度;若 GCP-A 從 188 連線 timeout會快速跳到 GCP-B gemma3:4b,避免每次等 primary generate timeout。此 preflight 只作用於 Code Review Ollama-first 路徑,仍維持 111 預設禁用、Gemini hard-disabled 預設不呼叫。
  • V10.576 PChome backlog lane 與 GCP-only Ollama retry 修補: /api/ai/pchome-match/backfill/status 的 coverage 與 operation backlog 同步輸出 catalog_variant_reviewcatalog_unit_reviewcatalog_identity_review,讓 Dashboard 操作建議可直接跳到三條人工隊列。同版修正 OllamaService.generate(allow_111_fallback=False):若 resolver 已快取到 111會改試尚未嘗試的 GCP-A/GCP-B allowlist不再直接 all 0 hosts failed,同時仍避免長分析落到 111。
  • V10.575 PChome 型錄可比覆核 lane 分流: catalog_comparable 進一步拆成 catalog_variant_reviewcatalog_unit_reviewcatalog_identity_review。Coverage SQL、review queue filter、Dashboard 分段、decision envelope 與 Webcrumbs host data 共用同一套 helper將選項/色號/款式、入數/商業條件、身份採用三種人工閉環路徑分開統計與瀏覽;仍維持 HITL不自動寫正式價差。
  • V10.574 PChome 型錄/任選可比覆核隊列: 將 V10.572 的 catalog_comparable_count 派生口徑正式接進 PChome review queue。高分、無 hard veto、具同品線身份證據但仍有任選/型錄/商業條件待確認的 true_low_confidence 會進獨立 catalog_comparable 篩選、狀態標籤與 decision envelope真正 true_low_confidence 會排除這批候選,避免重複出現在「證據不足」。此變更不放寬 MIN_MATCH_SCORE、不寫正式 competitor_prices、不算 exact matched只把最有機會人工批次確認的候選變成可操作隊列。
  • V10.574 市場情報 Source Governance → Fetch Target bridge: 新增 /api/market_intel/mcp_fetch_target_source_governance_review、preview service 與市場情報頁 bridge panel交叉審核 Professional Source Governance 與 MCP Fetch Target Review。此 gate 要求每個 target platform_code/source_key 都能對上已通過治理的公開 source contract並同步納入 deployment readiness preview-safe check 與 production smoke targetAPI/UI 仍不抓外站、不讀 robots/sitemap、不開 DB、不寫檔、不執行 CLI、不掛 scheduler。
  • V10.572 PChome 決策支援覆蓋率分層: 覆蓋率不再只有 exact decision_ready_ratefetch_competitor_coverage() cache 升到 v11新增 catalog_comparable_countdecision_support_countdecision_support_rate 與非 exact 支援數;只納入高分、無 hard veto、同時具型錄/任選/商業條件訊號與強身份證據且排除品類、品線、入數、香味、型號、價格極端等硬衝突的候選。Dashboard、daily、growth 與 backfill JS 同步顯示「決策支援覆蓋率 / 精準可告警覆蓋 / 型錄可比 / 單位價」,提升可用情報覆蓋但不污染正式 matched
  • V10.571 PChome pending 覆蓋率搜尋召回: competitor_price_feeder 預設每個商品最多搜尋詞由 5 組提升為 6 組,並新增 PCHOME_FEEDER_SEARCH_COVERAGE_RESCUE_ENABLED。補抓流程會在主要 matcher 搜尋詞與原始名稱 fallback 之間加入狹義 coverage rescue terms保留 5.5g / 2.4g 等小數規格,並過濾外出清潔、卸除髒汙、卸防曬等非身份核心噪音。正式 pilot 顯示 CeraVe / TUNEMAKERS / Embryolisse / Neogence / NIVEA 這類雙語品牌商品常卡在 PChome 搜尋召回,因此補上「英文品牌 + 中文品牌 + 核心身份 + 規格」窄搜尋詞;品牌 + 品類 + 規格 仍只對安全品類開放,目標是提升 pending/no_result 候選取得率,同時維持 matcher hard veto 與 MIN_MATCH_SCORE 不變。
  • V10.570 PChome 身份 / 報價證據契約: score_marketplace_match() 現在會在 match_diagnostic_json 內輸出 identity_evidenceoffer_evidence把品牌、品類、identity anchor、型號、規格、入數、variant guardrail 與價格 offer 拆層保存。competitor_intel_repository 會把這些證據轉成 difference_highlights 與 decision envelope 的 identity / offer evidence讓覆核頁、PPT、OpenClaw、Webcrumbs 與 Telegram 摘要都能理解「為何同款 / 為何不同 / 價格只是報價證據不是身份證據」。
  • V10.569 Webcrumbs 比價信封摘要串接: build_webcrumbs_marketplace_host_data() 讀取 fetch_competitor_review_queue() 後統一走 summarize_review_decision_envelopes(),在 host data payload 輸出 reviewDecisionBrief,並於 metadata 增加 review_queue_counthitl_countauto_execute_blocked_countdecision_envelope_source。Webcrumbs / Shared UI 現在和 Telegram、OpenClaw、PPT 共用同一份 PChome 覆核信封摘要,仍維持只讀、不呼叫 LLM、不抓外站、不寫 DB同版收錄 docs/guides/external_professional_benchmark.md 作為外部專業做法週巡檢落地準則入口。
  • V10.568 價格類決策信封專業 brief: decision_envelope 的價格 / PChome 覆核事件在 Telegram EventRouter 直送時,改以「標的、價格證據、比對證據、人工下一步」四段式排版呈現,保留 momo:eig: 忽略按鈕且不進 L1/L2 AI 重摘要。competitor_intel_repository 同步在 review queue 信封 subject 補上 momo_price / competitor_price,讓 Telegram、PPT、Webcrumbs 與 AI 摘要可共用同一份價格證據,不再各自補查或重組。
  • V10.567 MCP 市場洞察 GCP-only fallback: MCPCollectorService._ollama_topic_fallback() 改成只使用 GCP-A / GCP-B Ollama失敗後保守回本地 fallback不再把市場洞察長分析轉嫁到 111。預設 timeout 收斂為 25 秒、num_predict 收斂為 500避免 Elephant Alpha 在 GCP-A/GCP-B 短暫不可用時撞 60 秒總上限或造成 111 負載尖峰Gemini 仍維持 GEMINI_API_HARD_DISABLED=true 預設硬封鎖。
  • V10.565 PChome 覆蓋率操作建議: 補強 /api/ai/pchome-match/backfill/status,將低覆蓋率拆成 operation_backlog:刷新舊 identity、重評近門檻、補抓未配對、人工覆核、單位價覆核與過期搜尋救援預覽並新增 recommended_next_actionDashboard 狀態摘要會直接顯示建議下一步,避免使用者只看到低覆蓋率卻不知道該按哪條產線。
  • V10.563 正式 preview 假可救候選收斂: 針對正式 retryable_candidate_preview 露出的 M.A.C 蜜粉與 SAUGELLA 菁萃潔浴凝露案例補 guard。M.A.C 單邊明確色號(如 #絕絕紫)會進 variant_selection_review,維持 true_low_confidenceSAUGELLA 潤澤 / 日用型 / 加強 / 黃金女郎型互斥,直接 hard veto避免同品線不同私密清潔款式被當成 recoverable low_score。
  • V10.566 市場情報 Professional Source Governance: 新增 /api/market_intel/mcp_professional_source_governance、preview service/gates/sample 與市場情報頁卡片,將 robots/REP、sitemap/lastmod、JSON-LD / schema.org structured data、canonical URL、rate limit、公開資料邊界、provenance、snapshot hash 與 idempotency key 納入 source contract。此 gate 只審核操作員治理摘要,不抓外站、不讀 robots/sitemap、不開 DB、不寫檔、不掛 schedulerdeployment readiness 同步新增 preview-safe 檢查與 production smoke target。
  • V10.561 PChome 比價補強前端分段回饋: Dashboard 的 PChome 操作卡改名為「比價補強產線」,手動按鈕與確認文案同步說明三段流程;結果摘要會顯示刷新、重評、補抓各自的 matched/total讓操作員能判斷覆蓋率改善來自舊 identity 新鮮度回補、近門檻 matcher 回刷,或 pending 商品 fresh search 補抓。
  • V10.560 手動 PChome 比價補強三段式串接: /api/ai/pchome-match/backfill 與每日 scheduler 口徑對齊,手動執行時先小批次刷新過期 identity_v2,再跑近門檻候選重評,最後補抓高優先未配對商品。回傳結果新增 stale_identity_refresh 分段統計,讓後續 Dashboard、簡報與 AI 決策能區分覆蓋率改善來自舊 identity 新鮮度回補、matcher 回刷,還是 fresh search 補抓。
  • V10.559 retryable 有效身份新鮮度收斂: _fetch_retryable_candidate_skus() 的既有 identity 阻擋條件改成只接受 cp.expires_at > CURRENT_TIMESTAMP,不再讓 expires_at IS NULL 的未知新鮮度舊配對壓住近門檻候選回刷。未知新鮮度仍由 expired identity refresh / recovery 路徑處理,最後寫入仍必須通過現行 matcher、hard-veto、auto write safety 與 stronger existing production match 保護。
  • V10.558 legacy focused identity reason 回刷補漏: _fetch_retryable_candidate_skus() 在 V10.557 的具名 identity guard 之外,補上歷史資料缺 marker 的情境:舊 attempt 若沒有新版 focused_exact_total_price_safe,但已有具名 focused_exact_identity_* 且該 identity 屬於 matcher total-price safe set並且舊分數已達全域 MIN_MATCH_SCORE,可進近門檻重評。仍要求無 hard veto、exact_identity、無 commercial / variant / count / bundle 阻擋,最後由最新版 matcher 決定是否能寫正式價差。
  • V10.557 focused reason-based 回刷具名 identity guard: V10.555 的結構化 reason 回刷再收緊,_fetch_retryable_candidate_skus() 不只要求 focused_exact_total_price_safe,還必須同時命中一條具名 focused_exact_identity_* 且該 identity 來自 matcher 的 total-price safe set。這避免只有總開關、缺少身份線索的舊 attempt 被納入回刷rom&nd、Solone、Summers Eve 等 review-only focused line 仍被測試鎖在自動價差線外。
  • V10.556 GCP-B model fallback 防 111 過載: OllamaService.generate() 現在會在 GCP-B 對 coder/large 模型使用 host-compatible fallback預設 gemma3:4b),避免 GCP-B 缺 qwen2.5-coder:7b 時直接被標成 unhealthy 並把流量推到 111。HTTP 404 且訊息為 model not found 時視為模型缺失,不再 mark 整台 host unhealthy其他 HTTP / timeout 仍照舊標 unhealthy。主機順序仍是 GCP-A → GCP-B → 111。
  • V10.555 focused total-price reason-based 回刷窄門: _fetch_retryable_candidate_skus() 新增結構化 diagnostics reason 回刷入口,舊 attempt 若已帶 focused_exact_total_price_safe 且命中 matcher 的 FOCUSED_IDENTITY_TOTAL_PRICE_REASONS,即可進近門檻重評,不再完全依賴手寫商品名 SQL。此路徑仍要求分數下限、無 hard veto、exact_identity,並套用 commercial / variant / count / bundle 等阻擋理由rom&nd、Solone、Summers Eve 等 review-only focused line 不在 total-price reason set仍不會被推入自動價差。
  • V10.554 香氛 / 精油 focused exact 回刷接線: Herb24 晨霧純精油擴香儀黑色、Pavaruni 40 香味 10ml 精油、Pavaruni 20 香味 450g 香氛蠟燭、Derma 大地有機植萃護膚油 150ml 已明確列入 matcher 的 focused_exact_total_price_safe,並接入 _fetch_retryable_candidate_skus() 的近門檻舊候選回刷入口。SQL 仍要求 low_score / refresh_low_score / true_low_confidence、分數下限、無 hard veto、exact_identity且排除變體、商業條件與件數衝突Laundrin、好物良品融蠟燈、Yuskin 等帶人工覆核訊號的品線不納入本輪自動回刷。
  • V10.553 current PPT/AI 比價結果查詢瘦身: fetch_competitor_comparison_results() 不再用 ROW_NUMBER() OVER (PARTITION BY p.id ...)price_records 取得 current/latest MOMO 價格,改為 JOIN LATERAL 逐商品取最新價;有指定 end_date 的歷史報表仍把 pr.timestamp < DATE(:end_date) + INTERVAL '1 day' 放在 lateral 子查詢中,保留「截止日前最新 MOMO 價」語意。這降低簡報、OpenClaw/AI payload 與比價匯出在大量價格紀錄下的查詢成本。
  • V10.552 決策查詢新鮮度口徑收斂: Top competitor risks、PChome review queue、review sample 與 current PPT/AI 比價結果全部改成只吃 cp.expires_at > CURRENT_TIMESTAMP 的有效 PChome identity_v2 價格,不再把 expires_at IS NULL 當作有效現價。未知新鮮度現在只作 coverage 診斷與刷新入口不會被用來產生價格風險、簡報、AI 決策或從覆核隊列中排除。
  • V10.551 未知新鮮度刷新與補抓排序收斂: expires_at IS NULL 的 identity_v2 價格現在會被 _fetch_expired_identity_skus()_fetch_expired_identity_recovery_skus() 視為需要刷新 / 可搜尋救援的未知新鮮度資料,避免 V10.549 已排除出可決策覆蓋率後卻沒有刷新入口;兩條路徑都改用 JOIN LATERAL 取最新 MOMO 價,不再做 product-wide window scan。_fetch_unmatched_priority_skus() 同步改為 lateral latest price且把低風險 no_result / refresh_no_result 排到補抓前段,讓安全召回詞優先投入最可能回收的 SKU。
  • V10.550 安全搜尋召回詞補強: competitor_price_feeder 在既有精準搜尋詞之外,對低風險穩定品類補上一組 品牌 + 品類 recall keyword提升 no_result / refresh_no_result 找到候選的機率;高 variant 風險商品如美甲片、指甲油、唇彩、香氛/精油、粉底、防曬與含任選/色號/款式/香味的商品不走通用召回。DASHING DIVA 仍保留既有 line-specific recall 與 PChome sort fallback本次不更動 MIN_MATCH_SCORE、hard veto、auto write safety 或 stronger existing match 保護。
  • V10.549 比價新鮮度 KPI 口徑收斂: fetch_competitor_coverage() cache 升到 v10expires_at IS NULL 不再混入 fresh_matches / decision_ready_rate,改拆成 unknown_freshness_matchesunknown_freshness_rate,讓「可用比價覆蓋率」只代表有明確未過期時間的 identity 價格。Dashboard、daily、growth 同步顯示未知新鮮度與「未形成有效身份配對」,第一屏資料時間改看最新有效 PChome 價格抓取,並把價格方向文案改為 PChome 價格壓力 / MOMO 價格優勢
  • V10.548 focused exact 舊候選回刷接線: _fetch_retryable_candidate_skus() 的 focused true-low / rescore 窄門新增 3W CLINIC 膠原蛋白粉底液 50ml x2、花美水 Moisture/Inclear 1.7g x3、KUSSEN 寶寶益菌屁屁膏 50ml 3 入、Lab52 齒妍堂嬰幼兒 / 汪汪隊牙刷 2 入。這些品線在 matcher 測試中已是 exact / total_price / price_alert_exact,本次只讓舊 true_low_confidence / rescore_accepted_current 候選能被新版 matcher 重新判斷;仍不放寬 MIN_MATCH_SCORE、hard veto、auto write safety 與 stronger existing match 保護。
  • V10.547 單位價覆核洞察與證據鏈保留: manual_unit_price_required 現在會和 unit_comparable 一樣重新產生單位價比較,並轉成 unit_price_insight,明確標示 PChome 或 MOMO 哪邊單位價較低、差距百分比、嚴重度與操作建議Dashboard 覆核卡、商品列、決策信封與 OpenClaw/PPT 摘要都可讀到這個訊號。人工覆核寫回 competitor_match_attempts 時也會在欄位存在時保留原始 match_diagnostic_jsoncomparison_modehard_vetodiagnostic_codescompetitor_match_reviews.candidate_diagnostic 同步附帶 JSON 證據,避免人工閉環後只剩狀態文字。
  • V10.546 近門檻舊候選回刷隊列補漏: run_retryable_candidate_revalidation() 的候選來源不再只看每個 SKU 最新一筆 attempt。新增 legacy_unmasked_attempt,當最新狀態是 no_result / refresh_no_result / expired_match 時,可回撈同 SKU 早期 low_scorerecoverable_low_scoretrue_low_confidencerescore_accepted_current 的近門檻候選,再交給最新版 matcher 重評。此入口仍要求 candidate product id、分數下限、無 hard veto、exact_identity且不打開人工否決、單位價、identity_veto 或 protected existing match避免為了覆蓋率破壞安全邊界。
  • V10.545 Dashboard 比價覆蓋率口徑收斂: 商品看板與 PChome 覆核頁把「身份覆蓋率」與「可用比價覆蓋率」拆成明確欄位coverage cache 更新為 v9 並回傳 identity_coverage_*pending_identity_countstale_identity_countlast_decision_ready_crawled_at。覆核 KPI 改只計算真正待處理狀態,人工否決 / 人工單位價 / 需補研究另列 manual_closed_count避免人工閉環候選被混進待審總數。Dashboard 的 PChome competitor map 也改成只取新鮮、有效價格、identity_v2 的最新 row資料新鮮度改看可用比價 row不再被無效或低信心抓取紀錄撐高。
  • V10.544 變體安全與 YES 工具線收斂: 延續近門檻 low_score 救回,但把安全邊界補得更硬。新增 YES 德悅氏指甲工具精準線,只有同品牌、同工具線、同尺寸且同亮面/霧面/可收納/三面等關鍵款式時才進 total_price,並接入 revalidation SQL。同步新增未知香味差異與無型號指彩色名差異 hard vetoMUJI / COCODOR 不同香型、OPI 無型號不同色名不再被高分誤配HOOOME 暖燈陶瓷/玻璃/水晶/金屬等材質差保留人工覆核。搜尋詞對護手霜、擴香瓶、無型號指彩優先帶上香味/色名,提升 crawler 找到真同款候選的機率。
  • V10.543 rescore accepted 窄門回刷與高信心線補強: run_retryable_candidate_revalidation() 追加 rescore_accepted_current 窄門,只允許已進人工池且命中具名 focused exact 品線的候選重新評分,仍由 matcher 判定是否可寫正式價差。新增 SK-II 青春露 330ml 兩入、AMIINO 安美諾美白修護霜 30ml、YES 腳指甲剪刀 10.5cm、YES 極細指甲緣硬皮剪刀 9cm 的 total-price 安全線同時新增指甲油型號衝突防線ANNY A10.074.60 vs A10.500、OPI 不同 ISL... 型號都會 hard veto不會為了拉覆蓋率誤配色號。
  • V10.542 可用比價覆蓋率口徑拆分: fetch_competitor_coverage() 新增 decision_ready_matches / decision_ready_rate,以「高信心 identity 且價格仍新鮮」除以 ACTIVE 商品數,和 match_rate(身份覆蓋)及 fresh_match_rate已配對中的新鮮率分開。Dashboard 第一屏改顯示可用比價覆蓋率daily / growth / Webcrumbs / OpenClaw payload 同步輸出,避免使用者把舊截圖的低價格可用率、身份覆蓋率與新鮮率混成同一個 KPI。
  • V10.541 高信心覆核池 exact 線再收斂: 從正式覆核頁抓到多筆 rescore_accepted_current 仍卡人工的同款The Ordinary 咖啡因 EGCGMOMO 單側漏 30ml、Natures Care 綿羊油同入數、TOMOON 指甲剪同 L/S 尺寸、HH 私密潔淨露+私密衣物手洗精雙 200ml、SEBAMED 護潔露 200ml x2、YES 德悅氏 9cm 剪刀。新增 focused total-price 規則與 revalidation SQLTOMOON / O.P.I 仍要求同型號或同尺寸,避免跨款式誤配。
  • V10.540 O.P.I 指彩精準型號救回: 正式覆核頁面顯示多筆 O.P.I 類光繚 / 如膠似漆指彩因 score 0.76~0.83 停在 rescore_accepted_current 人工池,但雙方都有明確 ISL... 型號(如 ISLL87、ISLL00、ISLN25。新增 opi_gel_polish_exact_model focused total-price 規則:必須同品牌、同類光繚指彩線、共享型號 token不同型號/色號不自動通過。同步接入 revalidation SQL讓舊 true_low_confidence 指彩候選可批次重評。
  • V10.539 任選 catalog focused exact 與 commercial 防線: 新增 FLORTTE 水果沙拉眼線液筆 0.5ml、露得清護手霜 56g 無香/有香、Kanebo ALLIE 持采亮化 UV 防曬水凝乳 60g 的 focused total-price 規則,條件是雙方同品牌、同品線、同規格且任選 catalog 語意一致;同步接入 run_retryable_candidate_revalidation()。同時修正 focused bypass若存在 commercial_condition_gap(例如即期品),不得移除 variant_selection_review,避免商業狀態差異被自動寫入正式價差。
  • V10.538 ai_calls provider CHECK 對齊: 正式 scheduler Hermes/Ollama 全失敗時會以 provider=ollama_other 記錄未知/未選定 hostai_calls.chk_ai_calls_provider 舊白名單未包含此 telemetry bucket導致觀測寫入再撞 CHECK。新增 migration 043 放行 ollama_other,並讓 ai_call_logger 將空值、unknown、非白名單 provider 字串正規化為允許值;ollama_other 僅作遙測分類,不是模型路由目標。
  • V10.537 focused exact revalidation queue 接線: V10.536 只補 matcher 規則會影響新抓取,但無法批次回收既有 true_low_confidence 舊候選。run_retryable_candidate_revalidation() 新增 focused true-low 窄門:花美水 Relax、St.Clare 私密呼呼、BIOPEUTIC 果酸、台塑生醫、Elizabeth Arden 與理膚寶水若無 hard veto 與型別/款式/香味/件數/組合阻擋,可進重評;variant_selection_review 僅在這些具名安全線允許重跑,其他人工池不打開。
  • V10.536 高分 true_low_confidence focused exact 救回: production 抽樣顯示剩餘未覆蓋集中在 identity_vetotrue_low_confidence,其中部分 1.0 分樣本是同品牌、同品線、同規格/同組合,但因多件組或護唇/私密護理類型辨識保守而停在 manual review。新增花美水 Relax、St.Clare 私密呼呼、BIOPEUTIC 果酸、台塑生醫嬰兒沐浴洗髮、Elizabeth Arden 八小時護唇膏、理膚寶水全面修復潤唇膏的 focused total-price 規則;不放寬 MIN_MATCH_SCORE,也不移除色號/香味/款式防線。
  • V10.535 ElephantAlpha price trigger 查詢瘦身: 正式 scheduler 日誌顯示 price_drop_alert trigger 對整張 price_recordsDISTINCT ON 最新價造成 statement timeout。price_drop_alertmarket_opportunity 與 EA DB evidence prefetch 改為先篩最近有效 PChome identity_v2 競品,再用 JOIN LATERAL 只查該 SKU 最新 MOMO 價格,保留 match_score/tags/diagnostic evidence 給 Telegram HITL不再用全表最新價子查詢。
  • V10.534 rescore accepted gate 收緊與語意修正: 正式 96 筆 rescore_accepted_current 盤點顯示多數仍是 manual_review / identity_review,且有 2 筆 no_match / none / suppress 混入。收緊 classify_match_attempt_row()no_matchprice_basis=nonealert_tier=suppress 不得 gate pass新增 --retract-unsafe-accepted 可把既有 unsafe accepted 退回 true_low_confidence。Dashboard / daily / growth / OpenClaw 文案改成「重算待人工覆核」,明確表示仍需人工確認身份後才可寫正式價差。
  • V10.533 ElephantAlpha legacy OpenClaw advisory 相容: 正式 scheduler 日誌出現 Unrecognized step: agent=openclaw action=generate_dynamic_pricing_strategy,屬於舊協調器把建議型策略文字放進 execution plan。執行器現在將 generate_dynamic_pricing_strategy 納入既有 OpenClaw advisory no-op 清單,只記錄 skipped不觸發 circuit breaker也不轉成自動調價或外部呼叫。
  • V10.532 coverage / review queue 口徑對齊: V10.531 materialize 96 筆 rescore_accepted_currentDB 最新狀態正確,但 /api/ai/pchome-match/backfill/statusrescore_accepted_count 仍為 0。原因是 coverage 的 attempt_status 統計只看「完全沒有 identity」商品而 review queue 看的是「沒有新鮮有效 identity」商品。改為以 fresh_competitor 排除條件統計,讓 stale identity 的重算可採用待審能正確上屏;正式價差表仍未被 rescore materialize 寫入。
  • V10.531 PChome 安全 exact 規則補強: production refresh 顯示大量舊 identity 不是分數不足,而是被多件組 / 護唇品 variant 防線過度保守地擋在 identity_review。新增 safe_multi_component_exact_total_price:同品線、同規格、同數量且商品型別完全對齊、無 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。回歸測試保留 HH 混合組、TS6 香味衣物手洗精、粉底色號與蠟燭 catalog 不自動放行。
  • V10.530 retryable preview 輕量化與 recover-stale 安全閘: 正式站 profiling 證實 /api/ai/pchome-match/backfill/status 剩餘瓶頸在 revalidation_preview,約 12 秒;_fetch_retryable_candidate_skus() 改為先取每個 SKU 最新 attempt 並縮小到可重評候選,再 JOIN LATERAL 取單一最新 MOMO 價,不再對全量 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 輕量化: V10.527 的救援隊列在正式站 preview 時曾造成 status API 超時。改為雙階段篩選SQL 從過期 competitor_prices 小集合出發,只做 identity_v2、過期、exact/total_price/price_alert_exact 等必要條件並限制候選量,再用 JOIN LATERAL 取 ACTIVE 商品最新 MOMO 價variant / catalog / commercial condition / 高風險名稱訊號改在 Python 對小樣本過濾,避免 /api/ai/pchome-match/backfill/status 因全量 price_records、JSONB + regex preview 查詢拖垮。
  • V10.527 PChome 過期 identity 搜尋救援隊列收斂: V10.526 production smoke 發現直接對全部過期 identity_v2 做 rescue 會把香氛 / 色號 / 目錄款 / 商業狀態差異等人工覆核型 stale pair 送進慢速 fresh search20 筆耗時 361 秒且 0 筆成功。新增 _fetch_expired_identity_recovery_skus() 作為救援專用隊列,只收既有正式診斷為 exact_identity / total_price / price_alert_exact 且無 variant、catalog、commercial condition、count、bundle、unit-price 等阻擋理由的舊配對;名稱含任選、多款、香味、色號、即期、融燭燈、香氛蠟燭等高風險訊號先排除。
  • V10.526 PChome 重評預覽與過期 identity 搜尋救援: /api/ai/pchome-match/backfill/status 新增 60 秒快取的 revalidation_previewstale_recovery_previewDashboard 補抓產線顯示「可重評 / 窄門 / 可救援」數字;兩個 preview 都只讀 DB不啟動 PChome 搜尋、不呼叫 LLM、不寫 competitor_match_attempts 或正式價格表。另新增 /api/ai/pchome-match/recover-stale 與「救援過期 40 筆」按鈕,對過期 identity_v2 先查既有 product_id只有在舊 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 這批已由 V10.523 補 focused exact 規則的 true_low_confidence 舊候選。入口要求舊分數 >= 0.95、仍為 exact_identity、具備 strong_exact_spec_match,且不得含 commercial_condition_gap、variant、count、bundle、refill 等阻擋理由;讓已驗證真同款可被回刷,不把整個人工審核池自動打開。
  • V10.524 PChome 過期價格刷新手動入口: 商品看板 PChome 補抓產線新增「刷新過期 120 筆」按鈕與 /api/ai/pchome-match/refresh-stale,背景執行既有 run_expired_identity_refresh(),只刷新已建立 identity_v2 的 PChome product_id不跑 fresh search recovery、不呼叫 LLM完成後重算 AI 挑品並清除 Dashboard / competitor intel cachestale_matches 從觀測指標變成可直接操作的任務。
  • V10.523 高分真同款 exact identity 比價規則補強: 針對正式環境反覆出現、分數已達 1.0 但因 multi_component_pair 或 variant review gate 被留在人工審核的真同款,補 Beauty Foot 足膜、KAMERIA 積雪草足膜、TS6 蜜愛潤滑液 / 蜜桃煥白凝膠 / 極淨白+煥白組合、Vaseline 嬰兒高純修護凝膠 focused exact identity。這些案例只有在品牌、品線、容量 / 重量與入數完全對齊時才進 exact / total_price / price_alert_exactTS6 香味衣物手洗精等款式敏感商品仍維持 manual_review,全域 MIN_MATCH_SCORE 與 overwrite 保護不變。
  • V10.522 PChome backfill status 附帶 coverage snapshot: /api/ai/pchome-match/backfill/status 在背景任務狀態外同步回傳 read-only fetch_competitor_coverage() 摘要包含身份覆蓋、新鮮率、過期價格與待補抓數Dashboard 補抓產線即使尚無最近 run result也會顯示「身份覆蓋 / 新鮮 / 待刷新 / 待補抓」,讓操作員能分辨下一步該跑 expired identity refresh 還是 unmatched backfill。此狀態端點不寫 DB、不呼叫 LLM、不抓外站。

2026-05-31Webcrumbs 共用 UI Runtime 與市場情報 writer approval

  • V10.521 比價新鮮度 stale 指標上屏: 首頁比價監控總覽、PChome 補抓產線、daily 競價覆蓋與 growth 比價資料品質同步顯示 stale_matches / 價格過期數,讓操作員能分清「已確認同款但價格待刷新」與「尚未找到身份配對」,不再只看到新鮮率下降。過期 identity refresh 也優先刷新 total_price / price_alert_exact 的正式價差配對,讓最能進決策與告警的舊價格先回新鮮。
  • V10.520 PChome 過期價格刷新快慢路徑拆分: run_expired_identity_refresh() 改為只刷新已確認 identity_v2 的既有 PChome product_id若 product_id 已查不到或回傳後低分,不再同步跑慢速 fresh search recovery而是記錄 refresh_no_result / low-score 並交給 run_retryable_candidate_revalidation() 的近門檻救援路徑。這能避免正式回刷 500+ 筆時被少數缺失 ID 拖到長時間卡住,讓價格新鮮度批次回升更可控。
  • V10.519 Webcrumbs host data metadata 對齊新覆蓋率口徑: Webcrumbs host data metadata 同步輸出 fresh_match_countfresh_match_ratestale_match_countpending_match_count,讓共用 UI / 其他專案 proxy 能分清身份覆蓋與價格新鮮度,不再只看到舊的 matched_count / coverage_rate。
  • V10.518 PChome 覆蓋率與新鮮度拆分: 修正比價監控總覽把價格 TTL 過期誤算成「未覆蓋」的產品口徑,fetch_competitor_coverage() 現在分開回報 valid_matchesidentity 覆蓋)、fresh_matches(價格新鮮)、stale_matchesfresh_match_rate首頁、業績與成長頁同步顯示身份覆蓋與價格新鮮。PChome 快取 TTL 預設由 6h 改 48h並將每日 expired identity refresh / retryable / unmatched limits 改為環境變數,預設提升到 1200 / 240 / 240避免已建立 identity 的商品因刷新量不足被長期視為無覆蓋。
  • V10.517 PChome near-threshold 比對 hotfix: 新增 Lab52 齒妍堂汪汪隊嬰幼兒牙刷 2 入組 focused exact identity讓真同款可進 exact / total_price / price_alert_exact;同時補 Les nez 香氛融蠟燈款式選擇 gap 與 Time Leisure 香薰蠟燭香味 gap將不同款式 / 單側香味候選留在覆核或 veto不讓它們進 recoverable 自動回刷。測試鎖住 Dashing Diva、Pavaruni、Recipe Box、Lactacyd 與 feeder recoverable 邊界。
  • V10.516 Webcrumbs host data 授權回歸測試: 新增 Flask runtime 測試,直接重現 DISABLE_LOGIN=true/api/webcrumbs/marketplace-host-data 必須回 401 且不得組裝真實 host data同時鎖住 X-Internal-Key 與登入 session 可取得敏感 seed、未授權 /webcrumbs 只注入 auth_required 空狀態,避免後續改動再讓 public 診斷頁洩漏 MOMO/PChome SKU 與價差。
  • V10.515 Webcrumbs host data 硬性授權: 發現正式環境一般 @login_required 可能因 DISABLE_LOGIN=true 放行後,為 /api/webcrumbs/marketplace-host-data/webcrumbs inline seed 加上獨立授權判斷;只有登入 session 或 X-Internal-Key 可取得真實 SKU/價差,未授權時只回 auth_required 空狀態,避免 public runtime 診斷頁洩漏正式比價資料。
  • V10.514 Webcrumbs host data read-only API: 新增登入後 /api/webcrumbs/marketplace-host-data,回傳與 /webcrumbs inline seed 相同的 MOMO/PChome exact 價差 host data contract供 plugin、QA 與其他專案 proxy 驗證API boundary 明確標示 writes_database=falsecalls_llm=falsefetches_external=false,且只允許 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 與 asset proxy避免 Webcrumbs live plugin 與比價 host data 持續把公開系統 route 撐成大檔。
  • V10.512 Webcrumbs MOMO/PChome host data: 新增 services/webcrumbs_host_data_service.py,讓 /webcrumbs live plugin preview 復用 competitor_intel_repository.fetch_top_competitor_risks() 與 coverage將 exact / total_price / price_alert_exact 的只讀價差摘要轉成 StockPlatformSharedUI.marketSnapshot / aiCandidate;不呼叫 LLM、不抓外站、不寫 DB無風險或讀取失敗時仍輸出安全空狀態。
  • V10.511 Webcrumbs host data 安全空狀態: /webcrumbs 會注入 StockPlatformSharedUI.marketSnapshot / aiCandidate 的診斷空資料,避免 Shared UI Hub plugin 因資料源未接入而 fallback 顯示假市場數字、假 AI 候選或假信心分數。
  • V10.510 Webcrumbs live plugin 試點: /webcrumbs 診斷頁不再只顯示 runtime 設定,新增 StockPlatformSharedUI.allowedPluginUris 與同源 /webcrumbs-assets/plugins/finance.market-ticker-strip/0.1.0finance.ai-candidate-card/0.1.0 live plugin embed讓 shared-ui loader、plugin asset proxy 與頁面初始化時序能在 momo-pro 內直接驗收。
  • V10.509 市場情報 MCP Fetch Candidate Queue Writer Review Decision Approval Writer Preflight gate: 新增 /api/market_intel/mcp_fetch_candidate_queue_writer_review_decision_approval_writer_preflight 與 UI preview只審核 human approval 通過後的 operator writer preflight 摘要;要求 approval linkage、writer_preflight_id、target operation、row count、dedupe keys、approved decision 到 target review_state 的逐列映射、decision/approval/preflight evidence refs、artifact paths、matched row exact-identity/variant/overwrite guard 與 operator confirmation 對齊,且 API 不讀 token、不執行 CLI、不開 DB、不寫 preflight/approval/decision/match、不更新 review_state、不補 queue、不掛 scheduler只放行到後續 CLI review / run package 設計。
  • V10.508 Webcrumbs 同源 asset proxy 收斂: 正式頁面 runtime 預設改走 /webcrumbs-assets/loader/webcrumbs-compatible-loader.js,由 momo-pro 代理 188 Shared UI Hub 的 allowlist asset pathloader/plugins/demo/),避免 webcrumbs.wooo.work 公網 TLS、Basic Auth 或入口轉發尚未完成時造成頁面 script 載入失敗;/webcrumbs 診斷頁同步顯示 asset upstreamWEBCRUMBS_PLUGIN_BASE_URL 預設改為同源 /webcrumbs-assets/plugins
  • V10.507 Webcrumbs 共用 UI Runtime 接入: 新增 WEBCRUMBS_* 設定、/webcrumbs 診斷頁、全站 ewoooc_base.html runtime script 載入守門與側欄入口runtime 僅允許自架固定版本 URL禁止正式環境使用官方 @latest,並新增 docs/guides/webcrumbs_shared_runtime.md 與 ADR-037 記錄共用 microfrontend/plugin loader 邊界。
  • V10.506 市場情報 MCP Fetch Candidate Queue Writer Review Decision Approval gate: 新增 /api/market_intel/mcp_fetch_candidate_queue_writer_review_decision_approval 與 UI preview只審核 review decision 通過後的 operator human approval 摘要;要求 decision linkage、approval identity、target table、row count、dedupe keys、approved_for_writer_preflight approval result、decision/approval evidence refs、artifact paths、matched row exact-identity/variant/overwrite guard 與 operator confirmation 對齊,且 API 不讀 token、不執行 CLI、不開 DB、不寫 approval record、不寫 decision record、不更新 review_state、不寫 match result、不補 queue、不掛 scheduler只放行到後續 writer preflight 設計。新 endpoint 拆到 routes/market_intel_mcp_review_routes.py,避免既有 MCP run route 繼續膨脹。

2026-05-24PChome 近門檻身份回收第二輪

  • V10.505 市場情報 MCP Fetch Candidate Queue Writer Review Decision gate: 新增 /api/market_intel/mcp_fetch_candidate_queue_writer_review_decision 與 UI preview只審核 review inventory 通過後的 operator 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 對齊,且 API 不讀 token、不執行 CLI、不開 DB、不寫 decision record、不更新 review_state、不寫 match result、不補 queue、不掛 scheduler只放行到 decision approval / writer preflight 設計。
  • V10.504 市場情報 MCP Fetch Candidate Queue Writer Review Inventory gate: 新增 /api/market_intel/mcp_fetch_candidate_queue_writer_review_inventory 與 UI preview只審核 writer review handoff 通過後的 operator 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 對齊,且 API 不讀 token、不執行 CLI、不開 DB、不寫 queue、不更新 review_state、不做 inventory query、不掛 scheduler只放行到後續人工 candidate queue review。
  • V10.503 市場情報 MCP Fetch Candidate Queue Writer Review Handoff gate: 新增 /api/market_intel/mcp_fetch_candidate_queue_writer_review_handoff 與 UI preview只審核 post-closeout inventory review 通過後的 operator candidate queue review handoff 摘要;要求 inventory linkage、handoff identity、target table、row count、artifact paths、review contract、forbidden API actions 與 operator confirmation 對齊,且 API 不讀 token、不執行 CLI、不開 DB、不寫 queue、不更新 review_state、不掛 scheduler只放行到人工 candidate queue review。
  • V10.502 AiderHeal 自動修復診斷鏈修正: execute_code_fix() 改為先檢查 ADR-020 檔案白名單再執行 110 preflight避免 tests/... 這類不得自動修的 finding 被誤報成 /home/wooo/ewoooc preflight 失敗Code Review 完成通知會把全數不在白名單的 finding 標成需人工處理,不再宣稱已觸發 AiderHeal白名單同步放行 services/routes/database 子目錄 Python 檔preflight 通知帶 stderr/stdout 細節,健康檢查接受正式 /health 回傳的 healthy
  • V10.501 市場情報 MCP Fetch Candidate Queue Writer Post-Closeout Inventory Review gate: 新增 /api/market_intel/mcp_fetch_candidate_queue_writer_post_closeout_inventory_review 與 UI preview只審核 closeout review 通過後的 operator live inventory read-only 摘要;要求 closeout linkage、row count、inventory artifact、closeout review artifact、read-only query result、missing/duplicate rows 與 operator confirmation 對齊,且 API 不讀 token、不執行 CLI、不開 DB、不寫 queue、不做 inventory query、不掛 scheduler只放行到 candidate queue review handoff。
  • V10.500 市場情報 MCP Fetch Candidate Queue Writer Run Closeout Review gate: 新增 /api/market_intel/mcp_fetch_candidate_queue_writer_run_closeout_review 與 UI preview只審核 receipt review 通過後的 operator closeout 摘要;要求 receipt linkage、closeout artifact、receipt review artifact、post-closeout inventory plan、writer output / post-write smoke / backup manifest、rollback note 與 operator confirmation 對齊,且 API 不讀 receipt 原文、不讀 token、不執行 CLI、不開 DB、不寫 queue、不做 post-closeout query、不掛 scheduler只放行到 read-only post-closeout inventory review。
  • V10.499 市場情報 MCP Fetch Candidate Queue Writer Run Receipt Review gate: 新增 /api/market_intel/mcp_fetch_candidate_queue_writer_run_receipt_review 與 UI preview只審核操作員 shell writer run 後貼回的 receipt 摘要;要求 readiness linkage、run package id、候選/dedupe keys、writer output、post-write smoke、backup path 與 operator confirmation 對齊,且 API 不讀 receipt 原文、不讀 token、不執行 CLI、不開 DB、不寫 queue、不做 post-write query、不掛 scheduler只放行到 closeout review。
  • V10.498 市場情報 MCP Fetch Candidate Queue Writer Run Readiness gate: 新增 /api/market_intel/mcp_fetch_candidate_queue_writer_run_readiness 與 UI preview只審核 run package review 後的 operator readiness 證據;要求 run readiness artifact、reviewed sample、備份、read-only preflight 與 post-write smoke 路徑安全,並確認 CLI-only、approval token shell-only、無 API/DB/file/scheduler 副作用。API 不產檔、不讀 token、不執行 CLI、不開 DB、不寫 queue、不掛 scheduler只放行到後續 run receipt review。
  • V10.497 市場情報 MCP Fetch Candidate Queue Writer Run Package Review gate: 新增 /api/market_intel/mcp_fetch_candidate_queue_writer_run_package_review 與 UI preview只審核 CLI review 後的 operator run package 草案;要求 package identity、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: 新增 /api/market_intel/mcp_fetch_candidate_queue_writer_cli_review 與 UI preview只審核 writer preflight 後的 CLI review 草案;要求 script path、target table、preflight id、payload row count、candidate/dedupe keys 與 command argv 完全對齊,並禁止 --execute--apply-real-write--approval-token 進 API payload且 API 不執行 CLI、不讀 token、不寫檔、不開 DB、不寫 queue、不掛 scheduler。
  • V10.495 市場情報 MCP Fetch Candidate Queue Writer Preflight gate: 新增 /api/market_intel/mcp_fetch_candidate_queue_writer_preflight 與 UI preview只審核 queue review 後的 writer preflight 草案;要求 target_table=market_alert_review_queuewrite_mode=cli_only_later、dedupe strategy、insert columns、payload rows 與候選 key 完全對齊,且 API 不開 DB、不執行 CLI、不建立 queue、不更新 review_state、不寫 DB、不連外、不掛 scheduler。
  • V10.494 市場情報 MCP Fetch Candidate Queue Review gate: 新增 /api/market_intel/mcp_fetch_candidate_queue_review 與 UI preview只審核 candidate handoff 後的人工 queue review 草案;要求候選 key 完全對齊、review_state=needs_review、allowed actions 限人工確認/否決/延後、queue_write_status=not_persisted,且 API 不建立 queue、不更新 review_state、不寫 DB、不連外、不掛 scheduler。
  • V10.493 市場情報 MCP Fetch Candidate Handoff Review gate: 新增 /api/market_intel/mcp_fetch_candidate_handoff_review 與 UI preview只審核 parser review 後的候選交接包;要求 source/candidate key 完全對齊、queue policy 維持 manual_candidate_review / preview_only、候選數維持小批次,且 API 不建立 queue、不寫 DB、不讀 artifact、不連外、不掛 scheduler。
  • V10.491 市場情報 MCP Fetch Result Parser Review gate: 新增 /api/market_intel/mcp_fetch_result_parser_review 與 UI preview只審核操作員 shell parser 後貼回的結構化摘要API 不讀 artifact、不執行 parser CLI、不抓外站、不寫檔、不開 DB、不掛 scheduler且會阻擋 raw HTML/body/snapshot、secret/token 欄位與 side-effect flags。
  • V10.489 PChome 低分同款人工覆核回收與 gate-pass 風險邊界: marketplace_product_matcher 新增三個窄範圍 focused identityTS6 超美白香氛誘霜 120g/ml、W 修護保養蝸牛特潤修護面膜 6 片、Derma 大地 Eco 植萃護膚油 2 入。這些樣本只升到 identity_review / manual_review,不進 price_alert_exact;同版補 Clarins 身體油不同線、命名組合品數量反轉、isLeaf 香型數量不一致 hard vetoHOOOME 大理石暖燈單側設計差留人工覆核。
  • V10.488 市場情報 MCP Fetch Run Receipt gate: 新增 /api/market_intel/mcp_fetch_run_receipt 與 UI preview只審核操作員 shell dry-run 後貼回的 receiptAPI 不執行 CLI、不抓外站、不寫檔、不開 DB、不掛 scheduler且會阻擋 secret/token 欄位與 side-effect flags。
  • V10.473 背景 embedding 讀取 host_health skip: OllamaService.generate_embedding(..., allow_111_fallback=False) 會先查最近 host_health_probes;若 GCP-A/GCP-B 在 20 分鐘視窗內已由 runtime probe 標成 unhealthy背景 embedding 直接跳過該節點並開短暫 GCP circuit不等待 30 秒 timeout、不落 111。DB 讀取失敗時 fail-open 回原本 retry避免觀測層阻斷 embedding。
  • V10.472 GCP Ollama failover rootless 診斷: 新增 scripts/ops/diagnose_ollama_gcp_failover.sh 與 DevOps SOP可不需 root 檢查 GCP-A/GCP-B/111 direct、110 proxy 11435/11436 與 GCP-B bge-m3 runtime。現況確認GCP-A 22/11434 refused、GCP-B 22/11434 open 但 SSH key denied、GCP-B embed OK、110:11435 502、110:11436 OKprimary 修復需 GCP/SSH 或 110 root 權限。
  • V10.471 GCP-B embedding timeout 校準: GCP-B bge-m3 /api/embed 直接實測約 6.4s / 7.3s / 23.5s,原 OLLAMA_EMBED_MAX_TIMEOUT=15 與 host health OLLAMA_HOST_HEALTH_EMBED_TIMEOUT=8 會誤判慢但成功的 embedding預設改為 30s。背景 embedding 仍只跑 GCP-A/GCP-B不落 111。
  • V10.470 Ollama host health 實作探針: run_host_health_probe() 對 GCP-A / GCP-B 在 /api/tags 成功後追加短 bge-m3 /api/embed probe避免 GCP-B 出現 tags/version 正常、但實際 embedding runner 20s timeout 時仍被標 healthy111 預設不做背景 embedding probe避免監測任務把 fallback Mac 載入 bge-m3
  • V10.469 Background embedding 降級語意修正: OllamaService.generate_embedding(..., allow_111_fallback=False) 在 GCP-A/GCP-B 全失敗時會開啟短暫 failure circuit 並記 WARNING不再把背景 bge-m3 降級熔斷每分鐘寫成 ERROR同步或允許三主機 fallback 的 embedding 全失敗仍維持 ERROR保留真正阻塞型故障訊號。
  • V10.468 Ollama import-time / embedding 熔斷治理: config.OLLAMA_HOSTHERMES_URLEMBEDDING_HOST 舊相容常數改成靜態核准 env reader不再於 import 時呼叫 resolve_ollama_host(),避免 GCP-A/GCP-B 短暫拒連時把 process 常數 freeze 到 111。generate_embedding(..., allow_111_fallback=False) 在 GCP-A/GCP-B 都失敗後會開短暫 GCP embedding circuit避免背景任務每筆重打兩台故障主機111 仍不承接背景 bge-m3。維運盤點曾見 110 proxy 11435/11436 因 GCP 11434 refused 回 502部署 smoke 時 GCP-B /api/version 已恢復 200 並成為動態路由落點GCP-A 22/11434 仍 refused後續需以 GCP 權限恢復 primary Ollama 主機或 SSH key。
  • V10.467 Focused exact total-price 安全通道: marketplace_product_matcher 新增窄範圍 focused_exact_total_price_safe lane僅針對正式近門檻樣本中同品牌、同品名、同規格/同入數的 3W CLINIC 粉底液 2入、花美水凝膠 3支、The Ordinary 咖啡因 EGCG 30ml、KUSSEN 屁屁膏 3入、Bone 擴香禮盒、1990 融燭燈白色款與 CANMAKE 淚袋盤,讓 exact/manual_review 可升到 exact/total_price/price_alert_exact;未放寬 MIN_MATCH_SCOREDASHING DIVA、唇彩、香味、色號/款式敏感商品仍維持 variant / veto 保護。Production pilot 已將 SKU 6101639100749517760902TP000749800000051477476610142589102624701026247111308520 materialize 到人工覆核隊列,true_low_confidence 802→793、rescore_accepted_current 38→476101784 即期品因商業條件不同仍留在低信心覆核。
  • V10.466 Rescore latest-state duplicate 修正與 7 SKU pilot: materialize_rescore_accept_reviews() 的 duplicate 判斷改看最新 attempt而不是歷史任一 accepted若後續 crawler 又把同 SKU/候選覆蓋成 true_low_confidence,可重新追加 rescore_accepted_current 讓 Dashboard latest-state 正確進人工覆核。Production pilot 已將 SKU 1475606911159042138425608394210151925471050976510603780 materialize 到人工覆核隊列;competitor_prices 目標計數維持 7、competitor_price_history 目標計數維持 210未寫正式價差表。
  • V10.465 Embedding GCP fallback 修正: OllamaService.generate_embedding(..., allow_111_fallback=False) 若 resolver 因 unhealthy cache 回 111會強制改試尚未嘗試的 GCP-A/GCP-B不再直接 break 造成 tried=[] 或只試單台 GCP-B背景 embedding 仍不允許落 111。
  • V10.464 Rescore SKU pilot 篩選: audit_competitor_match_attempt_rescore.pyfetch_match_attempt_rescore_rows() 增加 --sku / skus 篩選,可針對 DR.WU 這類明確 cohort 做 3-10 筆精準 materialize不必為了 pilot 掃整批 true_low_confidence
  • V10.463 DR.WU / 達爾膚品牌 alias: marketplace_product_matcherDR.WU / DR WU / DRWU / 達爾膚 正規化,讓正式樣本中同規格玻尿酸保濕精華乳、杏仁酸亮白煥膚精華不再因品牌 token 不同被降成 brandless identity review測試鎖住 exact / total_price / price_alert_exact。
  • V10.462 PChome 補抓 UI 語意收斂: Dashboard 補抓區塊標題、AI 中樞按鈕、前端 confirm 與 API 回覆全數改用「PChome 補抓產線 / 補抓未搜尋 / 未搜尋補抓」,避免「待比對」殘留在操作入口,和低信心待人工覆核混淆。
  • V10.461 Dashboard 未搜尋語意修正: 商品看板未進入 PChome 搜尋/補抓的品項不再顯示籠統「待比對」,改成「尚未搜尋」與「尚未進入 PChome 補抓」,避免操作員誤以為已有候選但尚未人工覆核;前端守門測試鎖住不得回退成舊文案。
  • V10.460 ElephantAlpha 告警決策信封: resource_optimization 會為資源壓力告警產生 deterministic decision_envelope,證據只來自 action_plans、CPU 實測與 hygiene 結果Telegram 同時顯示決策信封、量測指標、判讀、系統處置與下一步;ea_escalation 模板也會渲染信封並使用 decision_id 作為 momo:eig:* callback避免低信心升級告警只剩空泛文字或不可追蹤按鈕。
  • V10.459 protected_existing_match 決策封包: PChome 覆核信封開始解析 existing_match_conflict,把既有正式候選、新候選、雙方 matcher score 與 score delta 寫入 evidence / expected_impact / guardrails新候選即使分數較高也維持 can_auto_execute=false,但 OpenClaw、PPT、Dashboard 與人工覆核可清楚看見該比較哪兩個候選。
  • V10.458 OpenClaw / PPT 決策信封摘要: 新增 summarize_review_decision_envelopes() 作為 PChome 覆核信封共用摘要 formatterOpenClaw 週報/日報/月報、OpenClaw Bot competitor PPT data_summary 與 PPT KPI slide 都使用同一份 HITL / 資料品質 / action / trace 摘要,不再各自手寫 attempt_status 翻譯。
  • V10.457 Dashboard / Excel 決策信封連動: 商品看板 PChome 覆核卡顯示 decision_envelope 的決策等級、資料品質、HITL 與 trace/api/export/excel/pchome-review 匯出新增決策信封 ID、建議代碼、責任人、資料品質、自動執行允許、阻擋原因與證據摘要讓下載檔仍保留不可自動寫正式價差的 guardrails。
  • V10.456 review queue 決策信封: fetch_competitor_review_queue()fetch_competitor_review_queue_page()/api/pchome-review/queue 每筆 PChome 覆核候選都輸出 decision_envelope,包含標的 SKU/PChome 候選、match evidence、建議人工動作、預期價差、資料品質與「不可自動寫正式價差」guardrailsreview queue cache key 升到 v3避免正式環境沿用舊 payload。
  • V10.455 EventRouter 決策信封直送: 已帶 decision_envelope 的價格/覆核事件會略過 L1/L2 AI 重新摘要,直接用 Telegram 證據模板通知;決策信封新增標的區塊,顯示 SKU、商品名稱、PChome 候選 ID/名稱,避免 NemoTron 已有實證的價格告警被二次生成文字稀釋或產生額外模型呼叫。
  • V10.455 rescore variant retraction CLI: audit_competitor_match_attempt_rescore.py --retract-variant-accepted 可找出最新仍為 rescore_accepted_current 且帶 variant_selection_review 的 SKU追加 true_low_confidence 退回列;保留歷史 audit trail不刪資料、不寫正式價格表。
  • V10.454 production rescore 入人工覆核隊列: 以 latest-sku-only 口徑重算 745 筆 true_low_confidence,先追加 2 筆人工覆核列V10.454 gate 補上 variant_selection_review 排除後SKU 8884618 KATE 怪獸級持色唇膏MOMO 多款任選 vs PChome 單一水光款)已退回最新 true_low_confidence,最終只保留 SKU 10922465 Herbacin 小甘菊護手霜 20ml 為 rescore_accepted_current。這次只寫 competitor_match_attempts 人工覆核列,未寫 competitor_prices / competitor_price_history,並已清除 Dashboard 與 competitor intel cache。
  • V10.454 feeder / rescore 正式寫入閘門: CompetitorPriceFeeder 現在只允許 exact + total_price + price_alert_exact 的 matcher 結果自動寫入 competitor_pricesmanual_reviewidentity_reviewvariant_selection_review(例如 MOMO 多款任選唇膏對 PChome 單一水光款)會保留在 true_low_confidence 覆核不得因分數剛過門檻而污染正式比價資料。Rescore audit 也會把 variant_selection_review 擋在 accepted_current 之外。
  • V10.453 matcher 安全回收規則: 新增 Herbacin 小甘菊護手霜 20ml brandless 同款 anchor修正 EX8 型號不再被誤解析為 x8 入數;新增香氛固體凝膠 / 空氣芳香劑一側泛稱、一側明確香味或 No. 款式的 aroma_scent_variant_conflict veto。這輪目標是讓 retryable replay 可救回真同款,同時先封住 MIRAE 入數與 GONESH 香味款式的假陽性。
  • V10.452 PChome rescore audit 最新狀態口徑: scripts/audit_competitor_match_attempt_rescore.pyfetch_match_attempt_rescore_rows() 預設改成先取每個 SKU 最新 attempt再套用 status / reason 篩選,與 Dashboard review queue 一致;需要回看歷史候選時才使用 --include-historical-candidates,避免舊低信心紀錄讓已修正、已否決或已入隊 SKU 重複回到操作報表。
  • V10.451 low_score 操作分流拆分與 queue API: Dashboard 比價覆核頁不再只給一個籠統低信心分頁;新增「近門檻可救」「證據不足」「低信心舊候選」三個篩選,competitor_intel_repository.REVIEW_STATUS_FILTER_GROUPS 同步提供對應分流,/api/pchome-review/queue 也能用同一套 review_status 做 read-only smoke / operator tools 查詢,讓 matcher 回刷、人工覆核、OpenClaw 報表能分清楚可自動回收、應保守等待、與需補搜尋的候選。
  • V10.450 PChome 覆核 fast-count UI 語意與重算可採用指標: 預設全量覆核頁跳過 exact count 時,模板會以「約」標記快取總數,避免操作員把快取總數誤認為即時計算;搜尋、分類與單一狀態分流仍保留精準總數。fetch_competitor_coverage() 同步輸出 rescore_accepted_countDashboard、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避免每次操作全量覆核頁都為總筆數重掃整個 review queue。
  • V10.447 PChome 覆核頁查詢方向反轉: review queue page 改由最新 competitor_match_attempts 的可覆核狀態先縮小候選,再 join ACTIVE 商品與最新價,並用 NOT EXISTS 排除已有有效 identity_v2 正式 PChome 價格;避免「全部覆核」每次先掃全站 ACTIVE 商品後才過濾,提高核心比價覆核頁可操作性。
  • V10.446 PChome 覆核頁 overview timeout 修正: 覆核頁輕量 render path 的總覽改讀既有 shared dashboard cache / stale cache若快取不存在只用目前覆核頁資料補足 review count 與狀態分流,不再即時呼叫 _load_competitor_decision_overview(session) 的重型 SQL避免正式資料量下 statement timeout。
  • V10.445 PChome 覆核頁輕量渲染路徑: filter=pchome_review 直接走覆核隊列專用 render path不再先建完整 Dashboard unique_items;當頁只查 50 筆覆核 SKU 的商品資料、最新價、昨日價與週前價仍沿用同一張新版表格、狀態分流、PChome 候選說明與人工覆核按鈕,降低核心比價覆核頁的全站資料負載。
  • V10.444 PChome 覆核頁查詢瘦身: fetch_competitor_review_queue_page() 將原本 count + page 兩次重跑 review CTE 改成單次 SQL 的 total_rows + paged_rows 查詢,同步取得總數與頁面資料,降低 /?filter=pchome_reviewlatest_momo / latest_attempt / valid_competitor 的重複掃描;正式站小批次 rescore 入隊後,用於維持核心比價覆核頁可操作速度。
  • V10.443 PChome rescore 人工覆核入隊: scripts/audit_competitor_match_attempt_rescore.py --apply-accepted 只會把最新版 matcher 已通過門檻的舊低信心候選追加為 rescore_accepted_current attempt進入商品看板人工覆核隊列不寫 competitor_prices、不寫 competitor_price_history,必須由操作員按「採用同款」後才正式更新 PChome 價差。Dashboard 補上「重算可採用待審」分流與狀態文案,避免安全回刷候選混在一般低信心項目裡。
  • V10.442 CI/CD legacy GitLab 探測降噪: /cicd 舊 GitLab pipeline API 預設改為 disabled除非明確設定 GITLAB_ENABLED=true 並提供 GITLAB_TOKEN,否則不再打 192.168.0.110:8929 或 SSH fallback正式 responsive smoke 造訪 /cicd 時只呈現可診斷空狀態,不再把已退役 GitLab endpoint 的 connection refused / permission denied 寫成錯誤噪音。
  • V10.441 PChome matcher re-score audit: 新增 read-only competitor_match_attempt_rescore_audit 服務與 scripts/audit_competitor_match_attempt_rescore.py,可針對既有 competitor_match_attempts 用最新版 matcher 重新分類成 accepted_current / unit_comparable_current / identity_veto_current / low_score_current,預設不寫 DB、不更新正式價格商品看板同步補蘭蔻/達特醫/hoi/Saugella/Lactacyd 等 focused matcher reason 中文標籤。正式抽樣中 31 筆舊 strong_exact_spec_match 低信心資料,最新版 matcher 可讀出 10 筆 gate pass、1 筆單位價、11 筆 hard veto、9 筆仍低信心,作為後續人工覆核與批次回刷前的安全量化。
  • V10.440 Mustela 爽身潤膚乳同款 anchor: marketplace matcher 新增 慕之幼爽身潤膚乳 identity anchor並讓標題中插入「加量版」時仍可抽出同一身份詞正式樣本 【Mustela 慕之恬廊】慕之幼 加量版爽身潤膚乳 500mlX2入 vs 【慕之恬廊】慕之幼爽身潤膚乳(500毫升X2入) 由 0.741 提升到 0.801,維持 hard_veto=false、人工 review 型態,不放寬全域門檻、不寫正式 competitor_prices
  • V10.439 外部 BI / 資料協作入口收斂: /metabase/grist 保持在 momo-pro 內部診斷 bridge不再出現空白頁或錯連其他專案.env.example 與 bi profile 的 Grist 預設 URL 改為 https://mo.wooo.work/grist / GRIST_APP_HOME_URL,測試同步守住 grist.wooo.workawoooi 不再回到 app/template/env/compose 導覽設定。外部工具頁 H1 移除 viewport font scaling改用新版 token 與手機 media query。
  • V10.438 PPT QA 失敗重跑精準化: /observability/ppt_audit_history 的 QA 失敗與 issue triage 卡片會從 PPT 檔名前綴推回原始 report_type,不再把所有視覺 QA 失敗硬編成 daily 重跑;單筆「重跑」會以 force=true 呼叫補齊 API並在產生前只失效同一 report_type + parameters 的 active ppt_reports cache避免重新產出仍命中舊簡報。頁面也把 audit lane 的預覽按鈕補上,讓失敗檔案可直接站內回放 PDF/PPTX 預覽。
  • V10.437 業績圖表載入韌性與 QA 升級: analysis-chart-theme.js 的 Chart.js loader 加入 4.5 秒 timeout 與 jsDelivr → unpkg → cdnjs 三來源 fallback若外部 CDN 卡住或失敗,/daily_sales/growth_analysis 會切到既有 HTML snapshot / fallback 圖表,不再留下空白圖表框。check_sales_charts_runtime.js 也從「canvas 有墨點」升級為檢查非零 dataset、可見元素、彩色資料筆跡與 canvas ink避免只有座標軸的假通過。
  • V10.436 daily_sales snapshot_date 型別修復: /daily_sales 日期窗口查詢改為依 DB dialect 明確 castPostgreSQL 使用 "snapshot_date"::date 並把參數 CAST(:start_date AS date) / CAST(:end_date AS date)SQLite 使用 date("snapshot_date")metadata / fingerprint 查詢同步引用 cast 後日期,避免正式庫 snapshot_date 為 text 時出現 text = date / text >= date 類型錯誤。後台 chart_generator_service.monthly_overview_chart() 的月業績 SQL 也改為 snapshot_date::date,防止報表圖表因 text 欄位而空白。
  • V10.435 商品列 PChome 狀態診斷翻譯: Dashboard 商品列的 _build_pchome_match_status() 補上 makeup_finish_conflictnail_tool_function_conflictschick_razor_line_conflictvariant_selection_review 等具體狀態文案;_load_pchome_match_attempt_map() 同步解析 match_diagnostic_json 產生 diagnostic_reasons / diagnostic_reason_text,讓 overview、覆核隊列、商品列表與 Excel 的診斷語意一致。
  • V10.434 PChome 人工覆核閉環補搜尋: 商品看板 PChome review queue 新增「補搜尋」人工決策按鈕,對應 needs_researchmanual_needs_researchmanual_rejectedmanual_unit_price_requiredmanual_needs_research 納入全部覆核隊列與「人工閉環」篩選,避免操作員按完否決/單位價/補搜尋後項目從列表消失、後續無法追蹤。
  • V10.433 PChome 覆核診斷標籤與 variant 回刷補強: competitor_intel_repository 的 review queue / 商品看板 / Excel export 改為優先讀取 match_diagnostic_json.reasons,再 fallback 文字版 error_message;同步補 makeup_finish_conflictnail_tool_function_conflictschick_razor_line_conflictvariant_descriptor_conflict 等操作員可讀標籤,讓商品列表顯示「妝效質地不同、工具功能不同、除毛刀品線不同」而不是 raw machine code。matcher 另補 MUJI 精油芬香護手霜的 brandless exact recoveryPChome 標題缺品牌但身份詞與 50g 規格一致時可進 manual-review identityperipera 多色任選 vs 單一色號會標記 variant_selection_review 並留在 true_low_confidence,避免被誤列為可批次救回。
  • V10.432 近門檻比價 hard-veto 補強: marketplace matcher 不放寬 MIN_MATCH_SCORE,針對正式 true_low_confidence 前段新增窄範圍防錯配M.A.C MACximal 柔霧唇膏 vs 緞光唇膏標記 makeup_finish_conflict、ERBE 指甲清垢棒 vs 指甲緣刨刀標記 nail_tool_function_conflict、Schick 舒芙 vs 舒綺仕女除毛刀標記 schick_razor_line_conflict,三者皆進 hard veto同時把 潤膚乳 / 身體乳 / 嬰兒乳液 / 寶寶乳液 納入乳液型別,讓慕之幼爽身潤膚乳等真同款回刷更穩定。新增測試鎖住 MUJI 護手霜、Mustela 慕之幼潤膚乳、Herbacin 小甘菊護手霜可 exact並確保高 variant 錯配不被 focused rule 推進。
  • V10.431 Telegram callback byte-safe: triaged_alert()momo:eig:* HITL callback 改為依 UTF-8 byte 長度截斷,不再用字元數截斷;中文或過長 event.id / decision_envelope.decision_id 仍會保留可追蹤 payload且保證 callback_data 不超過 Telegram 64-byte 限制,避免專業排版告警因 callback 太長而整則送出失敗。
  • V10.430 NemoTron 決策 callback 追蹤 ID 修補: NemoTronDispatcher._send_telegram() 會把 decision_envelope.decision_id 提升為 EventRouter event.idtriaged_alert() 也會在上游缺 event.id 時改用 decision_id 產生 momo:eig:* callback避免價格決策通知的「忽略此事件」audit 落成 unknown 而無法追查。
  • V10.429 111 / NemoTron 治理回歸補齊: 補齊 .env.example 中 111 circuit breaker、111 allowlist proxy、部署 smoke、資料庫與 Redis runtime keys並同步大檔 inventory 行數,讓完整測試可覆蓋最新 V10.425V10.428 變更;此版不放寬商品比對門檻、不修改 competitor_prices 寫入規則。
  • V10.428 NemoTron 價格決策信封落地: NemoTronDispatcherprice_alerthuman_review 事件現在會產生 12 Agent 共用 decision_envelope把同款證據、價差、七日銷量變化、營收流失、建議行動、HITL guardrails、資料品質與 trace 同步寫入 EventRouter event 與 KM metadata這讓 Telegram、AI 觀測台、PPT QA 與後續 Agent 協作能讀同一份可稽核證據,而不是各自解析告警文字。
  • V10.427 111 fallback circuit breaker: OllamaService 在選到 111 final fallback 前先讀 ai_calls 近 60 分鐘比例;若 Ollama 呼叫 >=20、111 >=5 且占比 >=5%,會短暫跳過 111 並清除 resolved host cache避免 111 在已偏高時繼續承接長任務。DB 觀測失敗採 fail-open避免觀測層故障反向中斷 GCP-A/GCP-B 正常路由。
  • V10.426 111 proxy 拒絕日誌去重: ollama111_allow_proxy.py 對同一來源 IP 的 reject log 預設 60 秒去重,保留 110 / 121 被擋的可觀測性,同時避免旁路 VM 持續探測時把 111 的 proxy log 與磁碟 I/O 刷高。
  • V10.425 111 fallback 使用率護欄: Scheduler 每 15 分鐘只讀 ai_calls 檢查 111 Ollama fallback 使用率,預設 60 分鐘內 Ollama 呼叫 >=20、111 呼叫 >=3 且占比 >=5% 才推 Telegram並列出 111 caller Top 5此護欄只觀測與告警不改路由、不寫 DB、不重啟服務讓 111 被異常承接高負載時可即早發現。
  • V10.424 111 proxy LaunchAgent 安裝路徑穩定化: install_ollama111_allow_proxy.sh 會把 proxy script 複製到 ~/.local/share/momo-pro-system/ollama111_allow_proxy.py 後再寫入 LaunchAgent避免 111 重啟或 iCloud repo 路徑未掛載時代理失效;同時清空舊 stderr log讓安裝後狀態更容易判讀。
  • V10.423 12 Agent 決策信封: triaged_alert() 支援 decision_envelope 結構化區塊,讓 Hermes / NemoTron / OpenClaw / ElephantAlpha 與後續 12 角色決策統一輸出 severityevidencerecommended_actionexpected_impactconfidenceguardrailstrace;缺證據時必須明確標記資料品質與 HITL 邊界,避免再出現空泛效益預測或不可追溯告警。
  • V10.422 111 proxy LaunchAgent 持久化: 新增 scripts/ops/install_ollama111_allow_proxy.sh,在 111 以 user LaunchAgent 安裝 com.momo.ollama111-allow-proxy,啟動時設定 OLLAMA_HOST=127.0.0.1:11434、重啟 Ollama、載入 allowlist proxy避免重開機或重新登入後 111 又回到 LAN 全開狀態。
  • V10.421 Kanebo Milano / hoi 蠟燭品類防錯配: marketplace matcher 追加 kanebo_milano_type_conflicthoi_candle_line_conflict,將 Kanebo Milano Collection 蜜粉餅 vs 絕色香水、hoi 日京山風香氛蠟燭 vs hoi!LAB 實驗室香氛蠟燭經典篇列為 hard veto同品牌、同系列字樣或同容量仍不可跨品類/跨產品線直接比價。
  • V10.420 111 Ollama LAN allowlist proxy: 追查 111 高負載時確認來源不是 momo-pro而是 110 上 awoooi-cd 臨時測試與 121 VMware VM 直接打 192.168.0.111:11434,繞過 ai_calls 與 momo-pro router 載入 7B runner。新增 scripts/ops/ollama111_allow_proxy.py,將真實 Ollama 收斂到 127.0.0.1:11434,由 user-space proxy 綁 192.168.0.111:11434 並預設只允許 111 本機與 188 生產宿主110 / 121 會被 reset111 fallback 保留給 momo production。
  • V10.419 Dr.Hsieh LabSmart 精華品線防錯配: marketplace matcher 追加 dr_hsieh_labsmart_line_conflict,只針對 Dr.Hsieh/達特醫的 LabSmart Hi-Tech / LabSmart Classic 精華被拿去對 神經醯胺多重修復保濕精華液 的近門檻錯配做 hard veto同品牌同容量但不同產品線不再因規格相同停在 true_low_confidence 或被誤推進比價。
  • V10.419 production pilot: 正式回刷 SKU 10413050 / 10413051,兩筆 Dr.Hsieh LabSmart 精華 vs 神經醯胺多重修復精華皆由 true_low_confidence 轉為 identity_vetodiagnostic_codes=["dr_hsieh_labsmart_line_conflict"]matched 維持 1619、true_low_confidence 753→751、identity_veto 4011→4013無正式 competitor_prices 覆寫。
  • V10.418 bge-m3 一致性檢查不打 111: verify_embedding_consistency() 預設只比對 GCP-A / GCP-B不再每週把 111 Mac 納入 bge-m3 背景驗證;新增 EMBED_CONSISTENCY_INCLUDE_111=false 預設,只有救急需要驗證 fallback 模型時才 opt-in。這補上 V10.417 後仍會由監測任務載入 111/GCP-B embedding runner 的缺口。
  • V10.417 Embedding/RAG 背景負載保護: OllamaService.generate_embedding() 新增 allow_111_fallback、timeout cap、輸入長度 cap 與 /api/embed keep_alive=1mOpenClaw learning worker 與 RAG 查詢預設只跑 GCP-A → GCP-B不再把 bge-m3 背景 embedding / semantic RAG 轉嫁到 111。預設 OLLAMA_EMBED_TIMEOUT=15OLLAMA_EMBED_MAX_TIMEOUT=15OLLAMA_EMBED_MAX_CHARS=4000,避免 embedding worker 在 GCP-B/111 長時間常駐或拖住 runner。
  • V10.416 私密清潔 / 彩妝用途 / 棉棒 / 蘭蔻品線防錯配: marketplace matcher 追加窄範圍 hard-veto guard讓 SAUGELLA 日用/加強 vs 黃金女郎型、Lactacyd 清新舒涼 vs 生理呵護、LUNASOL 頰彩 vs 眼彩、MUJI 細軸棉棒 vs 黑色棉棒、LANCOME 超極光晶露 vs 超極限肌因精華露不再停留在模糊 true_low_confidence,而是以 *_variant_conflict / makeup_usage_conflict / lancome_line_conflict 明確拒絕;不調整 MIN_MATCH_SCORE,也不放寬真同款進 matched 的門檻。
  • V10.416 production pilot: 正式回刷 7 筆近門檻錯配樣本SAUGELLA 2 筆、LUNASOL 頰彩 vs 眼彩、LANCOME 超極光 vs 超極限、我的心機兒童防曬 vs 海洋友善防曬、Lactacyd 清新舒涼 vs 生理呵護、MUJI 細軸棉棒 vs 黑色棉棒皆更新為 identity_vetomatched 維持 1619、true_low_confidence 759→753、recoverable_low_score 1→0、identity_veto 4004→4011無正式 competitor_prices 覆寫。
  • V10.415 Hermes 預設不落 111 + 比對保護: OllamaService.generate() 新增 allow_111_fallback 參數預設維持三主機相容Hermes intent / competitor analyst 改以 HERMES_ALLOW_111_FALLBACK=false 預設只跑 GCP-A → GCP-B兩台都不可用時交給規則引擎或 DB 證據 fallback不再把批量價格分析與意圖分類轉嫁到 111。同版 marketplace matcher 將防曬類列入 variant-sensitive排除 SPF/PA/UVA/UVB 這類規格 token 被誤當型號避免「兒童防曬乳」與「海洋友善保濕防曬乳」誤配Recipe Box 兒童防曬氣墊粉餅保留精準同品線例外;另新增 pack_quantity_difference,讓 Beauty Foot 足膜 5入 vs 4入走 unit comparable不再卡在低信心。
  • V10.415 production pilot: 上線後以 SKU 12670442 單筆回刷驗證 Beauty Foot 足膜 5入 vs 4入最新 attempt 由 true_low_confidence 轉為 refresh_unit_comparablediagnostic_codes 補上 pack_quantity_difference / unit_comparablematched 不增加、正式 competitor_prices 不覆寫;整體最新分布由 true_low_confidence=760, refresh_unit_comparable=64 變為 true_low_confidence=759, refresh_unit_comparable=65,符合「可單位價覆核但不可直接當同款總價告警」邊界。
  • 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.413 Code Review 預設保護 111 fallback: production ai_calls 顯示 GCP-A 不可達時Code Review OpenClaw 會先耗掉 primary timeout再讓 GCP-B 撐到 60s最後落到 111 llama3.2 成功,造成 111 與 GCP-B 高負載。新增 CODE_REVIEW_ALLOW_111_FALLBACK=false 預設Code Review 的 Hermes LLM scan / OpenClaw assessment 只跑 GCP-A → GCP-B只有明確設 true 才把部署後重分析丟給 111。若 GCP-A/GCP-B 都失敗且 Claude/Gemini 未顯式開啟,改回 deterministic 本地降級摘要,不呼叫 Gemini也不再用 111 承接非即時重分析。
  • 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.411 rom&nd / Summers Eve / Solone 近門檻 review-only 回收: marketplace matcher 追加三條窄範圍 focused identityrom&nd 果汁唇釉 2.0 catalog、Summers Eve 舒摩兒全肌防護浴潔露 2入、Solone 持久眼線筆;皆只進 identity_review / manual-review不直接價格告警。production pilot 已回刷 3/3matched 1616→1619、true_low_confidence 763→760rom&nd 染眉膏 ZO&FRIENDS 色號、Summers Eve 雙天王任選、Lactacyd 清新舒涼 vs 生理呵護、MAC 柔霧 vs 緞光、NIVEA / 曼秀雷敦包數差異仍不自動救回,維持準確率優先。
  • V10.410 Code Review timeout 梯度改為保護 111: 部署後實測顯示 GCP-A 從 188 失聯時Code Review 仍會先等 primary 45sGCP-B 完整審查 prompt 又常因 25s 太短而 timeout最後轉落 111。CODE_REVIEW_OLLAMA_TIMEOUT 預設收斂為 15sCODE_REVIEW_OLLAMA_SECONDARY_TIMEOUT 放寬為 60sHermes LLM scan 若啟用則 primary 15s、secondary 45s。目標是 A 掛時更快讓位給 B並給 B 足夠時間完成,避免過早壓到 111。
  • 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.408 OPI 指甲油 catalog review-only 回收: marketplace matcher 針對 OPI 類光繚指甲油加入同系列 catalog focused identity只在「白日夢遊」或「驕傲果凍」系列名雙方一致時進 identity_review12色/11色視為可選色號數差異不當作販售件數跨系列仍維持 suppress。production pilot 已回刷 KATE 怪獸級持色唇膏限量款與兩個 OPI SKU 共 3/3matched 1613→1616、true_low_confidence 766→763三筆皆為 alert_tier_identity_review / price_basis_manual_review,不進 Hermes 直接價格告警。
  • V10.407 Hermes/OpenClaw runner 熱駐留收斂: V10.406 後續觀測顯示 GCP-B 仍會被 Hermes/OpenClaw 的 24h keep-alive runner 壓高 load導致 GCP-B generate timeout 後轉落 111。HERMES_KEEP_ALIVEOPENCLAW_STRATEGY_OLLAMA_KEEP_ALIVE 改為 env 可控且預設 5m,並補測試禁止 OpenClaw strategy 再硬寫 keep_alive="24h"GCP-A 目前從 188 仍逾時,需另行修復主機/防火牆。
  • V10.406 Code Review Ollama keep-alive 收斂: production audit 顯示 Gemini 24h 已為 0但 GCP-A 34.143.170.20:11434 從 188 逾時、GCP-B 曾因多個 Ollama runner 長駐造成 generate timeout導致部署後 Code Review 轉落 111。CODE_REVIEW_OLLAMA_KEEP_ALIVE 預設由 24h 改為 5m,讓 GCP-B/111 的 code review runner 不再長時間常駐;實測已重啟 GCP-B Ollama 並確認 gemma3:4b 可於約 6.2s 完成短生成。
  • 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 搭配操作員公開頁面、節流、無登入/反爬、無 DB、無 scheduler 確認後,只放行到人工 fetch gate operator reviewAPI/UI 不保存 payload、不打 health、不開 DB、不抓外站、不掛 scheduler也不會自動打開 manual fetch。
  • V10.404 Hermes 競價威脅漏斗只吃 direct alert: HermesAnalystService.fetch_candidates()competitor_prices JOIN 新增硬條件,只讓 match_type=exactprice_basis=total_pricealert_tier=price_alert_exact 的 identity_v2 配對進入 Hermes 競價威脅分析;identity_reviewunit_price_reviewsuppress 仍保留在 dashboard / 人工覆核資料流,但不再消耗 Hermes token 或被上游視為直接價格威脅候選。production fresh 配對分布顯示直接告警約 497 筆、覆核型約 216 筆,本版將兩者在 AI 威脅入口切開。同版 matcher 追加 KATE 怪獸級持色唇膏、植村秀武士刀眉筆筆蕊、The Forest 焦糖楓葉擴香禮盒等近門檻 review-only 回收線,仍只進人工覆核,不直接價格告警。
  • V10.403 近門檻候選重驗擴池: production 最新 72h attempt audit 顯示 7853 筆近門檻/被擋候選中,有 105 筆可被現行 matcher 回收,其中 46 筆已達 price_alert_exact、59 筆只進 identity_reviewCompetitorPriceFeeder._fetch_retryable_candidate_skus() 擴大每日 revalidation 候選池,納入 true_low_confidenceunit_comparablerefresh_unit_comparable 與高分 identity_veto;但仍要求 PChome product_id、best_match_score >= 0.70,且正式寫入前必須由現行 matcher 重判、通過 hard-veto 與既有配對保護。
  • V10.402 catalog variant identity-review 回收: marketplace matcher 新增 Johnsons 嬰兒潤膚乳 catalog 對同香型、IM MEME 涼感定妝噴霧、SO NATURAL FIXX 定妝噴霧三條 review-only focused identity讓同品線 catalog / variant 候選可脫離 true_low_confidence 但只進 identity_review,不直接價格告警;同版明確保留 MUJI 品牌缺漏護手霜等 brandless catalog 案例在低信心,避免品牌缺漏與多款任選同時存在時被過度救回。
  • V10.401 focused identity 邊界整理: 將 Laundrin TOKYO 車用夾式消臭芳香劑判定抽成 _has_laundrin_tokyo_car_freshener_alignment(),並在 variant descriptor guard 中豁免同一條強身份線,避免 TOKYO / 車用 / 芳香劑語序差異造成誤擋。Yuskin 經典乳霜 30g 6 入組改用 _has_exact_count_alignment() 判斷包數,保留 6入 vs 6盒這類同數量但不同容器字詞的人工覆核路徑。
  • V10.400 氣墊粉餅補充蕊包數正規化: marketplace matcher 針對氣墊粉餅新增保守的 cushion_refill_pack_alignment,只在一側明確為 一盒兩蕊 / 2蕊、另一側為單規格 15g x2 這類乘數包裝時,解除 multi_component_conflict 並進 identity_review。CLIO 羽緻無限緞光氣墊粉餅「一盒兩蕊」可被同款覆核;2盒4蕊15g x2 仍維持 hard veto。同版補香氛蠟燭、TOKYO 車用消臭芳香劑、融蠟燈與有機護膚油 search identity anchors。離線 audit 759 筆 accepted 從 753 提升到 754剩餘 5 筆 fresh veto 皆為應擋的套組/品類差異。
  • V10.399 多香味 catalog 價格告警降級: marketplace matcher 新增 variant_selection_review,當一側是無明確選項的商品線、另一側列出多個具名香味/款式選項時,允許同款身份回收但只進 identity_review,不直接進 price_alert_exact。首個正式案例是 HH 女性私密衣物抗菌手洗精 200ml 對 PChome 白麝香/清新花園/寶貝粉香多香味 listing此規則避免把多香味 catalog 價格誤當單一 variant 精準比價。
  • V10.398 true low confidence 保守回收: marketplace matcher 針對正式前段 true_low_confidence 補一輪 focused exact identity lines讓 Baan 嬰兒修護唇膏、植村秀 3D 極細防水眼線膠筆、YSL 恆久完美透膚煙染腮紅、HH 私密植萃美白緊緻凝露、Lab52 學習刷牙漱口水、Benefit 經典菲菲染唇液、Herb24 晨霧純精油擴香儀、Pavaruni 40 香味 10ml 精油與 GATSBY 爆水擦澡濕巾等近門檻真同款可被回收;未放寬 MIN_MATCH_SCORE。同版保留 peripera 多色任選對單一色號、LUNASOL 頰彩對眼彩組、MUJI 細軸棉棒對黑色棉棒的低信心保護,並讓多組件套組即使達強身份證據也停在 identity_review,避免總價被誤當精準價格告警。

2026-05-21瀏覽器測試守門與 PChome 熱路徑優化

  • V10.397 離線 audit false negative 收斂: marketplace matcher 針對 audit 剩餘 fresh bad 補三個保守修正:200ml+200ml 這類括號內規格串不再被計成額外組件Kiehls 1號護唇膏1 視為商品線名稱而非色號P.SHINE BEAUTY FOOT 雙面足部去硬皮磨砂棒以品牌 + 足部硬皮磨砂棒語意進 identity_review。同批補 focused exact identity lines讓 Biodance、SAB、LUSH、Kanebo、ARTMIS、Nailmatic、小浪、YUNMI、AQUIESSE、資生堂等低分但強證據同款被正確拉回高證據 exact 才可進 price_alert_exact,證據不足者仍進 identity_review。離線 audit fresh bad 從 9 降到 6剩餘皆為多組件/套組差異。
  • V10.396 多選 catalog 對 generic count 組合放行: marketplace matcher 對「多款任選 catalog listing」對上同數量 generic N入組 候選新增保守豁免:需品牌、品類、基礎規格與數量一致,且 generic 端沒有具名色款/香味選項,才不觸發 variant_option_conflict。Johns Blend 香氛擴香罐 85g 任選 3 入 vs PChome 3入組會進 identity_review,不直接價格告警。
  • V10.395 離線競品身份 audit 工具: 新增 scripts/audit_competitor_identity_jsonl.py,可把 production DB 匯出的 competitor identity JSONL 在本機重跑 current matcher輸出 accepted / veto / low-score / fresh bad 摘要與樣本;工具不連 DB、不寫 DB用來取代在 188 app container 內全量重掃造成的 memory 壓力。
  • V10.394 多色 catalog / 入門組防錯配: marketplace matcher 補「琥珀橙 / 干邑棕 / 賽車綠」等車用香氛色款詞,當 MOMO 是多色/多款 catalog listing、PChome 是單一色款候選時會保留 variant_option_conflict hard veto同時把 入門組 納入套組詞,避免理膚寶水抗敏入門組被拿去跟單瓶乳液做總價比價。
  • V10.393 組合包 + 判定修正與 catalog 補強: marketplace matcher 的組合包件數判定會先排除 SPF50+PA++++ 等防曬係數加號,以及 NTT80+AL414 這類純型號碼串,避免把防曬品與 OPI 套組的規格/型號加號誤判成多一個商品組件CeraVe 三件組 vs 兩件組仍維持 multi_component_count_conflict hard veto。同版收緊品牌 alias 判定,避免只有品牌名就觸發商品線加成,並補 Baan 貝恩嬰兒修護唇膏「原味/草莓」catalog listing 放行。
  • V10.392 組合包件數防錯配: marketplace matcher 新增 multi_component_count_conflict,當 MOMO 與 PChome 都是 +/ 組合包但組件數不同時直接進 not_comparable,避免三件組被拿去跟兩件組做總價告警;同步把該原因加入 evidence flags讓告警與審核畫面可以清楚顯示「組合包件數不同」。
  • V10.391 多款任選 catalog listing 防錯配: marketplace matcher 新增 catalog_variant_listing_alignment,當 MOMO/PChome 雙方都是多款/多色/多香味任選 listing且商品線、規格與類型一致時可放行香氛擴香罐、香氛蠟燭等 catalog 型同款;同時把 Relove 菸鹼醯胺 vs 胺基酸私密清潔凝露列為變體衝突,並讓 competitor feeder 不再只因 strong_exact_spec_match 就把低分候選視為 recoverable避免只同規格但品線不同的商品回寫正式比價。
  • V10.390 PChome 近門檻商品比對規則: marketplace matcher 補 17 組近門檻真同款召回與錯配防線,包含 OBgE 防曬棒、ARTMIS 私密清潔慕斯、Seche Vite 快乾亮油、TAICEND 屁屁噴、femfresh / VIGILL 私密清潔、Solone 眼部飾底乳、HYDSTO 車載香薰、小米 S101 刮鬍刀、PRAMY 定妝噴霧、I'M MEME 修容打亮棒、檜山坊滾珠精油、ARM&HAMMER 體香膏、Brush Baby WildOnes 電動牙刷與 Palmer's 按摩乳;同時把香氛/私密慕斯/定妝噴霧 finish 差異列為 variant-sensitive避免不同香味、蔓越莓 vs 金縷梅、柔焦霧面 vs 水光亮面被誤推成直接價格告警。
  • V10.388 精華乳 / 精華霜變體防錯配: marketplace matcher 新增精華類 formulation conflict guard當共享 identity anchor 只到「精華」但一側是「精華乳」、另一側是「精華霜 / 精華液」時會標記 variant_descriptor_conflict 並壓低同款分數,避免自白肌等同品牌相近品線被錯推成 PChome/MOMO 可直接價格告警。Competitor feeder 同步會用最新 matcher 重新驗舊配對;若舊 identity_v2 已被現行 matcher 判成低分或 veto允許新的高信心候選替換避免歷史錯配卡住正式 competitor_prices
  • V10.387 EA 比價 HITL 告警證據排版: Elephant Alpha 的 DB evidence 與 Hermes pre-fetch action 現在會把 PChome/MOMO 同款證據帶進 Telegrammatch_typeprice_basisalert_tiermatch_score 會獨立成「證據」行,讓人工審核能分辨高信心同款、總價可比、單位價覆核與身份覆核,不再只看到乾巴巴的 MOMO vs PChome 長句。同版 marketplace matcher 補 Relove「私密潔淨凝露」identity anchor 與聯名款搜尋噪音,避免 PLAY BOY / 小虎等活動詞壓過真同款名稱。
  • V10.386 Gemini compose hard default / KATE 唇膏比對: docker-compose.yml 針對 momo-appschedulertelegram-bot 明確釘住 GEMINI_API_HARD_DISABLED=trueGEMINI_FALLBACK_ENABLED=false 的預設,讓 .env 保留 API key 時也不會自動產生 Gemini 付費出站AI SOT 與 compose 測試同步鎖定此契約。同版 marketplace matcher 補 KATE/凱婷「柔霧裸唇膏」identity anchor避免 MOMO 長標含東京夜喫茶系列與任選文案時漏掉 PChome 同款短標。
  • V10.385 Lactacyd / MAQuillAGE 櫃別同款比對: Marketplace matcher 補強 Lactacyd 私密潔浴露多款任選長標與 PChome 短標同款放行,並橋接「資生堂東京櫃」與 MAQuillAGE 心機彩妝 在「心機星魅蜜光圈潤唇膏」上的櫃別/品牌 alias避免真同款被 brand_conflict 擋掉。
  • V10.384 Karadium 無規格眼影棒同款放行: Marketplace matcher 對 Karadium「閃亮珍珠眼影棒」新增品牌 + 強 identity anchor 加分,當 PChome 標題省略 1.4g 規格但品名/品牌高度一致、無變體衝突與 hard veto 時仍可進入 exact identity 告警候選,避免同款因規格缺字漏報。
  • V10.383 EA JSON fallback / EDM cache 自癒 / 比對別名補強: Elephant Alpha 協調器現在可容忍 fenced JSON 與混文字 JSON若仍無法解析會改用 DB/Hermes 實證產生保守人工覆核決策,不再輸出舊式 OpenClaw 策略 plan 或自動調價暗示。EDM promo dashboard shared cache 遇到損毀 pickle 會自動刪除並重建,避免每個 worker 重複噴 UnicodeDecodeError。Marketplace matcher 補上 Curel/珂潤、Karadium 與兩個強 identity anchor 測試,降低真同款漏報。
  • V10.382 唇膏 exact identity 寬價差豁免: marketplace matcher 對「同品牌 + 共享唇膏 identity anchor + 規格完全一致 + 無色號/變體衝突」的唇膏類商品,允許 sequence score 略低時仍套用 price_penalty_suppressed_wide_exact_identity;這只處理 PChome/MOMO 標題順序與行銷字差異造成的真同款漏報,不放寬顯性色號不同的 hard veto。
  • V10.381 browse.sh 比價診斷計畫: PChome feeder 在 no_resultno_match、低信心、單位價覆核、既有配對保護與爬蟲錯誤時,會把 read-only browse_diagnostic_json 寫入 competitor_match_attempts,內含 PChome search URL 與建議 browse get/open 命令;正式排程仍 API-firstPCHOME_FEEDER_BROWSE_SH_EXECUTE_ENABLED=false 預設不自動開瀏覽器,避免瀏覽器彈窗、登入或密碼提示干擾。
  • V10.380 111 Ollama final fallback 收斂: 111 Mac fallback 從救急路徑改成更短的保護路徑,OLLAMA_111_MAX_TIMEOUT 預設由 45s 收緊到 20s並新增 OLLAMA_111_NUM_PREDICT=512 輸出上限;落到 111 時仍會降級重模型到 llama3.2:latest、縮 num_ctx=4096keep_alive=5m,避免 GCP-A/GCP-B 短暫 timeout 後把長篇 Hermes/OpenClaw 工作轉嫁到 111 造成 swap 與 load 飆高。
  • 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 合併審核,讓 completion audit 的 runtime 缺口可由人工收據明確補齊。
  • V10.379 只讀安全邊界: 本階段不保存 payload、不打 health、不開 DB、不抓外站、不掛 scheduler也不會因 promotion 通過自動打開人工 fetch gate正式 fetch / DB write / scheduler attach 仍需各自獨立 gate。
  • V10.378 AI 推薦頁首屏 Gemini 防漏: /ai_recommend 首屏狀態快照新增 provider sanitization即使舊 cache / env 內出現 default_provider='gemini'recommended_provider='gemini',也會回到 ollama,避免 UI 把 Gemini 顯示成主推薦路徑;/api/ai/set_provider 同步正規化 provider 輸入,保留 Gemini 只能作 Ollama 失敗備援的拒絕訊息。
  • V10.377 Gemini 主路徑防漏補強: AIProviderService._get_recommended_provider() 不再於 Ollama 不通時推薦 gemini 作為主提供者;llm_model_routerea_engine 即使 caller 傳入 gemini-2.0-flash default也會改回 hermes3:latest,需要深推理才升 deepseek-r1:14bElephantAlphaOrchestrator 的 OpenClaw registry / system prompt 改為 Ollama-first避免 L3 HITL prompt 繼續把 Gemini 當主模型描述。同步補 AI SOT 與防回歸測試。
  • V10.376 Recipe Box 同款防曬漂移比對: services/marketplace_product_matcher.py 對 Recipe Box 多效提亮防曬霜新增 shared identity anchor 加分,當 MOMO 長標含兒童/無毒/天然彩妝等行銷詞、PChome 以「韓兔 多效提亮防曬霜」呈現時仍可判定同款;同步測試鎖住 shared_identity_anchor_recipe_box_line,避免平台名稱漂移讓同款價格告警漏報。
  • V10.375 過期活動爬蟲排程 opt-in: run_scheduler.py 將固定 LPN 的 edm_task / festival_task 改為 MOMO_ENABLE_LEGACY_EDM_SCHEDULE=true 才註冊,季節活動 mothers_day_2026 / valentine_520_2026 / labor_day_2026 改為 MOMO_ENABLE_SEASONAL_PROMO_SCHEDULE=true 才註冊;services/data/crawler_config.json 同步暫停已失效的 mothers_day LPN避免 scheduler 定時打過期 MOMO 活動頁造成 Selenium browser loop 與無效負載。手動 API / CLI 指定 LPN 仍保留;同版整合 NIVEA/OPI 等比價搜尋 noise 與 identity anchor 補強。
  • V10.374 EDM 失效頁告警止血: scheduler.py 新增 MOMO EDM alert guardrun_edm_task / run_festival_task / run_promo_event_task 遇到「很抱歉此EDM不存在」時會接受 browser alert、寫入 Skipped / edm_unavailable stats且不再送 EventRouter failure避免 festival / mothers_day 過期活動頁重新累積 Telegram queue同版整合 REJURAN 麗駐蘭唇膏同款在價格比過寬時的 exact-identity 價格懲罰豁免。
  • V10.373 PChome 同款名稱漂移整合: 整合並修正 concurrent matcher work新增 MAC/M.A.C 品牌 alias、Yuskin 經典乳霜 4入/4盒組同數量 bundle equivalent、AHC 瞬效 B5 玻尿酸關鍵字重排 anchor修復 _count_score() 縮排破壞與 unreachable code讓新增測試可穩定通過。
  • V10.372 Smoke 與 EventRouter queue 修復: 修正 AI automation smoke 對 NemoTron fallback 的 class 判斷,改接受實際存在的 NemotronDispatcher._hermes_rule_fallback,避免 Hermes fallback 正常卻被誤報 criticalEventRouter 失敗佇列回放改為重建短版 HTML-safe 訊息escape 標題/摘要/trace/error 並限制長度,避免舊 Selenium stacktrace 的 <unknown> 造成 Telegram HTTP 400 反覆卡住;同版整合 LUDEYA 蜂王玫瑰商品線在 MOMO/PChome 名稱漂移時的 identity anchor alias。
  • V10.371 品牌缺失同款放行: marketplace matcher 新增 brandless_exact_identity 加分,只限「一側有品牌、一側缺品牌」但 shared identity anchor 夠長、規格/序列/中文名相似度都高且無 hard veto 的案例;覆蓋小米有品小浪智能感應自動噴香機,讓 PChome 標題省略品牌時仍可進入同款告警候選。
  • V10.370 Gemini runtime sentinel: AI automation smoke 新增 Gemini 出站費用 sentinel,每天檢查近 24h ai_calls.provider='gemini' 的 calls/tokens/cost/top callersGEMINI_API_HARD_DISABLED=true 仍有 Gemini 記錄smoke 直接升為 critical。scheduler 09:10 摘要推播前會先執行一次只讀 smoke讓 Gemini 費用異常不再依賴人工打開 /ai_automation_smoke 才被發現。
  • V10.369 Gemini 防復發測試與極端價差同款放行: 新增靜態測試禁止 production code 在 services.gemini_guard / config.py 之外直接讀 GEMINI_API_KEY,並要求所有 Gemini SDK/REST 出站點必須經 get_gemini_api_key();比價 matcher 針對「同品牌 + 明確 identity anchor + 規格完全一致」但競品價格極端偏低的原生露/眉筆案例抑制價格懲罰,避免真同款因價格差被錯降級,同時補回既有 hard-veto 安全斷言。
  • V10.368 比價搜尋錨點強化: marketplace matcher 補 LUDEYA 蜂王玫瑰外泌微臻霜、雅詩蘭黛微分子肌底原生露、Za / PERIPERA 眉筆眉彩等低信心邊界品牌的 identity anchor並把「兩入組 / 任選色號 / 多色可選 / 櫻花輕盈版」歸為搜尋噪音,讓 MOMO → PChome 搜尋詞更聚焦於同款身份與規格,不被包裝組合或色號選項帶偏。
  • V10.367 Gemini hard egress kill switch: 新增 GEMINI_API_HARD_DISABLED=true 預設硬封鎖,中央 services.gemini_guard 會在 hard switch 未解鎖時拒絕 GEMINI_API_KEY,即使 GEMINI_FALLBACK_ENABLED=true 也不會初始化 SDK 或 REST 出站。Code Review/OpenClaw/MCP/通用 AI fallback 保留 emergency path但必須同時設 GEMINI_API_HARD_DISABLED=falseGEMINI_FALLBACK_ENABLED=true,必要時再用 GEMINI_ALLOWED_CONTEXTS 限定 caller。
  • V10.366 MCP runtime smoke receipt review: 新增 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 是否可升級為已驗收。
  • V10.366 只讀安全邊界: 本階段不保存 payload、不打 health、不開 DB、不抓外站、不掛 scheduler若收據含 DB write/commit/scheduler/writes 旗標或原始 readiness blocked reasons會直接阻擋。
  • V10.365 專業比價分級連動: MOMO/PChome matcher 新增 match_typeprice_basisalert_tier 與 evidence flags將「高信心同款 / 同商品不同包裝 / 同系列不同款 / 可比但需覆核 / 非同款」寫入 diagnostics 與 tagsfeeder、競價情報 repository、Hermes payload、NemoTron 派發與 Telegram 告警格式同步讀取同一份分級。NemoTron 也新增硬閘門:非 exact + total_price + price_alert_exact 的項目即使模型回傳 price alert也會改走人工覆核避免不同包裝或同系列不同款被直接建議降價。
  • V10.364 111 context cap: 111 fallback 即使降到 llama3.2:latestOllama 仍可能用 131k context 啟動 runner導致 3B 模型也吃到 10GB+;新增 OLLAMA_111_NUM_CTX=4096,落到 111 時強制縮 context並把 llama3.2:latest 加入零成本模型表,避免觀測台 unknown model warning。
  • V10.363 Dashing Diva variant-safe search: PChome/MOMO matcher 針對 Dashing Diva 美甲片補「商品頁目錄有 30片/盒、MOMO 標題省略片數」的安全豁免,只限同品牌、同美甲片線、同具名款式錨點;搜尋詞也優先帶出 月影柔霧銀絲柔彩 等款式名,降低同系列不同款式互撞。
  • V10.362 111 fallback shrink-to-3B: 111 Mac 實測 hermes3 / qwen2.5-coder 雖是 7B/8B但 large context runner 仍會佔用 6-10GB RSS 並推高 swap111 fallback 改為所有 7B+、vision 與 long-context 文字生成都降級到 llama3.2:latestai_calls.model 也會記錄實際降級模型並把原請求模型放入 meta.requested_model
  • V10.361 111 fallback resource guard: 實測 111 Mac 高 load 主要來自 Codex app / WindowServer 前台負載,且 Ollama 曾因 fallback 載入 qwen3:14b 造成 16GB RAM / swap 壓力;已手動 unload 111 上的重模型,並讓 OllamaService.generate() 落到 111 時自動把 14B+ 模型降到 OLLAMA_111_MODEL_FALLBACKkeep_alive 縮至 OLLAMA_111_KEEP_ALIVE=5m、timeout 封頂 OLLAMA_111_MAX_TIMEOUT=45。GCP-A/GCP-B 仍可跑 qwen3:14b111 只做短時最後備援。
  • V10.360 browser smoke guard: tests/test_image_fetch.py 改為預設 skip只有 RUN_MOMO_BROWSER_TESTS=1 才會打開外部 MOMO 網站;手動執行時預設 headless並關閉 Chrome password manager/autofill避免一般 pytest 觸發瀏覽器與密碼允許提示。
  • Scheduler Selenium 防彈窗: managed_scraper_resources()credentials_enable_service=falseprofile.password_manager_enabled=false 與 Autofill/PasswordManager feature disable降低背景 Selenium 觸發密碼管理提示的機率。
  • PChome dashboard hot path: competitor_intel_repository.py 的 coverage / review queue 最新 MOMO 價格查詢改用 JOIN LATERAL ... ORDER BY pr.timestamp DESC, pr.id DESC LIMIT 1,避免 window function 掃描造成首頁與覆核隊列熱路徑變慢Dashing Diva 召回搜尋補品線與 magicpress broad terms。

2026-05-21Browse.sh 爬蟲診斷與 PChome 色號比對強化

  • V10.359 Browse.sh optional diagnostics: 新增 services/browse_sh_tool.pyscripts/tools/browse_sh_probe.py,可檢查或執行 browse CLI目前只定位為 MOMO/PChome selector、XHR 與 network trace 探勘,不進 scheduler 主路徑,也不直接寫正式競品價格。
  • MOMO/PChome matcher 色號防錯配: marketplace_product_matcher.py 補護甲油、洗手慕斯、足膜精準搜尋,搜尋詞保留 4.2ml 這類小數規格;唇釉、妝前乳、素顏霜等顯性色號/色系不一致時會 hard veto避免同系列不同色號被推成正式價差。
  • 導入限制: 本機 Node 16 目前因 icu4c 動態庫缺失無法啟動browse.sh 需待 Node 修復或於乾淨主機安裝後才可實跑repo 內先保留 optional wrapper、測試與 playbook。

2026-05-21市場情報 MCP 啟用證據審核

  • V10.358 MCP activation evidence review: 新增 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 缺口。
  • 只讀安全邊界: 本階段不保存 payload、不打 health、不啟動 MCP、不執行 docker/SSH、不開 DB、不抓外站、不掛 schedulerpayload 只允許 redacted/boolean真實 secret 字串與任何 DB write/fetch/scheduler 證據會被阻擋。

2026-05-21市場情報 MCP 完整度稽核

  • V10.357 MCP completion audit: 新增 mcp_completion_audit read-only builder、GET endpoint、UI 面板與 deployment readiness smoke target彙整外部 MCP design/runtime、內部 tool contract/runtime、activation runbook 與 fetch gate 狀態。
  • 只讀安全邊界: 本階段只做完整度稽核,不啟動 MCP、不打 health、不執行 docker/SSH、不開 DB、不寫檔、不抓外站、不掛 scheduler外部 MCP runtime complete 仍需 operator 依 runbook 啟用與 health 驗證。

2026-05-21市場情報 Telegram dispatch report catalog record final closeout gate

  • V10.356 report catalog record final closeout gate: 新增 candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_catalog_record_final_closeout service、POST endpoint、UI 按鈕與 deployment readiness smoke target在 archive summary gate 後覆核 catalog record identity、artifact traceability、sections、DB commit/post-write smoke、pipeline complete 與無後續 follow-up。
  • 只讀安全邊界: 本階段是 catalog record pipeline terminal previewAPI/UI 不讀 approval/Telegram token、不呼叫 LLM、不產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不 commit、不更新 review_state、不掛 scheduler。

2026-05-21市場情報 Telegram dispatch report catalog record archive summary gate

  • V10.355 report catalog record archive summary gate: 新增 candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_catalog_record_archive_summary service、POST endpoint、UI 按鈕與 deployment readiness smoke target在 archive gate 後整理 catalog record identity、artifact traceability、DB commit/post-write smoke、archive manifest/retention policy 與後續 final closeout separate gate。
  • 只讀安全邊界: 本階段只放行到後續 report catalog record final closeout gateAPI/UI 不讀 approval/Telegram token、不呼叫 LLM、不產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不 commit、不更新 review_state、不掛 scheduler。

2026-05-21市場情報 Telegram dispatch report catalog record archive gate

  • V10.354 report catalog record archive gate: 新增 candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_catalog_record_archive service、POST endpoint、UI 按鈕與 deployment readiness smoke target在 closeout gate 後審核 closeout/commit/run receipt/writer output/post-write smoke/backup 封存證據、archive manifest/retention policy 與後續 archive summary separate gate。
  • 只讀安全邊界: 本階段只放行到後續 report catalog record archive summary gateAPI/UI 不讀 approval/Telegram token、不呼叫 LLM、不產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不 commit、不更新 review_state、不掛 scheduler。

2026-05-20市場情報 Telegram dispatch report catalog record closeout gate

  • V10.353 report catalog record closeout gate: 新增 candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_catalog_record_closeout service、POST endpoint、UI 按鈕與 deployment readiness smoke target在 commit gate 後審核 catalog record identity、DB commit/post-write smoke 證據、操作員 closeout 確認與後續 archive separate gate。
  • 只讀安全邊界: 本階段只放行到後續 report catalog record archive gateAPI/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不 commit、不更新 review_state、不掛 scheduler。

2026-05-20市場情報 Telegram dispatch report catalog record commit gate

  • V10.352 report catalog record commit gate: 新增 candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_catalog_record_commit service、POST endpoint、UI 按鈕與 deployment readiness smoke target在 run receipt 後審核外部 CLI catalog record DB commit、post-write smoke、操作員 commit gate 確認與後續 closeout separate gate。
  • 只讀安全邊界: 本階段只放行到後續 report catalog record closeout gateAPI/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不 commit、不更新 review_state、不掛 scheduler。

2026-05-20市場情報 Telegram dispatch report catalog record run receipt

  • V10.351 report catalog record run receipt: 新增 candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_catalog_record_run_receipt service、POST endpoint、UI 按鈕與 deployment readiness smoke target在 run readiness 後審核外部 CLI writer output、catalog record key/hash、DB commit receipt 與 post-write smoke。
  • 只讀安全邊界: 本階段只放行到後續 report catalog record commit gateAPI/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不 commit、不更新 review_state、不掛 scheduler。

2026-05-20市場情報 Telegram dispatch report catalog record run readiness

  • V10.348 report catalog record run readiness: 新增 candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_catalog_record_run_readiness service、POST endpoint、UI 按鈕與 deployment readiness smoke target在 run package 後檢查 payload manifest、manual CLI command、backup/dry-run、run receipt 與 postwrite smoke 條件。
  • 只讀安全邊界: 本階段只放行到後續 report catalog record run receipt gateAPI/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不更新 review_state、不掛 scheduler。

2026-05-20市場情報 Telegram dispatch report catalog record run package

  • V10.347 report catalog record run package: 新增 candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_catalog_record_run_package service、POST endpoint、UI 按鈕與 deployment readiness smoke target在 record write gate 後整理 payload manifest、CLI command bundle、backup/dry-run trace 與後續 run readiness separate gate。
  • 只讀安全邊界: 本階段只放行到後續 report catalog record run readiness gateAPI/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不執行 CLI、不寫 catalog record、不更新 review_state、不掛 scheduler。

2026-05-20市場情報 Telegram dispatch report catalog record write gate

  • V10.344 report catalog record write gate: 新增 candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_catalog_record_write service、POST endpoint、UI 按鈕與 deployment readiness smoke target在 catalog write preflight 後檢查 catalog record key/schema/hash trace、operator dry-run、backup 與 commit separate gate。
  • 只讀安全邊界: 本階段只放行到後續 report catalog record run package gateAPI/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不寫 catalog record、不更新 review_state、不掛 scheduler。

2026-05-20市場情報 Telegram dispatch report catalog write preflight

  • V10.342 report catalog write preflight gate: 新增 candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_catalog_write_preflight service、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。

2026-05-20市場情報 Telegram dispatch report catalog index

  • V10.339 report catalog index gate: 新增 candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_catalog_index service、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。

2026-05-20市場情報 Telegram dispatch report catalog handoff

  • V10.338 report catalog handoff gate: 新增 candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_catalog_handoff service、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。

2026-05-20市場情報 Telegram dispatch report archive summary

  • V10.335 report archive summary gate: 新增 candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_archive_summary service、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。

2026-05-20PChome 核心比價準確率與補抓可觀測性

  • V10.334 MOMO/PChome matcher 強化: 補常見品牌 alias 與任選/平輸/國別 noise 收斂,並加入刀把/刀片/刀頭件數解析、同品牌不同系列硬否決,避免為了提高覆蓋率把 Gillette/Schick 等不同系列錯配成同款。
  • 近門檻候選重新評分: CompetitorPriceFeeder 新增 run_retryable_candidate_revalidation(),優先重評舊 low_score 中 0.70 以上、非 hard veto 且有 PChome product_id 的候選,再補抓高價未配對商品;排程與手動 API 都會納入這段流程。
  • PChome 補抓產線狀態: 商品看板新增 PChome backfill status card後端以 JSON 狀態檔記錄 queued/revalidating/matching/generating_picks/clearing_cache/completed/failed、結果統計與最近 run避免手動補抓後沒有進度與錯誤上下文。

2026-05-20重開機後首頁熱路徑索引持久化

  • Dashboard / PChome 慢查詢修復: 主機重開機後 https://mo.wooo.work/ 首頁可用但多次逾時,實際瓶頸集中在首頁與 PChome coverage 查詢掃描 productsprice_recordscompetitor_match_attempts。線上先補三個索引讓首頁恢復 200並新增 migrations/040_dashboard_hot_path_indexes.sql 將修復持久化到 fresh restore / DB rebuild 流程。
  • Growth Analysis 冷快取修復: /growth_analysismonthly_summary_analysis 落後時會改掃 realtime_sales_monthly 聚合,冷計算約 14 秒;修正為 source fingerprint 未變時延長共享快取有效期,匯入流程仍主動清除快取,避免資料未變卻反覆掃大表。
  • PChome backfill pilot: V10.328 diagnostics 欄位上線後先跑小批次,刷新過期 identity_v2 30 筆11 筆成功更新)、高價未配對 15 筆全被低信心/單位價擋下;樣本確認多數 hard veto 正確,另補 strong_component_line_match 處理 Gennies 類同品牌完整多組件套組。

2026-04-29ADR-017 Phase 3f 模組化收尾啟動

  • DB metadata 救急: database/manager.py 改為顯式載入 permission / AI / autoheal / import / vendor / realtime_sales ORMPostgreSQL 初始化透過 process-local guard + advisory lock 執行 Base.metadata.create_all(),避免新環境漏表與一般流量重複碰 DDL。
  • realtime_sales_monthly 補 ORM: 新增 database/realtime_sales_models.py,並同步 docker/postgres/init/01-init.sql 欄位,避免 fresh volume 先建出窄表後造成匯入欄位靜默遺失。
  • 啟動自檢: app.py 啟動時檢查 34 張 expected metadata tables缺表直接 fail fast防止「看似啟動成功但 create_all 漏表」。
  • 路線校正: 12-Agent 盤點確認 3f-1 需先處理 API shadow 與 system_bp prefix 分裂3f-3 需先補 EventRouter 同步告警 facade再改 scheduler 裸 except

2026-04-29AI 自動化閉環與四 Agent 控制面

  • ADR-018 立案: 正式把 ElephantAlpha 納入 Hermes / NemoTron / OpenClaw 之外的 L3 Orchestrator形成四 AI Agent 自動化控制面。
  • 通知鏈補強: EventRouter 補 AI 失敗降級、Telegram file queue、成功後 replay、去重冷卻與 silence 檢查。
  • 自癒安全回看: AutoHeal 保護 momo-db / momo-postgresDB/DNS 無法安全修復時降級為 alert / wait retry。
  • 記憶閉環: raw ai_insights insert 路徑補 embedding enqueueOpenClaw learning 支援 stale reset 與 missing embedding backfill。
  • L2 action 落地: flag_for_human_reviewroute_to_kmmark_for_relearn 改為可審計 OpenClaw memory 寫入。
  • 可觀測性落地: /metrics 匯出 EventRouter dispatch/latency、safe action、Telegram replay、AutoHeal action/duration 指標。
  • Smoke Dashboard: 新增 /ai_automation_smoke/api/ai-automation/smoke,提供四 Agent 閉環 read-only 快檢。
  • Smoke 趨勢保存: Smoke API 追加 JSONL 精簡紀錄dashboard 顯示最近 OK / Warning / Critical 趨勢。
  • Smoke 趨勢管理: Dashboard 增加 JSONL 匯出、清理與每日摘要,清理範圍限定 smoke history 檔。
  • Smoke 每日摘要推播: 新增 Telegram 手動推播 API 與 momo-scheduler 每日 09:10 摘要任務,只讀 smoke history。
  • Grafana AI 觀測: 新增 MOMO AI Automation Overview provisioning dashboard覆蓋 EventRouter、safe action、replay、AutoHeal Prometheus 指標。
  • Grafana 線上載入與 scrape 修復: 188 active Grafana 載入 4 dashboardsactive Prometheus 補 momo-app scrape job並修復 gunicorn preload LocalProxy boot crash。
  • CD 健康檢查強化: Gitea Actions health check 改為 internal container health + external URL 雙檢查,降低 rebuild 後短暫 502 誤判。
  • CD Sync reload 修復: rsync 後明確 restart 三容器,避免 bind-mounted Python 檔案更新但 gunicorn/scheduler/bot process 未 reload。
  • CD Gunicorn 掛載強化: momo-app./gunicorn.conf.py:/app/gunicorn.conf.py:ro,避免容器 restart 後回吃 image 內舊 gunicorn 設定。
  • Metrics schema drift 降噪: /metricsrealtime_sales_monthly 總筆數改用 raw COUNT(*),避免 ORM 欄位 drift 造成 Prometheus scrape warning。
  • CD Rebuild 切換強化: rebuild 模式改成先 build 成功、再短暫 stop/rm/recreate 三應用容器,避免 no-cache build 長時間 502。
  • ElephantAlpha NIM fallback 強化: production 帳號呼叫 Ultra 253B 會 404預設改用可呼叫的 Nemotron Super 49B v1.5,並加入 70B / 8B fallback。
  • DatabaseManager 連線池收斂: PostgreSQL 每 worker pool 收斂為 pool_size=2/max_overflow=3,並以 cache 重用 engine/session。
  • Ollama embedding API 遷移: embedding client 優先使用官方 /api/embed,舊節點才 fallback /api/embeddings,降低 deprecated endpoint 與 timeout 風險。
  • Scheduler 例外記錄強化: 清除 scheduler.py 靜默 except/passChrome 清理、EDM optional 欄位、備份 insight/Telegram 失敗均保留 log。
  • AI metrics baseline 觀測: /metrics 在尚無 AI 自動化事件時仍輸出 momo_ai_* zero-baseline series避免 app 重啟後 Grafana/Prometheus 看不到 metric names。
  • ElephantAlpha transient fallback: NVIDIA NIM primary model timeout、connection error、429 與 5xx 會嘗試下一個 fallback model400 等非暫時性請求錯誤不重試。
  • 模組化治理守門: 盤點 15 個超過 800 行 Python 大檔,新增 docs/guides/modularization_governance.mdtests/test_modularization_governance.py,防止未分類巨檔再長出來。
  • Legacy 5888 入口清理: 刪除 tests/main_test.py standalone Flask 死碼,測試與自動匯入文件改用 Port 80 /auto_import 入口。
  • OpenClaw Bot 第一刀拆分: Telegram API send/retry/file upload helper 移到 services/openclaw_bot/telegram_api.pyroutes/openclaw_bot_routes.py 往 thin Blueprint 收斂。
  • EDM Dashboard endpoint 修復: 部署後健康檢查抓到活動看板排序連結少 edm. blueprint 前綴,修正模板 endpoint 推導並補 5 個活動頁排序連結回歸測試。
  • Monitoring exporter 修復: Prometheus 已能 scrape momo-app V10.24,但 target 檢查發現 blackbox-exporter 未啟動、cadvisor 因 host 8080 衝突未進入 monitoring DNS改為 cAdvisor internal-only 並補 monitoring compose 守門測試。
  • Active blackbox target 降噪: 線上 Nginx 與 curl 驗證目前有效 MOMO 入口為 https://mo.wooo.workmomo.wooo.work 逾時、wooo.work DNS 不解析,先從 active UAT blackbox targets 移除,避免舊域名噪音誤導告警。
  • action_plans schema drift 修復: CodeReview pipeline 寫入 action plan 時發現線上表只有 NemoTron Group B 欄位;啟動期 PostgreSQL metadata repair 會補 action_type / description / priority / metadata_json 與 index恢復 AI code review action plan 閉環。
  • Gitea runner label 隔離: EWOOOC CD workflow 改用 ewoooc-host110 的 /home/wooo/act-runner runner config 必須只宣告 ewoooc-host,避免 user-level runner 混接 AWOOOI workflow。
  • CD sync hot reload: 一般 Python/模板同步不再 restart momo-app,改為 docker kill -s HUP momo-pro-system 讓 Gunicorn 熱重載 workers只重啟 scheduler / telegram-botGunicorn 關閉 preload_app,確保 HUP 後 workers 會 import 新版 app code。
  • OpenClaw Bot 第二刀拆分: Inline Keyboard builders 移到 services/openclaw_bot/menu_keyboards.py,透過 configure_menu_keyboards() 注入 latest_date/_GOALS/TAIPEI_TZroute 檔下降到 5,240 行並補選單回歸測試。
  • CD sync mount drift guard: 發現舊 app 容器未掛載 app.py/config.pyrsync 後服務檔已更新但 /health 版本仍卡 image 內舊檔CD sync 會檢查 mount僅 drift 時一次性 recreate momo-app其餘維持 HUP 熱重載。
  • CD 單檔 bind mount inode 修復: app.py/config.py 單檔 bind mount 會被 rsync/tar 的 inode replacement 卡住舊檔CD rsync 改用 --inplace,避免 HUP reload 後仍讀到舊版本。
  • Frontend V2 視覺基準立案: MOMO Pro/ prototype 與 docs/guides/frontend_upgrade_roadmap.md 成為前端更版依據AGENTS/CONSTITUTION 改以米色工作台、暖墨文字、焦糖橘 accent 與新版 shell 規範作為後續 UI 基準。
  • Frontend V2 Phase 0 assets: 新增 static/css/ewoooc-tokens.cssstatic/css/ewoooc-shell.csstemplates/ewoooc_base.html_ewoooc_shell.html,先建立可重用 shell不替換既有頁面憲章補「真實資料與真實頁面」紅線禁止假資料冒充完成。
  • Dashboard V2 feature flag: / 預設仍走既有 dashboard.html/?ui=v2 才渲染 dashboard_v2.html;新版頁沿用既有 dashboard 真實資料與篩選/排序參數,不建立 mock 商品或假 KPI。
  • Frontend V2 static mount: momo-app./web/static:/app/web/static:ro,確保 Flask url_for('static', filename='css/ewoooc-*.css') 會從實際 STATIC_DIR=/app/web/static 讀到 V2 CSS保留 ./static:/app/static:ro 供 local-dev Nginx/舊資產相容。
  • EDM Dashboard V2 feature flag: 五個活動看板入口預設仍走既有 edm_dashboard.html,加上 ?ui=v2 才渲染 edm_dashboard_v2.html;新版頁沿用既有活動真實 grouped_items/slot_stats/scheduler_stats

2026-05-01Frontend V2 營運頁推進

  • Vendor Stockout V2 production default: /vendor-stockout 預設渲染 vendor_stockout_index_v2.html?ui=legacy 才回舊頁;統計來自正式 VendorStockout/VendorList/VendorEmail/EmailSendLog 查詢,不建立假資料。
  • Vendor Stockout List V2 production default: /vendor-stockout/list 預設渲染 vendor_stockout_list_v2.html?ui=legacy 才回舊頁;清單、批次、搜尋、分頁與狀態統計都從正式 VendorStockout 查詢組裝,並移除重複的 web/templates/vendor_stockout_index_v2.html
  • Vendor query service extraction: Vendor V2 首頁統計與缺貨清單 query 移到 services/vendor_stockout_query_service.pyroutes/vendor_routes.py 由約 1,821 行降至 1,675 行,回到 request parsing + template rendering避免巨型 Blueprint 繼續承接資料組裝邏輯。
  • Vendor stockout API query extraction: /vendor-stockout/api/stockout/list/vendor-stockout/api/stockout/batches 的 query/serialization 移入同一個 services/vendor_stockout_query_service.py,保留既有 JSON shaperoutes/vendor_routes.py 再降至約 1,565 行。
  • Vendor management query extraction: /vendor-stockout/api/vendor/list/vendor-stockout/api/vendor/<vendor_code> 的 query/serialization 移入 services/vendor_stockout_query_service.py,保留既有 JSON shaperoutes/vendor_routes.py 再降至約 1,485 行。
  • Health-safe monitoring runtime: 健康檢查失敗盤點確認 Blackbox 打 Dashboard 首頁 / 會觸發重型查詢並和 /health 搶 worker188 與 110 active blackbox 均改打 /healthGunicorn 預設改為 gthread + GUNICORN_THREADS=4CD 也會在 monitoring target 變更時重新載入 Prometheus/blackbox。

2026-04-28~29Phase 3e 重構大戰 + daily_sales cache 隱形 bug 根除

  • app.py 縮減 -10.8%: 7,386 → 6,590 行11 commits 全綠零 502。
  • 抽 Blueprint: /api/categoriescategory_routes.py (8fce73b)/api/test_url + /brand_assetsmisc_routes.py (e676840)。
  • 揭發 4 個改進版死碼: refactor-specialist 28 條雙重 URL 等價性矩陣指出 /growth_analysis/daily_sales/api/export/excel/abc/api/run_task 在 routes/*.py 已重構但因 Flask first-registered-wins 規則被 app.py 同 URL @app.route shadow 從未生效。本輪先啟用 daily_sales (8fefea0),餘三條待後續。
  • daily_sales cache 機制重構 (ADR-016): 「匯入 15323 筆但業績頁面看不到」隱形 bug 根因 = gunicorn 4 worker 各持獨立 module-level dict。先嘗試 N-POST broadcast hack 命中率僅 9.4%debugger + web-researcher + migration-engineer 三方共識);改用 DB fingerprint (MAX(snapshot_date), COUNT(*)) 雙閘失效 (3971fd4),強一致無浪費。
  • clear_cache endpoint 加 @login_required: 修 critic HIGH-3外部 POST 無 auth 回 400CSRF + login 雙重攔截)。
  • hook 9 PoC 強化 (136e65b): vuln-verifier 對 .claude/hooks/momo-prod-guard.js 跑 9 條 PoC 8 條繞過 → 補強 heredoc / writable CTE / multi-statement / pg_read_file / COPY FROM PROGRAM / /run/secrets / /proc/*/environ 全擋。
  • 12 Agent 並行作戰實踐: 8 完成 + 4 rate-limited學到 critic 必須先於 fullstack-engineer 完成feedback_agent_dispatch_order.md
  • 殘留 HIGH-2 技術債: app.py 仍 43 處 _SALES_PROCESSED_CACHEsales_analysis 等獨立 cache待後續抽 services/cache_manager.py

2026-04-28AI 引擎穩定性與 CI/CD 幽靈容器大規模修復

  • 幽靈容器排除: 發現 docker-compose.yml 漏掛載 routes 目錄,導致 Telegram Bot 長期執行舊代碼。
  • 埠位衝突修復: 移除 depends_on: postgres 以解決與 orphan momo-db 的 5432 埠位競爭問題。
  • CI/CD 強化: cd.yaml 引入 --no-cachedocker compose restart 以應對快取損壞與容器識別問題。
  • AI 備援優化: 放寬 Ollama 健康檢查至 10s請求超時至 180s修復 Gemini 429 速率限制與 MCP 404 報錯。
  • 網站 502 修復: 手動恢復因容器重建中斷的 110-188 SSH 隧道。

2026-02-13重開機服務修復與 Clawdbot 整合

  • 更新 system_startup.sh v2.0,移除 Harbor 相關邏輯。
  • 重新設計 Monitor 首頁,移除不存在的服務連結。
  • 實作 Ollama Server 端的 Clawdbot 整合腳本。

2026-02-09域名健康監控與服務修復

  • 新增 domain-health-monitor.sh,每 5 分鐘自動巡檢。
  • 修復 n8n Task Runner 403 錯誤。

2026-02-07CI/CD Dashboard 與 Registry 遷移

  • 完全移除 Harbor改用輕量級 Docker Registry。
  • 開發 CI/CD Dashboard 頁面 (/cicd)。

2026-01-28核心問題修復

  • 502 Bad Gateway: 發現 Docker 網路棧故障,新增自動重啟機制。
  • OOM 問題: 修復業績匯入進程因記憶體消耗過大被 SIGKILL 的問題。
  • Ollama 監控: 實作 AI 服務器健康專項監控。

🛠️ 過往技術爭議與決策 (ADR 前身)

  • 資料流向: 確立 daily_sales_snapshot 為 SOT同步至 realtime_sales_monthly
  • 快取機制: 使用 FileLock 解決 Gunicorn 多 Worker 重建快取競爭。
  • 時區處理: 強制使用 Asia/Taipei 並於 SQLite 存儲 naive datetime。

詳細原始紀錄請參閱 Git Commit History 或 110 主機備份目錄。