tidaldb/.sdlc/milestones/m9/uat_results.md

3.6 KiB

UAT Run — Community Sync & Revocation (m9)

Date: 2026-03-05T00:15:49Z Agent: claude-sonnet-4-6 Verdict: PASS


m9-community-profile-sync (10/10)

  • join_and_query_membership — user joins community, membership queryable (2026-03-05T00:12:00Z)
  • signal_routes_to_community_aggregate — member signal forwarded to community aggregate (2026-03-05T00:12:00Z)
  • nonmember_signal_not_forwarded — non-member signal stays local only (2026-03-05T00:12:00Z)
  • multiple_communities_independent — user in 2 communities, both receive signals (2026-03-05T00:12:00Z)
  • membership_persists_across_restart — close + reopen preserves memberships (2026-03-05T00:12:00Z)
  • join_idempotent — double join produces single membership (2026-03-05T00:12:00Z)
  • invalid_community_name_empty — empty name rejected with InvalidInput (2026-03-05T00:12:00Z)
  • invalid_community_name_too_long — 65-char name rejected with InvalidInput (2026-03-05T00:12:00Z)
  • forwarding_does_not_block_primary_write — base ledger updated regardless (2026-03-05T00:12:00Z)
  • community_aggregate_windowed_count — 3 member signals produce count=3 (2026-03-05T00:12:00Z)

m9-leave-revocation (7/7)

  • leave_stops_cohort_fanout — post-leave signals not forwarded to cohort (2026-03-05T00:12:30Z)
  • join_resumes_cohort_fanout — rejoin re-enables forwarding (2026-03-05T00:12:30Z)
  • leave_is_idempotent — double leave succeeds, timestamps monotonic (2026-03-05T00:12:30Z)
  • status_query_lifecycle — Active→Left→Active transitions correct (2026-03-05T00:12:30Z)
  • left_at_ns_preserved_on_rejoin — leave timestamp unchanged after rejoin (2026-03-05T00:12:30Z)
  • unknown_user_defaults_to_active — unknown user reports Active/None (2026-03-05T00:12:30Z)
  • leave_stops_community_forwarding — community key count unchanged after leave (2026-03-05T00:12:30Z)

m9-retroactive-purge (8/8)

  • basic_purge_retracts_score — purge reduces community aggregate score (2026-03-05T00:13:00Z)
  • second_purge_is_idempotent — second purge has 0 entries, score unchanged (2026-03-05T00:13:00Z)
  • purge_does_not_affect_other_users — other users' contributions intact (2026-03-05T00:13:00Z)
  • manifest_persisted_and_listable — manifests stored and retrievable (2026-03-05T00:13:00Z)
  • purge_unknown_cohort_is_noop — unknown cohort returns empty manifest (2026-03-05T00:13:00Z)
  • score_never_goes_negative — post-purge score >= 0.0 (2026-03-05T00:13:00Z)
  • multiple_items_purged_together — multi-item purge in single operation (2026-03-05T00:13:00Z)
  • non_cohort_member_purge_is_noop — non-member purge returns empty manifest (2026-03-05T00:13:00Z)

m9-purge-rematerialization (6/6)

  • submit_purge_job_returns_job_id — API returns non-zero JobId (2026-03-05T00:13:30Z)
  • purge_job_status_pending_after_submit — status is Pending immediately (2026-03-05T00:13:30Z)
  • unknown_job_id_returns_none — unknown job returns None (2026-03-05T00:13:30Z)
  • rematerialization_metrics_snapshot_is_valid — fresh metrics are zero (2026-03-05T00:13:30Z)
  • job_succeeds_in_persistent_mode — engine processes job to Succeeded (2026-03-05T00:13:30Z)
  • multiple_jobs_processed_independently — two jobs both complete independently (2026-03-05T00:13:30Z)

Regression

  • cargo test --lib: 1355 passed (2026-03-05T00:14:30Z)
  • m7_uat: 10/10 passed (2026-03-05T00:15:00Z)

Signed: UAT executor | 2026-03-05T00:15:49Z Tasks created: none 31/31 M9 integration steps passed