1.8 KiB
1.8 KiB
QA Results: Signal Revocation Controls
Test Execution Summary
| Suite | Tests | Result |
|---|---|---|
cargo test --lib |
1355 | PASS |
tests/m10_revocation.rs |
10 | PASS |
tests/m10_community_policy.rs |
10 | PASS |
tests/m9_leave_revocation.rs |
7 | PASS |
Total: 1355 lib + 27 integration tests, all passing. Zero failures.
Static Analysis
cargo clippy -- -D warnings: clean (fixed twoassigning_clonesandconst_fnwarnings inschema/validation/builders/mod.rs)cargo fmt --check: clean
QA Plan Coverage
| Scenario | Test | Result |
|---|---|---|
| QA-1: SignalType revocation suppresses sort score | R1 | PASS |
| QA-2: TimeRange revocation suppresses in-window signals | R2 | PASS |
| QA-3: Cancel revocation restores ranking | R3 | PASS |
| QA-4: Non-revoked signal types unaffected | R4 | PASS |
| QA-5: List includes active + cancelled | R5 | PASS |
| QA-6: User isolation — revocation scoped to one user | R6 | PASS |
| QA-7: Multiple overlapping revocations (union) | R7 | PASS |
| QA-8: Durability across DB reopen | R8 | PASS |
| QA-9: Cancellation durability | R9 | PASS |
| QA-10: Anonymous query bypass | R10 | PASS |
Regression Check
No regressions in M9 or M10 community policy suites. The revocation wiring in ProfileExecutor and RetrieveExecutor is opt-in (both revocation_index and for_user_revocation must be set) — existing code paths that don't wire revocations are unaffected.
Performance
- Fast path (no user revocations): single DashMap miss in
RevocationIndex::is_suppressed, effectively O(1). - Slow path (R active revocations): O(R) linear scan per signal per entity. At R=5 and typical candidate set sizes, this is within the latency budget with no measurable impact on existing benchmarks.
Verdict
PASSED. Feature is complete, correct, and regression-free.