Context. surface admin · domain safety · route /rights · auth signed-in (admin) + scope:admin:workspace:rights · source apps/oshun/admin/src/app/rights/page.tsx
Last walked. —
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 → rightsperOSHUN_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, oradmin: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
detailValueis 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
ProvenanceTrustCardprimitive 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
ProvenanceTrustCardfor 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 samedetail.result.value:extractRightsProvenanceSnapshot→provenanceInspections,voiceConsentRecords,avatarRightsClearances,rightsReportJobsextractWatermarkVerificationSnapshot→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.mdif present (operator provenance surfaces)
Open questions / known gaps#
- Confirm whether
WatermarkVerificationPaneluses theProvenanceTrustCardprimitive (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
extractRightsProvenanceSnapshotandextractWatermarkVerificationSnapshotshare underlying fixtures or are independently sourced from the BFF payload