feat(pchome): close freshness and multi-market decision gaps
Some checks failed
CD Pipeline / deploy (push) Has been cancelled

This commit is contained in:
ogt
2026-07-10 21:22:42 +08:00
parent 744cd946f3
commit b8cc27e4c4
29 changed files with 1373 additions and 123 deletions

View File

@@ -184,12 +184,11 @@ def test_competitor_review_queue_is_canonical_unit_price_handoff():
assert "\"action_label\"" in source
assert "build_unit_price_comparison" in source
assert "需單位價覆核" in daily_template
assert "人工採用" in daily_template
assert "人工否決" in daily_template
assert "人工單位價" in daily_template
assert "AI 採用" in daily_template
assert "AI 排除" in daily_template
assert "AI 單位價" in daily_template
assert "competitor_intel.review_queue" in daily_template
assert "coverage.fresh_matches" in growth_template
assert "coverage.fresh_match_rate" in growth_template
assert "coverage.match_rate" in growth_template
assert "coverage.decision_ready_rate" in growth_template
assert "coverage.decision_support_rate" in growth_template
assert "coverage.catalog_comparable_count" in growth_template
@@ -199,12 +198,12 @@ def test_competitor_review_queue_is_canonical_unit_price_handoff():
assert "未形成有效身份配對" in growth_template
assert "coverage.unit_comparable_count" in growth_template
assert "coverage.rescore_accepted_count" in growth_template
assert "重算待人工覆核" in growth_template
assert "重算待 AI 決策" in growth_template
assert "coverage.manual_accept_count" in growth_template
assert "coverage.manual_reject_count" in growth_template
assert "coverage.manual_unit_price_count" in growth_template
assert "comp_coverage.rescore_accepted_count" in daily_template
assert "重算待人工覆核" in daily_template
assert "重算待 AI 決策" in daily_template
assert "comp_coverage.decision_support_rate" in daily_template
assert "comp_coverage.catalog_comparable_count" in daily_template
assert "精準可告警覆蓋" in daily_template
@@ -364,7 +363,8 @@ def test_competitor_review_reasons_prefer_json_payload_labels():
assert envelope["identity_evidence"]["brand"]["shared"] == ["mac"]
assert envelope["offer_evidence"]["gap_pct"] == 12.5
assert envelope["difference_highlights"][0]["dimension"] == "妝效/質地不同"
assert envelope["recommended_action"]["requires_hitl"] is True
assert envelope["recommended_action"]["requires_hitl"] is False
assert envelope["recommended_action"]["requires_ai_exception"] is True
assert envelope["recommended_action"]["action"] == "verify_or_reject_identity"
assert any(evidence["metric"] == "reasons" for evidence in envelope["evidence"])
assert any(evidence["metric"] == "identity_evidence" for evidence in envelope["evidence"])
@@ -502,12 +502,13 @@ def test_review_decision_brief_is_shared_by_openclaw_and_ppt():
brief = summarize_review_decision_envelopes([item], limit=5)
assert brief["hitl_count"] == 1
assert brief["hitl_count"] == 0
assert brief["ai_exception_count"] == 1
assert brief["auto_execute_blocked_count"] == 1
assert brief["severity_counts"]
assert brief["data_quality_counts"] == {"complete": 1}
assert "人工確認身份後採用同款" in brief["text"]
assert "HITL" in brief["text"]
assert "AI 確認身份後採用同款" in brief["text"]
assert "AI例外" in brief["text"]
assert "DDAO4C-A79050612" in brief["text"]
repo_source = (ROOT / "services" / "competitor_intel_repository.py").read_text(encoding="utf-8")
@@ -518,11 +519,11 @@ def test_review_decision_brief_is_shared_by_openclaw_and_ppt():
assert "\"review_decision_brief\": summarize_review_decision_envelopes" in repo_source
assert "summarize_review_decision_envelopes" in openclaw_source
assert "review_decision_text" in openclaw_source
assert "PChome 覆核決策信封(HITL不可自動寫正式價差)" in openclaw_source
assert "PChome AI 決策信封(no-write receipt 前不寫正式價差)" in openclaw_source
assert "SUM(CASE WHEN attempt_status IN ('unit_comparable'" not in openclaw_source
assert "review_decision_brief" in bot_source
assert "覆核決策信封(HITL不可自動寫正式價差)" in bot_source
assert "覆核決策信封HITL" in ppt_source
assert "AI 決策信封(no-write receipt 前不寫正式價差)" in bot_source
assert "AI 決策信封" in ppt_source
def test_competitor_ppt_prompt_uses_neutral_ewooc_viewpoint():