diff --git a/docs/AI_INTELLIGENCE_MODULE_SOT.md b/docs/AI_INTELLIGENCE_MODULE_SOT.md index dcbd742..d874947 100644 --- a/docs/AI_INTELLIGENCE_MODULE_SOT.md +++ b/docs/AI_INTELLIGENCE_MODULE_SOT.md @@ -89,6 +89,7 @@ - 2026-07-02 起 PChome controlled-apply 必須提供 compact latest readback endpoint;`/api/ai/pchome-growth/mapping-backlog/direct-mapping-retry-candidate-exception-controlled-apply-compact-readback-package` 會收斂 apply、receipt replay、drift verifier、drift recovery 四段 receipt,輸出 product status、next machine action、selector readback、drift count、recovery action count 與 artifact hash 狀態。此 endpoint 是後續產品 UI 的主要資料來源,不執行 SQL、不寫 DB。 - 2026-07-02 起 PChome controlled-apply artifacts 必須提供 read-only retention policy;`/api/ai/pchome-growth/mapping-backlog/direct-mapping-retry-candidate-exception-controlled-apply-artifact-retention-package` 會掃描 verifier inputs、identity readback、controlled apply preflight、executor、replay、drift verifier、drift recovery、compact readback 八類 artifacts,依 `keep_latest_per_family` 保留最新 evidence 並保護 active compact readback chain,只輸出 prune candidates 與 retention receipt,不直接刪檔、不寫 DB、不執行 destructive prune。 - 2026-07-02 起 PChome dashboard 第一視窗必須呈現 AI automation product truth:`_load_pchome_growth_command_center` 需 read-only 聚合 receipt replay、drift verifier、drift recovery、compact readback 與 artifact retention policy,產品面直接顯示 selector readback、drift count、retention 保留數與 automation lane 狀態;不得退回只有 raw API / artifact / log 才看得到 AI 自動化結果的模式。 +- 2026-07-02 起 PChome dashboard 第一視窗可見文案必須使用繁中營運語言;`retention`、`Compact`、`Artifact`、`DB writes`、`prune` 等工程詞只能留在 API / artifact / 測試證據層,不得出現在第一視窗。產品面用「異動」、「最新回讀」、「證據留存」、「資料寫入」、「清理建議」呈現同一批 AI 自動化 truth。 - V10.644 起 `/ai_intelligence` 的商品明細列不得只用句子描述比價;每列必須顯示 PChome 價格、MOMO 參考價、差距、可信度四格價格證據,並保留下一步按鈕。單位價候選需顯示單位價與單位,候選待確認或缺資料則以「待補 / 候選待確認」呈現,不得捏造價格。 - V10.645 起 `/ai_intelligence` 的商品明細分流切換後,必須顯示「這類商品怎麼處理」的行動摘要,包含件數、近 7 天業績、平均可信度、最大價差、代表商品與主按鈕;使用者不得只能看到商品列表而不知道下一步。 - V10.646 起 `/ai_intelligence` 的商品明細必須提供搜尋與排序;搜尋至少涵蓋商品、分類、商品編號與 MOMO 候選資訊,排序至少支援優先級、近 7 天業績、價差、下滑幅度與可信度。搜尋/排序後的行動摘要與明細列表必須使用同一批結果。 diff --git a/docs/guides/pchome_ai_automation_priority_backlog.md b/docs/guides/pchome_ai_automation_priority_backlog.md index b25e5bc..4978fc3 100644 --- a/docs/guides/pchome_ai_automation_priority_backlog.md +++ b/docs/guides/pchome_ai_automation_priority_backlog.md @@ -111,18 +111,21 @@ - Controlled apply、receipt replay、drift verifier 已進 readiness。 - 產品層 automation result 已輸出 zero primary human gates。 - PChome dashboard 第一視窗已接入 compact readback 與 artifact retention policy。 -- 第一視窗 automation pipeline 已從「等待 verifier」改成顯示受控落地、Compact 回讀、Artifact retention 的 read-only production 狀態。 +- 第一視窗 automation pipeline 已從「等待 verifier」改成顯示受控落地、最新回讀、證據留存的 read-only production 狀態。 +- Dashboard AI automation wording guard 已完成: + - 第一視窗可見文案改為繁中營運語言:異動、最新回讀、證據留存、資料寫入、清理建議 + - 不再把 `retention`、`Compact`、`Artifact`、`DB writes`、`prune` 壓在產品第一視窗 + - `tests/test_pchome_dashboard_ai_wording_guard.py` 已鎖住第一視窗不可退回 raw engineering terms -進行中 / 下一步,必須照順序: +已完成 / 下一步,必須照順序: -1. 用繁體中文營運語言強化 lane label、狀態與下一個機器動作。 -2. 正常產品畫面隱藏 raw endpoint、commit ID、DB table name、JSON payload。 -3. 增加專業的「今日 AI 自動化狀態」摘要: +1. 對照外部主流 observability / workflow dashboard pattern,將 benchmark 結論固化為 UI guardrails。 +2. 增加專業的「今日 AI 自動化狀態」摘要: - 已自動落地什麼 - 已驗證什麼 - - drift 狀態 + - 異動狀態 - 下一個機器動作 -4. 增加 UI tests 或 route readback,避免產品頁退回 raw engineering wording。 +3. 增加 route / HTML readback,避免產品頁退回 raw engineering wording。 完成標準: @@ -207,8 +210,8 @@ | P0.9 | Compact latest apply / replay / drift / recovery readback endpoint | 已完成 | compact readback route + focused tests | 接入 product dashboard first viewport | | P0.10 | Controlled-apply artifact retention policy | 已完成 | retention policy route + focused tests | 接入 product dashboard first viewport | | P1.1 | Dashboard AI automation first-viewport surface | 已完成 | dashboard command center reads compact + retention packages | P1.2 wording guard | -| P1.2 | UI wording guard for no raw engineering terms | 未開始 | first viewport surface exists | 下一個實作 | -| P2.1 | External benchmark encoded into requirements | 未開始 | benchmark guide exists | 更新 guardrails / tests | +| P1.2 | UI wording guard for no raw engineering terms | 已完成 | focused wording guard test | P2.1 benchmark guardrails | +| P2.1 | External benchmark encoded into requirements | 未開始 | benchmark guide exists | 下一個實作 | | P3.1 | Extend receipt / replay / drift pattern to more lanes | 未開始 | current retry lane complete | P1 後選下一條 safe lane | ## 後續回報格式 diff --git a/routes/dashboard_routes.py b/routes/dashboard_routes.py index ce2efa4..a2a25a4 100644 --- a/routes/dashboard_routes.py +++ b/routes/dashboard_routes.py @@ -115,6 +115,15 @@ def _to_float(value): return None +def _product_status_label(status): + return { + 'completed': '已完成', + 'ready': '已就緒', + 'waiting': '等待資料', + 'blocked': '需處理', + }.get(str(status or '').strip().lower(), '狀態確認中') + + def _diagnostic_match_rejection_label(diagnostic_text, score_text, *, blocked=True): diagnostic_text = diagnostic_text or '' suffix = '已排除,不進入價格比較' if blocked else '暫不採用,等待補搜尋或 AI 補證據' @@ -1397,7 +1406,7 @@ def _load_pchome_growth_command_center(session): 'ai_automation_first_viewport': { 'tone': 'neutral', 'title': 'AI 全自動閉環', - 'metric': '主流程阻斷 0 · 回讀待建立 · retention 待建立', + 'metric': '主流程阻斷 0 · 回讀待建立 · 證據留存待建立', }, 'automation_pipeline': [], 'opportunity_sales_7d': 0, @@ -1541,7 +1550,7 @@ def _load_pchome_growth_command_center(session): ) ai_first_viewport_metric = ( f"主流程阻斷 0 · 回讀 {controlled_apply_readback_pass_count}/{controlled_apply_selector_count} " - f"· drift {controlled_apply_drift_count} · retention {retained_artifact_count}/{retention_artifact_count}" + f"· 異動 {controlled_apply_drift_count} · 留存 {retained_artifact_count}/{retention_artifact_count}" ) mapping_backlog = { 'direct_mapping_count': direct_mapping_count, @@ -1587,19 +1596,19 @@ def _load_pchome_growth_command_center(session): { 'label': '受控落地', 'value': controlled_apply_selector_count, - 'detail': f'回讀 {controlled_apply_readback_pass_count}/{controlled_apply_selector_count} · drift {controlled_apply_drift_count}', + 'detail': f'回讀 {controlled_apply_readback_pass_count}/{controlled_apply_selector_count} · 異動 {controlled_apply_drift_count}', 'tone': 'success' if controlled_apply_closed else ('warning' if controlled_apply_selector_count else 'neutral'), }, { - 'label': 'Compact 回讀', + 'label': '最新回讀', 'value': compact_hash_match_count, - 'detail': f'{compact_status} · DB writes {int(compact_summary.get("writes_database_count") or 0)}', + 'detail': f'{_product_status_label(compact_status)} · 資料寫入 {int(compact_summary.get("writes_database_count") or 0)}', 'tone': 'success' if compact_hash_match_count else ('warning' if controlled_apply_selector_count else 'neutral'), }, { - 'label': 'Artifact retention', + 'label': '證據留存', 'value': retention_family_count, - 'detail': f'保留 {retained_artifact_count} · prune 候選 {retention_prune_candidate_count}', + 'detail': f'保留 {retained_artifact_count} · 清理建議 {retention_prune_candidate_count}', 'tone': 'success' if retention_ready else ('warning' if retention_artifact_count else 'neutral'), }, ] diff --git a/templates/dashboard_v2.html b/templates/dashboard_v2.html index 30e81b3..2613961 100644 --- a/templates/dashboard_v2.html +++ b/templates/dashboard_v2.html @@ -96,7 +96,7 @@ {% set ai_first_viewport = growth.ai_automation_first_viewport | default({}) %}