BEFORE: Hit@1=50%; Hit@3=50%
  Q1: expected=atlas_security_2026, retrieved=['atlas_security_2026', 'atlas_security_2025', 'atlas_billing_draft']
  Q2: expected=atlas_retention_2026, retrieved=['atlas_security_2026', 'atlas_billing_draft', 'atlas_security_2025']
  Q3: expected=atlas_billing_2026, retrieved=['atlas_billing_draft', 'atlas_security_2026', 'atlas_security_2025']
  Q4: expected=nimbus_access_2026, retrieved=['nimbus_access_2026', 'nimbus_security_2025']
AFTER: Hit@1=100%; Hit@3=100%
  Q1: expected=atlas_security_2026, retrieved=['atlas_security_2026', 'atlas_billing_2026', 'atlas_retention_2026']
  Q2: expected=atlas_retention_2026, retrieved=['atlas_retention_2026', 'atlas_billing_2026', 'atlas_security_2026']
  Q3: expected=atlas_billing_2026, retrieved=['atlas_billing_2026', 'atlas_retention_2026', 'atlas_security_2026']
  Q4: expected=nimbus_access_2026, retrieved=['nimbus_access_2026']

UNIT TESTS
test_aliases_and_case_normalized (test_pipeline.RetrievalTests.test_aliases_and_case_normalized) ... ok
test_archived_and_draft_records_excluded (test_pipeline.RetrievalTests.test_archived_and_draft_records_excluded) ... ok
test_bug_reproduced (test_pipeline.RetrievalTests.test_bug_reproduced) ... ok
test_fixed_expected_documents_first (test_pipeline.RetrievalTests.test_fixed_expected_documents_first) ... ok
test_no_product_cross_contamination (test_pipeline.RetrievalTests.test_no_product_cross_contamination) ... ok

----------------------------------------------------------------------
Ran 5 tests in 0.001s

OK
