---
path: /rights
surface: admin
domain: safety
auth: signed-in (admin) + scope:admin:workspace:rights
source: apps/oshun/admin/src/app/rights/page.tsx
status: drafted
last_walked: '—'
---

# Safety · Rights, provenance, watermark

## Purpose

Inspect lineage, verify watermarks, resolve rights requests, and keep derivative
work tied to canonical consent and licensing records. `operatorPromise`:
"Operators can trace a generated artifact back to its consent, provenance
bundle, and rights posture without guesswork."

## Entry points

- Sidebar item **"Rights"** (AdminSidebar — safety group)
- Review → rights handoff (`review → rights` per
  `OSHUN_ADMIN_WORKSPACE_RELATIONSHIPS`) — "Review item references a rights,
  provenance, or watermark concern."
- Privacy → rights handoff (`privacy → rights`) — "Privacy request requires
  provenance lookup to produce an export bundle."
- Personas → rights handoff (`personas → rights`) — "Persona release references
  a rights or provenance bundle that needs verification."

## Layout regions

Inside `AdminShell`:

- `<WorkspaceEntryPoint workspaceId="rights" ...>`
- When `detail.accessible`:
  - `<RightsProvenancePanel provenanceInspections={provenanceSnapshot.provenanceInspections}>`
  - `<WatermarkVerificationPanel watermarkVerifications={watermarkSnapshot.watermarkVerifications}>`
  - `<RightsExportConsentInspectionPanel voiceConsentRecords={provenanceSnapshot.voiceConsentRecords} avatarRightsClearances={provenanceSnapshot.avatarRightsClearances} rightsReportJobs={provenanceSnapshot.rightsReportJobs}>`

Two snapshot extractors run against `detail.result.value`:
`extractRightsProvenanceSnapshot` and `extractWatermarkVerificationSnapshot`.

## States

- [ ] Anonymous → middleware redirect to
      `/unauthorized?reason=missing-session&returnTo=/rights`
- [ ] Signed-in (admin) without `admin:*`, `admin:studio`, or
      `admin:workspace:rights` → `WorkspaceEntryPoint` "Access not granted"; the
      three panels hidden
- [ ] Scope ok + BFF ok → all three panels render
- [ ] Scope ok + BFF `workspace-unavailable` → entry-point "Workspace data
      unavailable"; panels hidden
- [ ] Snapshot fields fall through to defaults when `detailValue` is null
- [ ] Per-panel empty states (no provenance inspections, no watermark
      verifications, no consent / clearance / report-job rows) handled inside
      each component

## Interactions

Top-level interactive elements live inside each child panel:

- [ ] **RightsProvenancePanel** — provenance inspection rows; lineage trace
      controls (related to the `ProvenanceTrustCard` primitive seen in the
      V1-AWEB-104 visual fixture, though that primitive is not directly used
      here)
- [ ] **WatermarkVerificationPanel** — watermark verification rows with C2PA /
      watermark / rights / consent statuses (see the fixture's
      `ProvenanceTrustCard` for the visual vocabulary)
- [ ] **RightsExportConsentInspectionPanel** — three sub-tables: voice consent
      records, avatar rights clearances, rights report jobs

The page itself exposes no buttons / inputs.

## Data & contracts

- **Reads**: `loadWorkspaceDetail('rights', session)` →
  `/v1/admin/workspaces/rights`; two snapshot extractors share the same
  `detail.result.value`:
  - `extractRightsProvenanceSnapshot` → `provenanceInspections`,
    `voiceConsentRecords`, `avatarRightsClearances`, `rightsReportJobs`
  - `extractWatermarkVerificationSnapshot` → `watermarkVerifications`
- **Writes**: per panel (provenance dispute, watermark re-verify, consent
  revocation, rights report kickoff)
- **Realtime**: _None at page level._
- **Auth/role check**: middleware + page
  (`canEnterAdminWorkspace(scopes, 'rights')` → required scopes
  `['admin:*', 'admin:studio', 'admin:workspace:rights']`)

## Cross-references

- Shell: `shell/01-app-shell.md`, `shell/04-workspace-pattern.md`
- Workspace definition: `libs/oshun/navigation/src/admin-ia.ts` (`rights` —
  `kind: 'investigation'`, `operatorRelationship: 'verify'`,
  `bffWorkspaceId: 'rights'`)
- Handoff origins (`from → rights`): `../governance/review.md`,
  `../operations/privacy.md`, `../content/personas.md`
- Library: `apps/oshun/admin/src/lib/rights-provenance-detail.ts`,
  `watermark-verification-detail.ts`
- Component sources: `RightsProvenancePanel.tsx`,
  `WatermarkVerificationPanel.tsx`, `RightsExportConsentInspectionPanel.tsx`,
  `ProvenanceTrustCard.tsx` (shared primitive)
- V1 PWA relationship: `WALKTHROUGH/customer/.../studio/isis-provenance.md` if
  present (operator provenance surfaces)

## Open questions / known gaps

- [ ] Confirm whether `WatermarkVerificationPanel` uses the
      `ProvenanceTrustCard` primitive (the V1-AWEB-104 fixture mounts it
      standalone, but production usage location is unclear from this page)
- [ ] Document the relationship between `RightsExportConsentInspectionPanel`'s
      three sub-tables and privacy DSAR work in `../operations/privacy.md`
      (which also handles exports)
- [ ] Track whether `extractRightsProvenanceSnapshot` and
      `extractWatermarkVerificationSnapshot` share underlying fixtures or are
      independently sourced from the BFF payload
