2.5 KiB
2.5 KiB
Tasks: Signal Revocation Controls
T1 — Add Tag::Revocation and UUID dependency
Status: DONE
- Added
uuid = { version = "1", features = ["v4", "serde"] }to Cargo.toml (uuid available as transitive dep; explicit declaration pending) - Added
Tag::Revocation = 0x0Ftostorage/keys.rs - Updated
from_byte, test arrays (tag_byte_never_zero, tag_roundtrip_all_variants, all_tags_have_unique_bytes)
T2 — entities/revocation.rs — core types and RevocationIndex
Status: DONE
- Created
tidal/src/entities/revocation.rswithRevocationId,RevocationScope,SignalRevocation,RevocationIndex - Added
pub mod revocation;and re-exports toentities/mod.rs - 20 unit + proptest tests passing
T3 — Expose last_update_ns on SignalLedger
Status: DONE
- Added
entry_last_update_ns(entity_id, type_id) -> u64tosignals/ledger/core.rs - Delegates to
HotSignalState::last_update_ns()(already existed)
T4 — db/revocation.rs — persistence and public API
Status: DONE
- Added
revocation_index: Arc<RevocationIndex>toTidalDbstruct - Created
db/revocation.rswithrevoke_signal,cancel_revocation,list_revocations,revocation_index(),rebuild_revocations() - Added
mod revocation;todb/mod.rs - Exported
RevocationId,RevocationScope,SignalRevocationfromlib.rs
T5 — Startup restore of revocations
Status: DONE
- Added call to
rebuild_revocationsin the open path indb/mod.rs - Wired
rebuild_revocationsfromdb/revocation.rsintodb/state_rebuild.rspattern
T6 — Read-path suppression in ProfileExecutor
Status: DONE
- Passed
Arc<RevocationIndex>intoProfileExecutorbuilder - Applied
is_suppressedcheck during scoring loop usingentry_last_update_ns - Added
is_signal_blockedcombining community suppression + user revocation inranking/executor/scoring.rs
T7 — Integration tests (tidal/tests/m10_revocation.rs)
Status: DONE
10 tests:
- basic_signal_type_revocation (R1)
- time_range_revocation (R2)
- cancel_revocation_restores_ranking (R3)
- non_revoked_signal_unaffected (R4)
- list_includes_active_and_cancelled (R5)
- user_isolation (R6)
- overlapping_revocations (R7)
- revocation_survives_restart (R8)
- cancellation_survives_restart (R9)
- anonymous_query_bypasses_revocations (R10)
T8 — Final cleanup: fmt, clippy, all tests
Status: DONE
- cargo fmt, cargo clippy -D warnings, all lib + integration tests pass
- 1299 lib tests + 10 m10_revocation integration tests passing