tidaldb/.sdlc/milestones/m10/uat_results.md

3.2 KiB

M10 — Governance & Agent Rights: UAT Results

Run ID: 20260304-060225-kgy Date: 2026-03-04 Verdict: PASS

Checklist

Feature 1: Community Policy Engine

  • CP-1: SchemaBuilder::community_policy() accepts CommunityPolicy and validates at build() time
  • CP-2: TidalDb::signal_with_community_policy() enforces write rules, returns PolicyViolation on rejection
  • CP-3: Retrieve::builder().community() threads CommunityContext, suppresses denied-read signals
  • CP-4: Schema validation: unknown signal in policy → rejected
  • CP-5: Schema validation: allow/deny conflict → rejected
  • CP-6: Schema validation: duplicate policy name → rejected
  • CP-7: Admin role with empty allow/deny → permits all writes
  • CP-8: Write with unknown role → TidalError::NotFound
  • CP-9: Retrieve without community context → all signals included (no regression)
  • CP-10: All 10 integration tests pass (m10_community_policy)

Feature 2: Agent Capability Boundaries

  • AB-1: Session with allowed_read_signals: ["view"] reads view OK; likeReadNotAllowed
  • AB-2: Session with denied_read_signals: ["hide"]ReadDenied
  • AB-3: Session with allowed_user_attributes: ["locale"] reads locale OK; age_rangeAttributeReadNotAllowed
  • AB-4: Empty allowed_profile_overrides → unrestricted (backward compatible)
  • AB-5: Session with allowed_profile_overrides: ["search", "trending"] → can override to those, not for_you
  • AB-6: All violations recorded in session audit log with correct AuditKind
  • AB-7: Empty new fields → identical to pre-M10 AgentPolicy (no regression)
  • AB-8: Schema rejects policy with non-existent signal in allowed_read_signals
  • AB-9: Schema rejects policy with same signal in both allow and deny lists
  • AB-10: signals_rejected and overrides_rejected counters increment correctly
  • AB-11: read_decay_score (without session) unaffected
  • AB-12: All 18 PolicyEvaluator unit tests pass

Feature 3: Signal Revocation Controls

  • SR-1: SignalType revocation suppresses sort score
  • SR-2: TimeRange revocation suppresses all signals in range
  • SR-3: Cancel revocation restores scoring immediately
  • SR-4: Unrevoked signals unaffected
  • SR-5: List revocations includes active and cancelled
  • SR-6: Revocation scoped to requesting user only
  • SR-7: Multiple overlapping revocations → union semantics
  • SR-8: Revocation persists across DB reopen (durable)
  • SR-9: Cancellation persists across DB reopen
  • SR-10: Anonymous query (no for_user) → never suppressed

Regression Suites

  • cargo test --lib — 1317 passed
  • m4_uat — 12 passed
  • m7_uat — 10 passed
  • m8_uat — 8 passed
  • m9_community_sync — 10 passed
  • m9_leave_revocation — 7 passed
  • session_durability — 9 passed

Totals

Metric Value
Tests total 1393
Tests passed 1393
Tests failed 0
Tasks created 0

Signed off: UAT PASS — all M10 acceptance criteria verified.