fix: clarify pchome review candidate copy
All checks were successful
CD Pipeline / deploy (push) Successful in 1m3s

This commit is contained in:
ogt
2026-06-26 18:41:09 +08:00
parent 55907c6fe2
commit e76e05510c
5 changed files with 17 additions and 12 deletions

View File

@@ -402,7 +402,7 @@ YOUTUBE_API_KEY = os.getenv('YOUTUBE_API_KEY', '')
# ========================================== # ==========================================
# 系統版本與路徑 # 系統版本與路徑
# ========================================== # ==========================================
SYSTEM_VERSION = "V10.715" SYSTEM_VERSION = "V10.716"
LOG_FILE_PATH = os.path.join(BASE_DIR, 'logs/system.log') LOG_FILE_PATH = os.path.join(BASE_DIR, 'logs/system.log')
public_url = PUBLIC_URL # 用於模板顯示 public_url = PUBLIC_URL # 用於模板顯示

View File

@@ -2,7 +2,7 @@
> **最後更新**: 2026-06-26 (台北時間) > **最後更新**: 2026-06-26 (台北時間)
> **狀態**: 🟢 四 AI Agent 自動化閉環已落地LLM 路由紅線升級為 Ollama-first 三主機級聯PChome 後台業績匯入韌性已補強產品定位正名為「PChome 業績成長自動化作戰系統」外部市場來源正規化層、自動同步、作戰清單與價格參考表優先讀取、CSV 備援預檢、前台操作入口、高可見頁面繁中化守門、比價/作戰 UI 工作台化、跨平台來源治理與商品身份 UI 契約已建立GCP embedding 熔斷延後處理、110 proxy rescue 與 direct host health skip 已建立 > **狀態**: 🟢 四 AI Agent 自動化閉環已落地LLM 路由紅線升級為 Ollama-first 三主機級聯PChome 後台業績匯入韌性已補強產品定位正名為「PChome 業績成長自動化作戰系統」外部市場來源正規化層、自動同步、作戰清單與價格參考表優先讀取、CSV 備援預檢、前台操作入口、高可見頁面繁中化守門、比價/作戰 UI 工作台化、跨平台來源治理與商品身份 UI 契約已建立GCP embedding 熔斷延後處理、110 proxy rescue 與 direct host health skip 已建立
> **適用版本**: V10.715 > **適用版本**: V10.716
--- ---
@@ -800,3 +800,4 @@ POSTGRES_HOST=momo-db
| 2026-06-26 | 正式容器不得繼承互動式 Google Drive OAuth | V10.713 起 `momo-app``momo-scheduler``momo-telegram-bot``GOOGLE_DRIVE_ALLOW_INTERACTIVE_AUTH` 固定為 `false`,不再允許 `.env` 在主機重啟後把排程帶回瀏覽器 OAuth人工授權只可用一次性腳本完成正式匯入缺 token 時必須 fail-closed 並回可處理訊息。 | | 2026-06-26 | 正式容器不得繼承互動式 Google Drive OAuth | V10.713 起 `momo-app``momo-scheduler``momo-telegram-bot``GOOGLE_DRIVE_ALLOW_INTERACTIVE_AUTH` 固定為 `false`,不再允許 `.env` 在主機重啟後把排程帶回瀏覽器 OAuth人工授權只可用一次性腳本完成正式匯入缺 token 時必須 fail-closed 並回可處理訊息。 |
| 2026-06-26 | AI 銷售建議商品區塊必須商品身份優先 | V10.714 起 `/ai_recommend` 熱銷商品參考改為商品卡,後端 bestseller API 回傳平台、商品 ID、賣場連結與圖片欄位前端必須顯示縮圖、平台、商品 ID、價格與開賣場操作缺圖/缺連結需顯示待補狀態,並把商品 ID / URL 帶入銷售建議上下文。 | | 2026-06-26 | AI 銷售建議商品區塊必須商品身份優先 | V10.714 起 `/ai_recommend` 熱銷商品參考改為商品卡,後端 bestseller API 回傳平台、商品 ID、賣場連結與圖片欄位前端必須顯示縮圖、平台、商品 ID、價格與開賣場操作缺圖/缺連結需顯示待補狀態,並把商品 ID / URL 帶入銷售建議上下文。 |
| 2026-06-26 | AI 銷售建議前端不得保留 raw content 路徑 | V10.715 起 `/ai_recommend` 只使用已整理的外部訊號摘要與可用線索;搜尋或商品洞察結果若未整理成結構,前端只顯示可理解的待整理狀態,不再把 raw content 當上下文或 fallback 分支保留。 | | 2026-06-26 | AI 銷售建議前端不得保留 raw content 路徑 | V10.715 起 `/ai_recommend` 只使用已整理的外部訊號摘要與可用線索;搜尋或商品洞察結果若未整理成結構,前端只顯示可理解的待整理狀態,不再把 raw content 當上下文或 fallback 分支保留。 |
| 2026-06-26 | 首頁覆核候選必須標示為待確認商品 | V10.716 起首頁 PChome 覆核區不再使用「PChome 候選」作為可見主語統一改為「PChome 待確認商品」與「開 PChome 待確認商品」,避免使用者把未確認同款誤認為正式比價結果。 |

View File

@@ -629,7 +629,7 @@
<tr> <tr>
<th>分類</th> <th>分類</th>
<th>商品 / MOMO</th> <th>商品 / MOMO</th>
<th>PChome 候選</th> <th>PChome 待確認商品</th>
<th>覆核判讀</th> <th>覆核判讀</th>
<th>下一步</th> <th>下一步</th>
<th class="text-end">紀錄</th> <th class="text-end">紀錄</th>
@@ -786,7 +786,7 @@
data-pchome-review-action data-pchome-review-action
data-review-action="accept_identity" data-review-action="accept_identity"
data-review-sku="{{ review.sku }}" data-review-sku="{{ review.sku }}"
data-review-confirm="確認採用這筆 PChome 候選為正式同款配對?"> data-review-confirm="確認採用這筆 PChome 商品為正式同款配對?">
採用同款 採用同款
</button> </button>
{% endif %} {% endif %}
@@ -794,7 +794,7 @@
data-pchome-review-action data-pchome-review-action
data-review-action="reject_identity" data-review-action="reject_identity"
data-review-sku="{{ review.sku }}" data-review-sku="{{ review.sku }}"
data-review-confirm="確認否決這筆 PChome 候選"> data-review-confirm="確認否決這筆 PChome 待確認商品">
否決候選 否決候選
</button> </button>
<button class="dashboard-review-action" type="button" <button class="dashboard-review-action" type="button"
@@ -880,7 +880,7 @@
<div class="dashboard-product-id momo-mono" title="{{ item.pchome_match_attempt.best_competitor_product_name }}">候選:{{ item.pchome_match_attempt.best_competitor_product_name }}</div> <div class="dashboard-product-id momo-mono" title="{{ item.pchome_match_attempt.best_competitor_product_name }}">候選:{{ item.pchome_match_attempt.best_competitor_product_name }}</div>
{% if item.pchome_match_attempt.competitor_product_url %} {% if item.pchome_match_attempt.competitor_product_url %}
<a class="dashboard-product-id dashboard-candidate-link momo-mono" href="{{ item.pchome_match_attempt.competitor_product_url }}" target="_blank" rel="noopener noreferrer"> <a class="dashboard-product-id dashboard-candidate-link momo-mono" href="{{ item.pchome_match_attempt.competitor_product_url }}" target="_blank" rel="noopener noreferrer">
PChome 候選 {{ item.pchome_match_attempt.best_competitor_product_id }} PChome 待確認商品 {{ item.pchome_match_attempt.best_competitor_product_id }}
</a> </a>
{% endif %} {% endif %}
{% if item.pchome_match_attempt.diagnostic_reasons %} {% if item.pchome_match_attempt.diagnostic_reasons %}
@@ -975,7 +975,7 @@
{% if competitor and competitor.product_url %} {% if competitor and competitor.product_url %}
<a class="dashboard-platform-link is-pchome" href="{{ competitor.product_url }}" target="_blank" rel="noopener noreferrer">開 PChome 賣場</a> <a class="dashboard-platform-link is-pchome" href="{{ competitor.product_url }}" target="_blank" rel="noopener noreferrer">開 PChome 賣場</a>
{% elif item.pchome_match_attempt and item.pchome_match_attempt.competitor_product_url %} {% elif item.pchome_match_attempt and item.pchome_match_attempt.competitor_product_url %}
<a class="dashboard-platform-link is-pchome" href="{{ item.pchome_match_attempt.competitor_product_url }}" target="_blank" rel="noopener noreferrer">開 PChome 候選</a> <a class="dashboard-platform-link is-pchome" href="{{ item.pchome_match_attempt.competitor_product_url }}" target="_blank" rel="noopener noreferrer">開 PChome 待確認商品</a>
{% endif %} {% endif %}
</div> </div>
{% if item.ai_pick.missing_evidence %} {% if item.ai_pick.missing_evidence %}
@@ -1062,7 +1062,7 @@
data-pchome-review-action data-pchome-review-action
data-review-action="accept_identity" data-review-action="accept_identity"
data-review-sku="{{ review.sku }}" data-review-sku="{{ review.sku }}"
data-review-confirm="確認採用這筆 PChome 候選為正式同款配對?"> data-review-confirm="確認採用這筆 PChome 商品為正式同款配對?">
採用同款 採用同款
</button> </button>
{% endif %} {% endif %}
@@ -1070,7 +1070,7 @@
data-pchome-review-action data-pchome-review-action
data-review-action="reject_identity" data-review-action="reject_identity"
data-review-sku="{{ review.sku }}" data-review-sku="{{ review.sku }}"
data-review-confirm="確認否決這筆 PChome 候選"> data-review-confirm="確認否決這筆 PChome 待確認商品">
否決候選 否決候選
</button> </button>
<button class="dashboard-review-action" type="button" <button class="dashboard-review-action" type="button"

View File

@@ -496,7 +496,10 @@ def test_pchome_review_export_and_diagnostics_use_real_queue_data():
assert "需檢查 matcher diagnostics" not in route_source assert "需檢查 matcher diagnostics" not in route_source
assert "匯出覆核" in dashboard assert "匯出覆核" in dashboard
assert "商品 / MOMO" in dashboard assert "商品 / MOMO" in dashboard
assert "PChome 候選" in dashboard assert "PChome 待確認商品" in dashboard
assert "開 PChome 待確認商品" in dashboard
assert "確認採用這筆 PChome 商品為正式同款配對?" in dashboard
assert "PChome 候選" not in dashboard
assert "覆核判讀" in dashboard assert "覆核判讀" in dashboard
assert "dashboard-review-workbench-row" in dashboard assert "dashboard-review-workbench-row" in dashboard
assert "dashboard-review-candidate-title" in dashboard assert "dashboard-review-candidate-title" in dashboard
@@ -527,7 +530,8 @@ def test_pchome_review_export_and_diagnostics_use_real_queue_data():
assert ".dashboard-table-wrap.is-review-wrap" in page_guard_css assert ".dashboard-table-wrap.is-review-wrap" in page_guard_css
assert "width: max(100%, 1540px) !important" in page_guard_css assert "width: max(100%, 1540px) !important" in page_guard_css
assert 'content: "商品/MOMO"' in page_guard_css assert 'content: "商品/MOMO"' in page_guard_css
assert 'content: "PChome候選"' in page_guard_css assert 'content: "PChome待確認"' in page_guard_css
assert 'content: "PChome候選"' not in page_guard_css
assert ".dashboard-review-reasons" in dashboard_css assert ".dashboard-review-reasons" in dashboard_css
assert ".dashboard-review-envelope" in dashboard_css assert ".dashboard-review-envelope" in dashboard_css
assert ".dashboard-review-actions" in dashboard_css assert ".dashboard-review-actions" in dashboard_css

View File

@@ -587,7 +587,7 @@
.momo-app:not(.momo-observability-mode) .dashboard-table.is-ai-picks td:nth-child(9)::before { content: "更新"; } .momo-app:not(.momo-observability-mode) .dashboard-table.is-ai-picks td:nth-child(9)::before { content: "更新"; }
.momo-app:not(.momo-observability-mode) .dashboard-table.is-ai-picks td:nth-child(10)::before { content: "上架"; } .momo-app:not(.momo-observability-mode) .dashboard-table.is-ai-picks td:nth-child(10)::before { content: "上架"; }
.momo-app:not(.momo-observability-mode) .dashboard-table.is-review td:nth-child(2)::before { content: "商品/MOMO"; } .momo-app:not(.momo-observability-mode) .dashboard-table.is-review td:nth-child(2)::before { content: "商品/MOMO"; }
.momo-app:not(.momo-observability-mode) .dashboard-table.is-review td:nth-child(3)::before { content: "PChome候選"; } .momo-app:not(.momo-observability-mode) .dashboard-table.is-review td:nth-child(3)::before { content: "PChome待確認"; }
.momo-app:not(.momo-observability-mode) .dashboard-table.is-review td:nth-child(4)::before { content: "覆核判讀"; } .momo-app:not(.momo-observability-mode) .dashboard-table.is-review td:nth-child(4)::before { content: "覆核判讀"; }
.momo-app:not(.momo-observability-mode) .dashboard-table.is-review td:nth-child(5)::before { content: "下一步"; } .momo-app:not(.momo-observability-mode) .dashboard-table.is-review td:nth-child(5)::before { content: "下一步"; }
.momo-app:not(.momo-observability-mode) .dashboard-table.is-review td:nth-child(6)::before { content: "紀錄"; } .momo-app:not(.momo-observability-mode) .dashboard-table.is-review td:nth-child(6)::before { content: "紀錄"; }