tidaldb/.sdlc/features/p1-briefing-ux-reason-labels/qa-plan.md

2.0 KiB

QA Plan: Briefing UX & Reason Labels

Scope

Verify that reason labels are correctly populated on query results, that the reason taxonomy is complete and type-safe, that signal snapshots are populated, and that the feature adds no measurable performance regression.

Test Strategy

Unit Tests

ID Area Test Pass Criteria
U1 ReasonCode enum Serde round-trip for all 19 variants serialize -> deserialize produces identical enum value
U2 ReasonLabel Construction with context and weight Fields accessible, Debug and Clone work
U3 ScoredCandidate Reasons field defaults to empty vec Compiles and works
U4 Signal snapshot Profile with boosts populates snapshot signal_snapshot.len() > 0
U5 Signal snapshot Profile without boosts leaves snapshot empty signal_snapshot.is_empty()
U6 Dominance threshold Reasons below 10% weight are filtered Only reasons with weight >= 0.10 survive
U7 Max reasons At most 3 reasons per result result.reasons.len() <= 3
U8 Reason ordering Reasons sorted by weight descending reasons[0].weight >= reasons[1].weight
U9 Sort-mode mapping Each Sort variant produces correct ReasonCode Verified per sort mode

Integration Tests

ID Profile Expected Reasons
I1 for_you PreferenceMatch, FollowedCreator, or SocialProof
I2 trending TrendingGlobal
I3 following FollowedCreator
I4 search (text) TextRelevance
I5 search (vector) SemanticMatch
I6 hidden_gems HiddenGem
I7 rising Rising
I8 controversial Controversial

Regression Protection

  • All existing unit tests pass
  • All existing integration tests pass
  • Clippy clean, format clean

Pass/Fail Criteria

  • Pass: All unit tests, integration tests, edge cases, and regression checks pass. Performance < 5% regression.
  • Fail: Any integration test fails, any regression check fails, or performance regression > 5%.