95 KiB
95 KiB
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: 專案正式正名為 EwoooC,AI 治理架構 Phase 4 結案(V10.3)。
- 2026-02-13: WOOO AIOps SaaS 核心模組完成。
- 2026-01-24: 曾嘗試遷移至 K3s(後於 04-18 審計確認回歸 Docker Compose)。
- 2026-01-12: 專案啟動,MOMO 監控系統初版。
📅 詳細更新日誌 (考古存檔)
2026-05-31:Webcrumbs 共用 UI Runtime 與市場情報 writer approval
- V10.515 Webcrumbs host data 硬性授權: 發現正式環境一般
@login_required可能因DISABLE_LOGIN=true放行後,為/api/webcrumbs/marketplace-host-data與/webcrumbsinline seed 加上獨立授權判斷;只有登入 session 或X-Internal-Key可取得真實 SKU/價差,未授權時只回auth_required空狀態,避免 public runtime 診斷頁洩漏正式比價資料。 - V10.514 Webcrumbs host data read-only API: 新增登入後
/api/webcrumbs/marketplace-host-data,回傳與/webcrumbsinline seed 相同的 MOMO/PChome exact 價差 host data contract,供 plugin、QA 與其他專案 proxy 驗證;API boundary 明確標示writes_database=false、calls_llm=false、fetches_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,讓/webcrumbslive 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.0、finance.ai-candidate-card/0.1.0live 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 path(loader/、plugins/、demo/),避免webcrumbs.wooo.work公網 TLS、Basic Auth 或入口轉發尚未完成時造成頁面 script 載入失敗;/webcrumbs診斷頁同步顯示 asset upstream,WEBCRUMBS_PLUGIN_BASE_URL預設改為同源/webcrumbs-assets/plugins。 - V10.507 Webcrumbs 共用 UI Runtime 接入: 新增
WEBCRUMBS_*設定、/webcrumbs診斷頁、全站ewoooc_base.htmlruntime 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_preflightapproval 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-24:PChome 近門檻身份回收第二輪
- 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/ewooocpreflight 失敗;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_queue、write_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 identity:TS6 超美白香氛誘霜 120g/ml、W 修護保養蝸牛特潤修護面膜 6 片、Derma 大地 Eco 植萃護膚油 2 入。這些樣本只升到identity_review / manual_review,不進price_alert_exact;同版補 Clarins 身體油不同線、命名組合品數量反轉、isLeaf 香型數量不一致 hard veto,HOOOME 大理石暖燈單側設計差留人工覆核。 - V10.488 市場情報 MCP Fetch Run Receipt gate: 新增
/api/market_intel/mcp_fetch_run_receipt與 UI preview,只審核操作員 shell dry-run 後貼回的 receipt;API 不執行 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 proxy11435/11436與 GCP-Bbge-m3runtime。現況確認:GCP-A22/11434refused、GCP-B22/11434open 但 SSH key denied、GCP-B embed OK、110:11435 502、110:11436 OK;primary 修復需 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 healthOLLAMA_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/embedprobe,避免 GCP-B 出現 tags/version 正常、但實際 embedding runner 20s timeout 時仍被標 healthy;111 預設不做背景 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_HOST、HERMES_URL、EMBEDDING_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_safelane,僅針對正式近門檻樣本中同品牌、同品名、同規格/同入數的 3W CLINIC 粉底液 2入、花美水凝膠 3支、The Ordinary 咖啡因 EGCG 30ml、KUSSEN 屁屁膏 3入、Bone 擴香禮盒、1990 融燭燈白色款與 CANMAKE 淚袋盤,讓exact/manual_review可升到exact/total_price/price_alert_exact;未放寬MIN_MATCH_SCORE,DASHING DIVA、唇彩、香味、色號/款式敏感商品仍維持 variant / veto 保護。Production pilot 已將 SKU6101639、10074951、7760902、TP00074980000005、14774766、10142589、10262470、10262471、11308520materialize 到人工覆核隊列,true_low_confidence802→793、rescore_accepted_current38→47;6101784即期品因商業條件不同仍留在低信心覆核。 - 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 已將 SKU14756069、11159042、13842560、8394210、15192547、10509765、10603780materialize 到人工覆核隊列;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.py與fetch_match_attempt_rescore_rows()增加--sku/skus篩選,可針對 DR.WU 這類明確 cohort 做 3-10 筆精準 materialize,不必為了 pilot 掃整批true_low_confidence。 - V10.463 DR.WU / 達爾膚品牌 alias:
marketplace_product_matcher補DR.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會為資源壓力告警產生 deterministicdecision_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 覆核信封共用摘要 formatter;OpenClaw 週報/日報/月報、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、建議人工動作、預期價差、資料品質與「不可自動寫正式價差」guardrails;review 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排除後,SKU8884618KATE 怪獸級持色唇膏(MOMO 多款任選 vs PChome 單一水光款)已退回最新true_low_confidence,最終只保留 SKU10922465Herbacin 小甘菊護手霜 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_prices;manual_review、identity_review、variant_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_conflictveto。這輪目標是讓 retryable replay 可救回真同款,同時先封住 MIRAE 入數與 GONESH 香味款式的假陽性。 - V10.452 PChome rescore audit 最新狀態口徑:
scripts/audit_competitor_match_attempt_rescore.py與fetch_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_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,避免每次操作全量覆核頁都為總筆數重掃整個 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,不再先建完整 Dashboardunique_items;當頁只查 50 筆覆核 SKU 的商品資料、最新價、昨日價與週前價,仍沿用同一張新版表格、狀態分流、PChome 候選說明與人工覆核按鈕,降低核心比價覆核頁的全站資料負載。 - V10.444 PChome 覆核頁查詢瘦身:
fetch_competitor_review_queue_page()將原本 count + page 兩次重跑 review CTE 改成單次 SQL 的total_rows+paged_rows查詢,同步取得總數與頁面資料,降低/?filter=pchome_review對latest_momo/latest_attempt/valid_competitor的重複掃描;正式站小批次 rescore 入隊後,用於維持核心比價覆核頁可操作速度。 - V10.443 PChome rescore 人工覆核入隊:
scripts/audit_competitor_match_attempt_rescore.py --apply-accepted只會把最新版 matcher 已通過門檻的舊低信心候選追加為rescore_accepted_currentattempt,進入商品看板人工覆核隊列;不寫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.work與awoooi不再回到 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的 activeppt_reportscache,避免重新產出仍命中舊簡報。頁面也把 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 明確 cast:PostgreSQL 使用"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_conflict、nail_tool_function_conflict、schick_razor_line_conflict、variant_selection_review等具體狀態文案;_load_pchome_match_attempt_map()同步解析match_diagnostic_json產生diagnostic_reasons/diagnostic_reason_text,讓 overview、覆核隊列、商品列表與 Excel 的診斷語意一致。 - V10.434 PChome 人工覆核閉環補搜尋: 商品看板 PChome review queue 新增「補搜尋」人工決策按鈕,對應
needs_research→manual_needs_research;manual_rejected、manual_unit_price_required、manual_needs_research納入全部覆核隊列與「人工閉環」篩選,避免操作員按完否決/單位價/補搜尋後項目從列表消失、後續無法追蹤。 - V10.433 PChome 覆核診斷標籤與 variant 回刷補強:
competitor_intel_repository的 review queue / 商品看板 / Excel export 改為優先讀取match_diagnostic_json.reasons,再 fallback 文字版error_message;同步補makeup_finish_conflict、nail_tool_function_conflict、schick_razor_line_conflict、variant_descriptor_conflict等操作員可讀標籤,讓商品列表顯示「妝效質地不同、工具功能不同、除毛刀品線不同」而不是 raw machine code。matcher 另補 MUJI 精油芬香護手霜的 brandless exact recovery,PChome 標題缺品牌但身份詞與 50g 規格一致時可進 manual-review identity;peripera 多色任選 vs 單一色號會標記variant_selection_review並留在true_low_confidence,避免被誤列為可批次救回。 - V10.432 近門檻比價 hard-veto 補強: marketplace matcher 不放寬
MIN_MATCH_SCORE,針對正式true_low_confidence前段新增窄範圍防錯配:M.A.CMACximal柔霧唇膏 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提升為 EventRouterevent.id;triaged_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.425–V10.428變更;此版不放寬商品比對門檻、不修改competitor_prices寫入規則。 - V10.428 NemoTron 價格決策信封落地:
NemoTronDispatcher的price_alert與human_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 角色決策統一輸出severity、evidence、recommended_action、expected_impact、confidence、guardrails與trace;缺證據時必須明確標記資料品質與 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_conflict與hoi_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 會被 reset,111 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_veto,diagnostic_codes=["dr_hsieh_labsmart_line_conflict"];matched維持 1619、true_low_confidence753→751、identity_veto4011→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=1m;OpenClaw learning worker 與 RAG 查詢預設只跑 GCP-A → GCP-B,不再把bge-m3背景 embedding / semantic RAG 轉嫁到 111。預設OLLAMA_EMBED_TIMEOUT=15、OLLAMA_EMBED_MAX_TIMEOUT=15、OLLAMA_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_veto;matched維持 1619、true_low_confidence759→753、recoverable_low_score1→0、identity_veto4004→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_comparable,diagnostic_codes補上pack_quantity_difference/unit_comparable,matched不增加、正式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_readinessread-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,最後落到 111llama3.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_packageread-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 / Summer’s Eve / Solone 近門檻 review-only 回收: marketplace matcher 追加三條窄範圍 focused identity:rom&nd 果汁唇釉 2.0 catalog、Summer’s Eve 舒摩兒全肌防護浴潔露 2入、Solone 持久眼線筆;皆只進
identity_review/ manual-review,不直接價格告警。production pilot 已回刷 3/3,matched1616→1619、true_low_confidence763→760;rom&nd 染眉膏 ZO&FRIENDS 色號、Summer’s Eve 雙天王任選、Lactacyd 清新舒涼 vs 生理呵護、MAC 柔霧 vs 緞光、NIVEA / 曼秀雷敦包數差異仍不自動救回,維持準確率優先。 - V10.410 Code Review timeout 梯度改為保護 111: 部署後實測顯示 GCP-A 從 188 失聯時,Code Review 仍會先等 primary 45s,GCP-B 完整審查 prompt 又常因 25s 太短而 timeout,最後轉落 111。
CODE_REVIEW_OLLAMA_TIMEOUT預設收斂為15s,CODE_REVIEW_OLLAMA_SECONDARY_TIMEOUT放寬為60s;Hermes LLM scan 若啟用則 primary15s、secondary45s。目標是 A 掛時更快讓位給 B,並給 B 足夠時間完成,避免過早壓到 111。 - V10.409 MCP fetch target review gate: 新增
mcp_fetch_target_reviewread-only builder、GET/POST endpoint、UI target review 審核面板與 deployment readiness smoke target,讓 manual fetch handoff 通過後,先審核 adapter registry 公開入口、每平台節流、樣本數、timeout 與 rollback plan;API/UI 不保存 payload、不發外部 request、不開 DB、不寫入、不掛 scheduler,也不會自動打開 manual fetch。 - V10.408 OPI 指甲油 catalog review-only 回收: marketplace matcher 針對 OPI 類光繚指甲油加入同系列 catalog focused identity,只在「白日夢遊」或「驕傲果凍」系列名雙方一致時進
identity_review;12色/11色視為可選色號數差異,不當作販售件數,跨系列仍維持 suppress。production pilot 已回刷 KATE 怪獸級持色唇膏限量款與兩個 OPI SKU 共 3/3,matched1613→1616、true_low_confidence766→763,三筆皆為alert_tier_identity_review/price_basis_manual_review,不進 Hermes 直接價格告警。 - V10.407 Hermes/OpenClaw runner 熱駐留收斂: V10.406 後續觀測顯示 GCP-B 仍會被 Hermes/OpenClaw 的
24hkeep-alive runner 壓高 load,導致 GCP-B generate timeout 後轉落 111。HERMES_KEEP_ALIVE與OPENCLAW_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_handoffread-only builder、GET/POST endpoint、UI handoff package 審核面板與 deployment readiness smoke target,讓 runtime promotion package 搭配操作員公開頁面、節流、無登入/反爬、無 DB、無 scheduler 確認後,只放行到人工 fetch gate operator review;API/UI 不保存 payload、不打 health、不開 DB、不抓外站、不掛 scheduler,也不會自動打開 manual fetch。 - V10.404 Hermes 競價威脅漏斗只吃 direct alert:
HermesAnalystService.fetch_candidates()的competitor_pricesJOIN 新增硬條件,只讓match_type=exact、price_basis=total_price、alert_tier=price_alert_exact的 identity_v2 配對進入 Hermes 競價威脅分析;identity_review、unit_price_review與suppress仍保留在 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_review。CompetitorPriceFeeder._fetch_retryable_candidate_skus()擴大每日 revalidation 候選池,納入true_low_confidence、unit_comparable、refresh_unit_comparable與高分identity_veto;但仍要求 PChome product_id、best_match_score >= 0.70,且正式寫入前必須由現行 matcher 重判、通過 hard-veto 與既有配對保護。 - V10.402 catalog variant identity-review 回收: marketplace matcher 新增 Johnson’s 嬰兒潤膚乳 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這類括號內規格串不再被計成額外組件;Kiehl’s1號護唇膏的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。John’s 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_conflicthard veto;同時把入門組納入套組詞,避免理膚寶水抗敏入門組被拿去跟單瓶乳液做總價比價。 - V10.393 組合包
+判定修正與 catalog 補強: marketplace matcher 的組合包件數判定會先排除SPF50+、PA++++等防曬係數加號,以及NTT80+AL414這類純型號碼串,避免把防曬品與 OPI 套組的規格/型號加號誤判成多一個商品組件;CeraVe 三件組 vs 兩件組仍維持multi_component_count_conflicthard 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 同款證據帶進 Telegram:
match_type、price_basis、alert_tier與match_score會獨立成「證據」行,讓人工審核能分辨高信心同款、總價可比、單位價覆核與身份覆核,不再只看到乾巴巴的MOMO vs PChome長句。同版 marketplace matcher 補 Relove「私密潔淨凝露」identity anchor 與聯名款搜尋噪音,避免 PLAY BOY / 小虎等活動詞壓過真同款名稱。 - V10.386 Gemini compose hard default / KATE 唇膏比對:
docker-compose.yml針對momo-app、scheduler、telegram-bot明確釘住GEMINI_API_HARD_DISABLED=true與GEMINI_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_result、no_match、低信心、單位價覆核、既有配對保護與爬蟲錯誤時,會把 read-onlybrowse_diagnostic_json寫入competitor_match_attempts,內含 PChome search URL 與建議browse get/open命令;正式排程仍 API-first,PCHOME_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=4096、keep_alive=5m,避免 GCP-A/GCP-B 短暫 timeout 後把長篇 Hermes/OpenClaw 工作轉嫁到 111 造成 swap 與 load 飆高。 - V10.379 MCP runtime promotion gate: 新增
mcp_runtime_promotionread-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_router的ea_engine即使 caller 傳入gemini-2.0-flashdefault,也會改回hermes3:latest,需要深推理才升deepseek-r1:14b;ElephantAlphaOrchestrator的 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 guard,run_edm_task/run_festival_task/run_promo_event_task遇到「很抱歉此EDM不存在」時會接受 browser alert、寫入Skipped / edm_unavailablestats,且不再送 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 正常卻被誤報 critical;EventRouter 失敗佇列回放改為重建短版 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,每天檢查近 24hai_calls.provider='gemini'的 calls/tokens/cost/top callers;若GEMINI_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=false與GEMINI_FALLBACK_ENABLED=true,必要時再用GEMINI_ALLOWED_CONTEXTS限定 caller。 - V10.366 MCP runtime smoke receipt review: 新增
mcp_runtime_smoke_receiptread-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_type、price_basis、alert_tier與 evidence flags,將「高信心同款 / 同商品不同包裝 / 同系列不同款 / 可比但需覆核 / 非同款」寫入 diagnostics 與 tags;feeder、競價情報 repository、Hermes payload、NemoTron 派發與 Telegram 告警格式同步讀取同一份分級。NemoTron 也新增硬閘門:非exact + total_price + price_alert_exact的項目即使模型回傳 price alert,也會改走人工覆核,避免不同包裝或同系列不同款被直接建議降價。 - V10.364 111 context cap: 111 fallback 即使降到
llama3.2:latest,Ollama 仍可能用 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 並推高 swap;111 fallback 改為所有 7B+、vision 與 long-context 文字生成都降級到llama3.2:latest,ai_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_FALLBACK、keep_alive縮至OLLAMA_111_KEEP_ALIVE=5m、timeout 封頂OLLAMA_111_MAX_TIMEOUT=45。GCP-A/GCP-B 仍可跑qwen3:14b,111 只做短時最後備援。 - 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=false、profile.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 召回搜尋補品線與magicpressbroad terms。
2026-05-21:Browse.sh 爬蟲診斷與 PChome 色號比對強化
- V10.359 Browse.sh optional diagnostics: 新增
services/browse_sh_tool.py與scripts/tools/browse_sh_probe.py,可檢查或執行browseCLI;目前只定位為 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_evidenceread-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、不抓外站、不掛 scheduler;payload 只允許 redacted/boolean,真實 secret 字串與任何 DB write/fetch/scheduler 證據會被阻擋。
2026-05-21:市場情報 MCP 完整度稽核
- V10.357 MCP completion audit: 新增
mcp_completion_auditread-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_closeoutservice、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 preview;API/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_summaryservice、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 gate;API/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_archiveservice、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 gate;API/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_closeoutservice、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 gate;API/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_commitservice、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 gate;API/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_receiptservice、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 gate;API/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_readinessservice、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 gate;API/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_packageservice、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 gate;API/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_writeservice、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 gate;API/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_preflightservice、POST endpoint、UI 按鈕與 deployment readiness smoke target,在 report catalog index 後整理 catalog record identity、write source trace、record schema preflight 與 runtime safety。 - 只讀安全邊界: 本階段只放行到後續 report catalog record write gate;API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫 catalog preflight file、不寫 catalog record、不更新
review_state、不掛 scheduler。
2026-05-20:市場情報 Telegram dispatch report catalog index
- V10.339 report catalog index gate: 新增
candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_catalog_indexservice、POST endpoint、UI 按鈕與 deployment readiness smoke target,在 report catalog handoff 後整理 catalog index identity、handoff source trace、index manifest 與 runtime safety。 - 只讀安全邊界: 本階段只放行到後續 report catalog write preflight gate;API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫 catalog index file、不寫 catalog record、不更新
review_state、不掛 scheduler。
2026-05-20:市場情報 Telegram dispatch report catalog handoff
- V10.338 report catalog handoff gate: 新增
candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_catalog_handoffservice、POST endpoint、UI 按鈕與 deployment readiness smoke target,在 report archive summary 後整理 catalog identity、artifact manifest、section keys 與 hash traceability。 - 只讀安全邊界: 本階段只放行到後續 report catalog index gate;API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫 catalog record、不更新
review_state、不掛 scheduler。
2026-05-20:市場情報 Telegram dispatch report archive summary
- V10.335 report archive summary gate: 新增
candidate_queue_review_ai_summary_persistence_telegram_dispatch_report_archive_summaryservice、POST endpoint、UI 按鈕與 deployment readiness smoke target,在 report archive 後整理 report identity、archive traceability、integrity review 與 runtime safety sections。 - 只讀安全邊界: 本階段只放行到後續 report catalog handoff gate;API/UI 不讀 approval/Telegram token、不呼叫 LLM、不補產報表、不派送 Telegram、不開 DB、不寫檔、不更新
review_state、不掛 scheduler。
2026-05-20:PChome 核心比價準確率與補抓可觀測性
- 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 查詢掃描products、price_records、competitor_match_attempts。線上先補三個索引讓首頁恢復 200,並新增migrations/040_dashboard_hot_path_indexes.sql將修復持久化到 fresh restore / DB rebuild 流程。 - Growth Analysis 冷快取修復:
/growth_analysis在monthly_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-29:ADR-017 Phase 3f 模組化收尾啟動
- DB metadata 救急:
database/manager.py改為顯式載入 permission / AI / autoheal / import / vendor / realtime_sales ORM,PostgreSQL 初始化透過 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_bpprefix 分裂,3f-3 需先補 EventRouter 同步告警 facade,再改 scheduler 裸except。
2026-04-29:AI 自動化閉環與四 Agent 控制面
- ADR-018 立案: 正式把 ElephantAlpha 納入 Hermes / NemoTron / OpenClaw 之外的 L3 Orchestrator,形成四 AI Agent 自動化控制面。
- 通知鏈補強: EventRouter 補 AI 失敗降級、Telegram file queue、成功後 replay、去重冷卻與 silence 檢查。
- 自癒安全回看: AutoHeal 保護
momo-db/momo-postgres,DB/DNS 無法安全修復時降級為 alert / wait retry。 - 記憶閉環: raw
ai_insightsinsert 路徑補 embedding enqueue;OpenClaw learning 支援 stale reset 與 missing embedding backfill。 - L2 action 落地:
flag_for_human_review、route_to_km、mark_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 Overviewprovisioning dashboard,覆蓋 EventRouter、safe action、replay、AutoHeal Prometheus 指標。 - Grafana 線上載入與 scrape 修復: 188 active Grafana 載入 4 dashboards;active Prometheus 補
momo-appscrape 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 降噪:
/metrics的realtime_sales_monthly總筆數改用 rawCOUNT(*),避免 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/pass,Chrome 清理、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 model,400 等非暫時性請求錯誤不重試。
- 模組化治理守門: 盤點 15 個超過 800 行 Python 大檔,新增
docs/guides/modularization_governance.md與tests/test_modularization_governance.py,防止未分類巨檔再長出來。 - Legacy 5888 入口清理: 刪除
tests/main_test.pystandalone Flask 死碼,測試與自動匯入文件改用 Port 80/auto_import入口。 - OpenClaw Bot 第一刀拆分: Telegram API send/retry/file upload helper 移到
services/openclaw_bot/telegram_api.py,routes/openclaw_bot_routes.py往 thin Blueprint 收斂。 - EDM Dashboard endpoint 修復: 部署後健康檢查抓到活動看板排序連結少
edm.blueprint 前綴,修正模板 endpoint 推導並補 5 個活動頁排序連結回歸測試。 - Monitoring exporter 修復: Prometheus 已能 scrape
momo-appV10.24,但 target 檢查發現blackbox-exporter未啟動、cadvisor因 host8080衝突未進入 monitoring DNS;改為 cAdvisor internal-only 並補 monitoring compose 守門測試。 - Active blackbox target 降噪: 線上 Nginx 與 curl 驗證目前有效 MOMO 入口為
https://mo.wooo.work;momo.wooo.work逾時、wooo.workDNS 不解析,先從 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-host;110 的/home/wooo/act-runnerrunner 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-bot;Gunicorn 關閉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_TZ,route 檔下降到 5,240 行並補選單回歸測試。 - CD sync mount drift guard: 發現舊 app 容器未掛載
app.py/config.py時,rsync 後服務檔已更新但/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.css、static/css/ewoooc-shell.css、templates/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,確保 Flaskurl_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-01:Frontend 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.py,routes/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 shape,routes/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 shape,routes/vendor_routes.py再降至約 1,485 行。 - Health-safe monitoring runtime: 健康檢查失敗盤點確認 Blackbox 打 Dashboard 首頁
/會觸發重型查詢並和/health搶 worker;188 與 110 active blackbox 均改打/health,Gunicorn 預設改為gthread+GUNICORN_THREADS=4,CD 也會在 monitoring target 變更時重新載入 Prometheus/blackbox。
2026-04-28~29:Phase 3e 重構大戰 + daily_sales cache 隱形 bug 根除
- app.py 縮減 -10.8%: 7,386 → 6,590 行,11 commits 全綠零 502。
- 抽 Blueprint:
/api/categories→category_routes.py(8fce73b);/api/test_url+/brand_assets→misc_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.routeshadow 從未生效。本輪先啟用 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 回 400(CSRF + 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_CACHE(sales_analysis 等獨立 cache)待後續抽services/cache_manager.py。
2026-04-28:AI 引擎穩定性與 CI/CD 幽靈容器大規模修復
- 幽靈容器排除: 發現
docker-compose.yml漏掛載routes目錄,導致 Telegram Bot 長期執行舊代碼。 - 埠位衝突修復: 移除
depends_on: postgres以解決與 orphanmomo-db的 5432 埠位競爭問題。 - CI/CD 強化:
cd.yaml引入--no-cache與docker compose restart以應對快取損壞與容器識別問題。 - AI 備援優化: 放寬 Ollama 健康檢查至 10s,請求超時至 180s,修復 Gemini 429 速率限制與 MCP 404 報錯。
- 網站 502 修復: 手動恢復因容器重建中斷的 110-188 SSH 隧道。
2026-02-13:重開機服務修復與 Clawdbot 整合
- 更新
system_startup.shv2.0,移除 Harbor 相關邏輯。 - 重新設計 Monitor 首頁,移除不存在的服務連結。
- 實作 Ollama Server 端的
Clawdbot整合腳本。
2026-02-09:域名健康監控與服務修復
- 新增
domain-health-monitor.sh,每 5 分鐘自動巡檢。 - 修復 n8n Task Runner 403 錯誤。
2026-02-07:CI/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 主機備份目錄。