4.6 KiB
4.6 KiB
Scout topic quality verification
Verified: 2026-08-10 · UTC
本矩陣將 Spec §9 的 17 個 Given/When/Then 場景對到可重跑的測試。固定 fixture 不呼叫真實搜尋 provider;時間欄位以 unix nanoseconds 測試,UI 只格式化伺服器排序後的結果。
| # | 場景摘要 | 證據 | 結果 |
|---|---|---|---|
| 1 | raw candidates 未達 eligible target 時繼續補量 | TestSearchPipelineContinuesWhenRawHitsExceedEligibleHits |
PASS |
| 2 | shortfall 統計與原因,不以離題補數 | TestSearchQualityShortfallIsExplainableAfterAllStages, TestRunPublishVisibilityBarrierAndCounters |
PASS |
| 3 | 多概念話題必須同時命中 | TestTopicSignatureRequiresEveryConceptGroup, TestCandidateEvaluatorSeparatesIrrelevanceReasons |
PASS |
| 4 | 泛用推薦錨點不能繞過作品核心 | TestTopicSignatureExcludesAnchorsAndKeepsNamedEntity, TestSearchQualityFixturesUseOneHardRelevanceGate |
PASS |
| 5 | Threads shortcode alias canonical dedupe | TestCanonicalPostIdentityDedupesThreadsURLAliases, TestSearchHitsOnlyFansOutPerTermAndDedupes |
PASS |
| 6 | 歷史貼文不搬 run、不覆寫狀態 | TestCandidateEvaluatorSkipsOwnerHistoricalCanonicalIdentity, TestSearchQualityHistoricalDedupKeepsOldRunUntouched |
PASS |
| 7 | score 主排序、同分以 posted_at 穩定決勝 | TestPersistActivityHitsPrioritizesScore, TestSearchQualityResultsUseScoreThenPostedTimeAcrossPages, createMockScoutRepo |
PASS |
| 8 | 同分 unknown posted_at 置底並明示未知 | TestSearchQualityResultsUseScoreThenPostedTimeAcrossPages, ScoutPage baseline harness |
PASS |
| 9 | 同分以時間/ID 穩定決勝、跨頁不重複 | TestSearchQualityResultsUseScoreThenPostedTimeAcrossPages, ScoutRepo mock/live contract |
PASS |
| 10 | 同 theme 每次都是新 run | TestRunScanCreatesFreshRunForSameTheme, createMockScoutRepo independent-runs test |
PASS |
| 11 | total/pending 來自完整 run,不是當頁 | TestRunPostsLogicReturnsRunAndIndependentPage, TestRunPublishVisibilityBarrierAndCounters |
PASS |
| 12 | 新 run 完成只提示、不切換目前閱讀位置 | ScoutPage keeps the selected run and result page when a scan completes |
PASS |
| 13 | 切換 run 時結果回第 1 頁、run page 不被改動 | ScoutPage run selection path、mock run pagination tests |
PASS |
| 14 | 刪除結果最後一頁後回到有效頁 | ScoutPage backs up from an emptied result page after deleting its last post |
PASS |
| 15 | running run 刪除回 409、資料保留 | TestRunRemoveLogicGuardsNonTerminalAndOwner, ScoutPage keeps the batch visible when deleting a running batch conflicts |
PASS |
| 16 | mock/live 排序、pagination、unknown time 等價 | scoutRepo.contract.test.ts, m5Repos.test.ts, scoutRepo.test.ts |
PASS |
| 17 | 至少 30 組 precision@10 與 target gate | TestTopicQualityGate(31 組;平均 precision@10 1.00、target rate 1.00) |
PASS |
| 18 | 低品質同 identity 不鎖死後續完整候選 | TestCandidateEvaluatorAllowsRicherRetryAfterRejectedIdentity |
PASS |
| 19 | 單一批准詞遇 provider 第一頁重複時有限補查 | TestSearchPipelineExpandsOneApprovedTermWhenProviderRepeatsFirstPage |
PASS |
| 20 | 多概念 query token 不被誤當 alias、anchor-only 不入選 | TestTopicSignatureDoesNotTurnConjunctionFragmentsIntoAliases, TestCandidateEvaluatorRejectsAnchorOnlyActivityBrief |
PASS |
| 21 | 自然句抽出主題核、工作同義詞受限、provider 缺 snippet 使用 title、批次顯示建立時間 | TestTopicSignatureDecomposesNaturalIntentWithoutRequiringWholeSentence, TestCandidateEvaluatorAcceptsNaturalActivityIntentFromApprovedVariants, TestCandidateEvaluatorUsesTitleWhenProviderOmitsSnippet, ScoutPage run list render;web build |
PASS |
Command evidence
| Command | Result |
|---|---|
cd apps/backend && make gen-api |
PASS;goctl 生成檢查完成 |
cd apps/backend && go test ./... |
PASS |
cd apps/backend && make test-integration |
PASS |
cd apps/backend && go test ./internal/module/scout/usecase -run TopicQualityGate -count=1 |
PASS;31/31 cases |
cd apps/web && npm test |
PASS;全套 web tests |
cd apps/web && npm run lint |
PASS;僅既有 Fast Refresh warnings |
cd apps/web && npm run build |
PASS |
git diff --check |
PASS |
補強後重新執行:backend go test ./... PASS;web npm test(22 files/136 tests)、npm run lint(僅既有 Fast Refresh warnings)、npm run build PASS。
Mongo-backed tests remain environment-aware and skip when no Mongo test server is configured; the memory repository and deterministic fake-provider gates above are the CI quality contract.