70 lines
3.2 KiB
Markdown
70 lines
3.2 KiB
Markdown
# M10 — Governance & Agent Rights: UAT Results
|
|
|
|
**Run ID:** 20260304-060225-kgy
|
|
**Date:** 2026-03-04
|
|
**Verdict:** PASS
|
|
|
|
## Checklist
|
|
|
|
### Feature 1: Community Policy Engine
|
|
|
|
- [x] **CP-1:** `SchemaBuilder::community_policy()` accepts `CommunityPolicy` and validates at `build()` time
|
|
- [x] **CP-2:** `TidalDb::signal_with_community_policy()` enforces write rules, returns `PolicyViolation` on rejection
|
|
- [x] **CP-3:** `Retrieve::builder().community()` threads `CommunityContext`, suppresses denied-read signals
|
|
- [x] **CP-4:** Schema validation: unknown signal in policy → rejected
|
|
- [x] **CP-5:** Schema validation: allow/deny conflict → rejected
|
|
- [x] **CP-6:** Schema validation: duplicate policy name → rejected
|
|
- [x] **CP-7:** Admin role with empty allow/deny → permits all writes
|
|
- [x] **CP-8:** Write with unknown role → `TidalError::NotFound`
|
|
- [x] **CP-9:** Retrieve without community context → all signals included (no regression)
|
|
- [x] **CP-10:** All 10 integration tests pass (`m10_community_policy`)
|
|
|
|
### Feature 2: Agent Capability Boundaries
|
|
|
|
- [x] **AB-1:** Session with `allowed_read_signals: ["view"]` reads `view` OK; `like` → `ReadNotAllowed`
|
|
- [x] **AB-2:** Session with `denied_read_signals: ["hide"]` → `ReadDenied`
|
|
- [x] **AB-3:** Session with `allowed_user_attributes: ["locale"]` reads `locale` OK; `age_range` → `AttributeReadNotAllowed`
|
|
- [x] **AB-4:** Empty `allowed_profile_overrides` → unrestricted (backward compatible)
|
|
- [x] **AB-5:** Session with `allowed_profile_overrides: ["search", "trending"]` → can override to those, not `for_you`
|
|
- [x] **AB-6:** All violations recorded in session audit log with correct `AuditKind`
|
|
- [x] **AB-7:** Empty new fields → identical to pre-M10 `AgentPolicy` (no regression)
|
|
- [x] **AB-8:** Schema rejects policy with non-existent signal in `allowed_read_signals`
|
|
- [x] **AB-9:** Schema rejects policy with same signal in both allow and deny lists
|
|
- [x] **AB-10:** `signals_rejected` and `overrides_rejected` counters increment correctly
|
|
- [x] **AB-11:** `read_decay_score` (without session) unaffected
|
|
- [x] **AB-12:** All 18 PolicyEvaluator unit tests pass
|
|
|
|
### Feature 3: Signal Revocation Controls
|
|
|
|
- [x] **SR-1:** SignalType revocation suppresses sort score
|
|
- [x] **SR-2:** TimeRange revocation suppresses all signals in range
|
|
- [x] **SR-3:** Cancel revocation restores scoring immediately
|
|
- [x] **SR-4:** Unrevoked signals unaffected
|
|
- [x] **SR-5:** List revocations includes active and cancelled
|
|
- [x] **SR-6:** Revocation scoped to requesting user only
|
|
- [x] **SR-7:** Multiple overlapping revocations → union semantics
|
|
- [x] **SR-8:** Revocation persists across DB reopen (durable)
|
|
- [x] **SR-9:** Cancellation persists across DB reopen
|
|
- [x] **SR-10:** Anonymous query (no `for_user`) → never suppressed
|
|
|
|
### Regression Suites
|
|
|
|
- [x] `cargo test --lib` — 1317 passed
|
|
- [x] `m4_uat` — 12 passed
|
|
- [x] `m7_uat` — 10 passed
|
|
- [x] `m8_uat` — 8 passed
|
|
- [x] `m9_community_sync` — 10 passed
|
|
- [x] `m9_leave_revocation` — 7 passed
|
|
- [x] `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.
|