Spec: 049-review-assignment-orchestration
Created: 2026-05-13
Status: Draft
Scope: Content manager orchestration flows only. Reviewer-facing experience (per-Object feedback, reviewer dashboard) is covered by Spec B/D.
Review orchestration surfaces in two distinct locations:
Navigation entry points:
/ws/:workspaceId/work-packages/:workPackageId) — Work Packages have their own top-level sidebar item (📋) and dedicated routeRelationship to Work Package page (from WP UX research):
/ws/:workspaceId/work-packages with their own sidebar iconThe user navigates to a Work Package via the Work Packages page (/ws/:workspaceId/work-packages) — accessible from the sidebar (📋 icon). Clicking a Work Package row navigates to its detail page.
The Work Package detail page has a tab bar. The "Review Rounds" tab is added alongside existing tabs:
┌────────────────────────────────────────────────────────────────────┐
│ ← Back to list Work Package: "Q3 Safety Documentation Review" │
│ Status: ● In Progress Template: Work on Content │
│ Created by: content.manager@company.com | Due: 2026-06-15 │
├────────────────────────────────────────────────────────────────────┤
│ [Overview] [Actors] [Review Rounds] [Navigator] [Blockers] [Events]│
├────────────────────────────────────────────────────────────────────┤
│ │
│ ← Tab content renders here │
│ │
└────────────────────────────────────────────────────────────────────┘
The "Review Rounds" tab is visible only when the user has ReviewRound.Manage or a read-level review capability.
Quick access from the Work Package list:
On the Work Packages list page, each WP card/row shows a badge when active review rounds exist (e.g., "2 active rounds"). Clicking this badge deep-links to the Review Rounds tab directly.
┌──────────────────────────────────────────────────────────────────────┐
│ Title │ Status │ Template │ Reviews │ Updated│
├──────────────────────────────────────────────────────────────────────┤
│ Q3 Safety Review │ ● In Progress │ Work on Con │ 2 active│ 2h ago │
│ Translate Manual │ ● In Progress │ Translation │ — │ 1d ago │
│ Migrate PLM Data │ ○ Context Asm. │ Migration │ — │ 3d ago │
└──────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Review Rounds [+ New Round] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ ● Active "Safety Content Review — DE" │ │
│ │ Scope: 12 Objects · 3 Reviewers · Due May 20 │ │
│ │ [View] [Close] │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ ○ Pending "Hydraulic Procedures Review" │ │
│ │ Scope: 8 Objects · 2 Reviewers · Starts May 18 │ │
│ │ [View] [Activate] [Cancel] │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ ✓ Closed "Initial Content Review" │ │
│ │ Closed May 10 · 5 Objects · 2/2 Reviewers completed │ │
│ │ [View] │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
States:
Card status indicators:
Actions per state:
Trigger: "+ New Round" button in Review Rounds tab
Component: Radix UI Dialog (modal), multi-step form
┌─────────────────────────────────────────────────────────────┐
│ Create Review Round [✕ Close] │
├─────────────────────────────────────────────────────────────┤
│ │
│ Step indicator: ① Scope ─ ② Assignment ─ ③ Schedule │
│ │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─── STEP 1: SCOPE ─────────────────────────────────────┐ │
│ │ │ │
│ │ Round Name * │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ e.g. "Safety Content Review — DE" │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ Status Filter * │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ Review ▾ (select) │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ │ ⓘ Objects in this status will be included in scope │ │
│ │ │ │
│ │ Language Variant (optional) │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ Source language (default) ▾ (select) │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ Navigation Recipe (optional) │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ Inherit from Work Package ▾ (select) │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ │ ⓘ Provides reviewers with a structured tree view │ │
│ │ │ │
│ │ ☐ Enable status hold │ │
│ │ Prevents in-scope Objects from leaving the filter │ │
│ │ status while the round is active. │ │
│ │ │ │
│ │ Scope Preview: 12 Objects currently match │ │
│ │ [Show matching Objects ▸] │ │
│ │ │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
├─────────────────────────────────────────────────────────────┤
│ [Cancel] [Next: Assignment →] │
└─────────────────────────────────────────────────────────────┘
Step 2: Assignment
┌─────────────────────────────────────────────────────────────┐
│ Create Review Round [✕ Close] │
├─────────────────────────────────────────────────────────────┤
│ Step indicator: ✓ Scope ─ ② Assignment ─ ③ Schedule │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─── STEP 2: ASSIGNMENT ────────────────────────────────┐ │
│ │ │ │
│ │ Assignment Mode │ │
│ │ ┌────────────────────┐ ┌──────────────────────────┐ │ │
│ │ │ ○ Full-round │ │ ○ Per-Object │ │ │
│ │ │ All reviewers │ │ Assign specific │ │ │
│ │ │ see all Objects │ │ Objects to reviewers │ │ │
│ │ └────────────────────┘ └──────────────────────────┘ │ │
│ │ │ │
│ │ ── Direct Assignments ────────────────────────────── │ │
│ │ │ │
│ │ Add Reviewers │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ 🔍 Search users or groups... │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌─ Assigned ────────────────────────────────────────┐ │ │
│ │ │ 👤 Anna Karlsson All Objects [✕] │ │ │
│ │ │ 👤 Björn Lindqvist All Objects [✕] │ │ │
│ │ └───────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ── Review Groups (optional) ──────────────────────── │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ 🔍 Search review groups... │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌─ Selected Groups ─────────────────────────────────┐ │ │
│ │ │ 👥 Safety Department criteria: reviewArea = │ │ │
│ │ │ "safety" [✕] │ │ │
│ │ │ ⓘ Will match ~8 Objects at activation │ │ │
│ │ └───────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ⚠ 2 Objects have no reviewer assigned │ │
│ │ │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
├─────────────────────────────────────────────────────────────┤
│ [← Back] [Cancel] [Next: Schedule →] │
└─────────────────────────────────────────────────────────────┘
Per-Object Assignment Mode (alternate view when "Per-Object" is selected):
┌─── Per-Object Assignment ─────────────────────────────────────┐
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Object │ Assigned Reviewer │ │
│ ├─────────────────────────────┼───────────────────────────┤ │
│ │ safety-warning.dita │ Anna Karlsson ▾ │ │
│ │ maintenance-proc.dita │ Anna Karlsson ▾ │ │
│ │ hydraulic-overview.dita │ Björn Lindqvist ▾ │ │
│ │ torque-specs.dita │ — Unassigned — ▾ │ │
│ └─────────────────────────────┴───────────────────────────┘ │
│ │
│ ⚠ 1 Object has no reviewer assigned │
│ │
└────────────────────────────────────────────────────────────────┘
Step 3: Schedule
┌─────────────────────────────────────────────────────────────┐
│ Create Review Round [✕ Close] │
├─────────────────────────────────────────────────────────────┤
│ Step indicator: ✓ Scope ─ ✓ Assignment ─ ③ Schedule │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─── STEP 3: SCHEDULE ──────────────────────────────────┐ │
│ │ │ │
│ │ Start Date (optional) │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ 📅 Not set (activate manually) │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ │ ⓘ If set, round auto-activates at this date │ │
│ │ │ │
│ │ Due Date * │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ 📅 2026-05-20 │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ Reminder │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ 2 days before deadline ▾ (select) │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ On Expiry │ │
│ │ ┌────────────────────┐ ┌───────────┐ ┌────────────┐ │ │
│ │ │ ○ Auto-close │ │ ○ Escalate│ │ ○ No action│ │ │
│ │ └────────────────────┘ └───────────┘ └────────────┘ │ │
│ │ │ │
│ │ Escalation Recipient (if Escalate selected) │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ 🔍 Search users... │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ │ │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─ Summary ──────────────────────────────────────────────┐ │
│ │ "Safety Content Review — DE" │ │
│ │ Scope: 12 Objects in "Review" status (DE) │ │
│ │ Reviewers: 3 (2 direct + Safety Dept group) │ │
│ │ Due: May 20, 2026 · Reminder: 2 days before │ │
│ │ Status hold: Enabled │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
├─────────────────────────────────────────────────────────────┤
│ [← Back] [Cancel] [Create Round (Pending)] │
└─────────────────────────────────────────────────────────────┘
Trigger: Clicking "View" on a review round card
Renders in: Replaces the Review Rounds list within the tab (inline navigation, URL updates with &round=id). Back button returns to the list.
┌─────────────────────────────────────────────────────────────────┐
│ ← Back to Rounds "Safety Content Review — DE" │
│ │
│ State: ● Active Due: May 20, 2026 (5 days remaining) │
│ Status hold: Enabled │
├─────────────────────────────────────────────────────────────────┤
│ [Scope] [Assignments] [Activity] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─── SCOPE ─────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Filter: Status = "Review" · Language = DE │ │
│ │ Recipe: "Safety Manual 2026" (navigation context) │ │
│ │ │ │
│ │ In-Scope Objects (12) │ │
│ │ ┌──────────────────────────────────────────────────────┐ │ │
│ │ │ Name │ Reviewer │ Status │ │ │
│ │ ├──────────────────────────┼─────────────────┼─────────┤ │ │
│ │ │ safety-warning.dita │ Anna K. │ — │ │ │
│ │ │ maintenance-proc.dita │ Anna K. │ — │ │ │
│ │ │ hydraulic-overview.dita │ Björn L. │ — │ │ │
│ │ │ torque-specs.dita │ Björn L. │ — │ │ │
│ │ │ ... │ │ │ │ │
│ │ └──────────────────────────┴─────────────────┴─────────┘ │ │
│ │ │ │
│ │ ⓘ Live scope — Objects leaving "Review" status are │ │
│ │ removed automatically (status hold prevents this) │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
├─────────────────────────────────────────────────────────────────┤
│ Actions: [Add Reviewers] [Close Round] [Cancel Round] │
└─────────────────────────────────────────────────────────────────┘
Assignments sub-tab:
┌─── ASSIGNMENTS ─────────────────────────────────────────────────┐
│ │
│ Direct Assignments │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ 👤 Anna Karlsson 6 Objects assigned Source: Direct│ │
│ │ 👤 Björn Lindqvist 4 Objects assigned Source: Direct│ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ Group Assignments (resolved at activation) │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ 👥 Safety Department │ │
│ │ → 👤 Erik Holm 8 Objects (criteria match) │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ Delegations │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ 👤 Anna Karlsson → delegated 2 Objects to 👤 Maja Svensson│ │
│ │ Delegated: May 14, 2026 │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ ⚠ 2 Objects have no reviewer assigned │
│ │
│ [+ Add Reviewer] │
│ │
└──────────────────────────────────────────────────────────────────┘
Activity sub-tab:
┌─── ACTIVITY ─────────────────────────────────────────────────────┐
│ │
│ ┌─ Timeline ──────────────────────────────────────────────────┐ │
│ │ May 15, 10:32 Round activated by Content Manager │ │
│ │ May 15, 10:32 Notifications sent to 3 reviewers │ │
│ │ May 14, 15:00 Anna K. delegated 2 Objects to Maja S. │ │
│ │ May 16, 09:15 Object "torque-specs.dita" left scope │ │
│ │ (status changed from Review → Approved) │ │
│ │ May 16, 09:15 Notification sent to round manager │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────────────┘
Trigger: "Activate" button on a Pending review round
Component: Radix UI AlertDialog
┌─────────────────────────────────────────────────────────────┐
│ Activate Review Round? │
├─────────────────────────────────────────────────────────────┤
│ │
│ "Safety Content Review — DE" will become Active. │
│ Assigned reviewers will be notified immediately. │
│ │
│ Scope: 12 Objects match the current filter │
│ Reviewers: 3 assigned │
│ │
│ ⚠ 2 Objects have no reviewer assigned: │
│ • torque-specs.dita │
│ • fluid-levels.dita │
│ These Objects will not be reviewed unless you add │
│ assignments after activation. │
│ │
├─────────────────────────────────────────────────────────────┤
│ [Cancel] [Activate Round] │
└─────────────────────────────────────────────────────────────┘
Error case — empty scope:
┌─────────────────────────────────────────────────────────────┐
│ Cannot Activate │
├─────────────────────────────────────────────────────────────┤
│ │
│ ✕ No Objects currently match the scope filter. │
│ The round cannot be activated with an empty scope. │
│ │
│ Filter: Status = "Review" · Language = DE │
│ Matching Objects: 0 │
│ │
│ Adjust the scope filter or wait for Objects to enter │
│ "Review" status before activating. │
│ │
├─────────────────────────────────────────────────────────────┤
│ [Dismiss] │
└─────────────────────────────────────────────────────────────┘
Trigger: "Close Round" or "Cancel Round" button
Component: Radix UI AlertDialog (destructive confirmation)
┌─────────────────────────────────────────────────────────────┐
│ Close Review Round? │
├─────────────────────────────────────────────────────────────┤
│ │
│ "Safety Content Review — DE" will be permanently closed. │
│ Assigned reviewers will be notified. │
│ │
│ Participation Summary: │
│ ✓ Anna Karlsson — completed │
│ ✓ Björn Lindqvist — completed │
│ ⚠ Maja Svensson — did not participate │
│ │
│ Status hold will be released. Objects will resume normal │
│ status transitions. │
│ │
├─────────────────────────────────────────────────────────────┤
│ [Cancel] [Close Round] (destructive)│
└─────────────────────────────────────────────────────────────┘
Trigger: "+ Add Reviewer" button on an Active round's Assignments sub-tab
Component: Radix UI Sheet (slides from right)
┌──────────────────────────────────────────┐
│ Add Reviewers [✕] │
├──────────────────────────────────────────┤
│ │
│ Search users or groups │
│ ┌────────────────────────────────────┐ │
│ │ 🔍 Search... │ │
│ └────────────────────────────────────┘ │
│ │
│ ┌─ Results ──────────────────────────┐ │
│ │ ☐ 👤 Lars Andersson │ │
│ │ ☐ 👤 Sofia Berg │ │
│ │ ☐ 👥 Electrical Systems Team │ │
│ └────────────────────────────────────┘ │
│ │
│ Assignment Scope │
│ ○ Full round (all Objects) │
│ ○ Specific Objects │
│ ┌──────────────────────────────────┐ │
│ │ ☐ safety-warning.dita │ │
│ │ ☐ maintenance-proc.dita │ │
│ │ ☐ hydraulic-overview.dita │ │
│ └──────────────────────────────────┘ │
│ │
├──────────────────────────────────────────┤
│ [Cancel] [Assign] │
└──────────────────────────────────────────┘
Constraint: Only additions are allowed on active rounds. The sheet does not offer a "remove" action.
In the Admin Portal, Review Groups appears as a new item in the Configuration sidebar group for users with ReviewGroup.Manage capability:
┌─────────────────────────────────────────────────────┐
│ ─ Configuration ─ │
│ 📄 Metadata [workspace-scoped] │
│ 🌐 Terminology [workspace-scoped] │
│ 🔗 Knowledge [workspace-scoped] │
│ 🌳 Object Types [workspace-scoped] │
│ 📦 Templates [workspace-scoped] │
│ 🔄 Lifecycle [workspace-scoped] │
│ ⚙ Workflows [workspace-scoped] │
│ 🔧 Settings [workspace-scoped] │
│ 👥 Review Groups [workspace-scoped, cap-gated] │
│ 📥 Staging Area [workspace-scoped] │
│ 📋 Work Packages [workspace-scoped] │
└─────────────────────────────────────────────────────┘
Clicking "Review Groups" navigates to /c/:customerId/ws/:workspaceId/review-groups.
Route: /c/:customerId/ws/:workspaceId/review-groups
┌─────────────────────────────────────────────────────────────────┐
│ ← Configuration Review Groups [+ New Group] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Name │ Reviewers │ Criteria │ Actions│ │
│ ├─────────────────────┼───────────┼─────────────────┼────────┤ │
│ │ Safety Department │ 3 users │ reviewArea = │ [⋯] │ │
│ │ │ │ "safety" │ │ │
│ │ Electrical Systems │ 2 users │ reviewArea = │ [⋯] │ │
│ │ │ 1 group │ "electrical" │ │ │
│ │ Legal Compliance │ 1 user │ compliance = │ [⋯] │ │
│ │ │ │ "required" │ │ │
│ └─────────────────────┴───────────┴─────────────────┴────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
States:
Context menu (⋯):
Trigger: "+ New Group" button or "Edit" from context menu
Component: Radix UI Dialog (modal)
┌─────────────────────────────────────────────────────────────┐
│ Create Review Group [✕ Close] │
├─────────────────────────────────────────────────────────────┤
│ │
│ Group Name * │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ e.g. "Safety Department" │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ ── Reviewers ──────────────────────────────────────────── │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 🔍 Search users, groups, or enter email... │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Members ────────────────────────────────────────────┐ │
│ │ 👤 Erik Holm (Entra ID) [✕] │ │
│ │ 👤 anna.external@partner.com (email) [✕] │ │
│ │ 👥 Safety-Reviewers (Entra group) [✕] │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ ── Matching Criteria ──────────────────────────────────── │
│ ⓘ Objects matching ALL criteria will be assigned to this │
│ group's reviewers. Uses AND logic. │
│ │
│ ┌─ Criterion 1 ────────────────────────────────────────┐ │
│ │ Domain: Review Area ▾ Value: Safety ▾ [✕] │ │
│ └──────────────────────────────────────────────────────┘ │
│ ┌─ Criterion 2 ────────────────────────────────────────┐ │
│ │ Domain: Product Line ▾ Value: Hydraulic ▾ [✕] │ │
│ └──────────────────────────────────────────────────────┘ │
│ [+ Add Criterion] │
│ │
├─────────────────────────────────────────────────────────────┤
│ [Cancel] [Create Group / Save] │
└─────────────────────────────────────────────────────────────┘
Criteria builder:
> Note: The reviewer dashboard is in Spec B/D scope. This section describes only the delegation interaction pattern for integration awareness.
Trigger: Reviewer clicks "Delegate" on their assignment (from their review context — Spec B/D surface)
Component: Radix UI Dialog (modal)
┌─────────────────────────────────────────────────────────────┐
│ Delegate Review Assignment [✕ Close] │
├─────────────────────────────────────────────────────────────┤
│ │
│ Delegate to │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 🔍 Search users... │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ Scope │
│ ○ Entire assignment (all my Objects) │
│ ○ Specific Objects │
│ ┌──────────────────────────────────────────────────┐ │
│ │ ☐ safety-warning.dita │ │
│ │ ☐ maintenance-proc.dita │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ ⓘ You will remain assigned. The delegated reviewer will │
│ be added alongside you. │
│ │
│ ⚠ Delegation depth: 1 of 2 (workspace limit) │
│ │
├─────────────────────────────────────────────────────────────┤
│ [Cancel] [Delegate] │
└─────────────────────────────────────────────────────────────┘
Error states:
Notifications integrate with the existing platform notification infrastructure (persistent inbox + SignalR push).
Notification format: Each notification is a clickable item in the notification inbox that deep-links to the relevant review round detail view.
Each panel/view follows the standard 5-state model:
Pattern: Follows the existing requiredCapability route guard + ProtectedRoute component pattern. In-page elements are hidden or disabled based on capability presence in InitDataContext.
All URLs are deep-linkable and shareable. The canonical URL normalizer applies standard rules (lowercase IDs, strip empty params). Notification deep-links use the full path to navigate directly to a specific review round detail view.
/ws/:workspaceId/work-packages/:workPackageId)/ws/:workspaceId/work-packages/:wpId?tab=review-rounds&round=roundId)ReviewGroup.ManageAll data fetching uses useFetch / useMutate — never raw fetch().
The following are explicitly NOT designed in this UX spec:
These surfaces will reference the review round data designed here but will have their own UX specification.
Spec: 051-review-scope-content-status
Created: 2026-05-22
Status: Draft
Depends on: 049 (Review Assignment & Orchestration)
This UX spec defines how content managers and reviewers interact with review scope resolution, content status indicators, baseline diffs, profile-filtered views, review sign-off, and contextual visibility. These capabilities live within the existing Work Package and Review Round model established by 049.
This spec builds on the 049 UX Research (review-assignment-orchestration-ux-research.md) which defines the content-manager orchestration surface. 049 owns the Work Package detail page (review round CRUD, assignment, activation, close/cancel). This spec (051) adds the reviewer-facing experience — the page where reviewers actually do their review work.
The reviewer experience lives on a new standalone page at /ws/:workspaceId/review/:reviewRoundId/. This is a purpose-built review workspace — it is not embedded within the Author View or the Work Package detail page.
How reviewers get here:
The Author View (/authoring) is unaffected. 049 already defines that Objects in active review scope show a subtle review badge/indicator in the Object List — this spec does not modify that.
Content managers configure review rounds via the existing Work Package detail → Review Rounds tab (defined by 049 UX Research, Sections 3.1–3.6). This spec extends 049's create dialog with a Profile Set step (see Section 4).
/ws/:workspaceId/
├── authoring → (existing) Author View — no changes from this spec
├── work-packages/:wpId → (existing, 049) — Review Rounds tab for content managers
└── review/
└── :reviewRoundId/ → ReviewRoundPage (reviewer workspace) ← NEW
├── (index) → Scope overview + status indicators
└── object/:objectId → Object review detail (content + diff + sign-off)
Navigation from 049 surfaces:
/ws/:workspaceId/work-packages/:wpId?tab=review-rounds&round=roundId) are the content-manager view/ws/:workspaceId/review/:roundId instead/ws/:workspaceId/review/:roundId/object/:objectIdThe 049 UX Research (Section 3.3) defines a 3-step create dialog: ① Scope → ② Assignment → ③ Schedule. This spec extends Step 1 (Scope) with a Profile Set section. All other steps remain as defined by 049.
Inserted below the existing Scope fields (status filter, language variant, recipe, status hold) in 049's Step 1:
│ │ │ │
│ │ ── Profile Set (optional) ─────────────────────────── │ │
│ │ │ │
│ │ Assign profiles to this review round: │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ 🔍 Search profiles... │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌─ Applied ─────────────────────────────────────────┐ │ │
│ │ │ [Product A ✕] [US Market ✕] │ │ │
│ │ └───────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ⓘ All reviewers in this round will see content │ │
│ │ filtered through these profiles. Conditional │ │
│ │ boundaries will be marked in the review view. │ │
│ │ │ │
│ │ ☐ No profile set (reviewers see full unfiltered │ │
│ │ content) │ │
│ │ │ │
Interaction:
ProfileDefinition list049's scope preview (Section 3.3, "Show matching Objects") already shows the resolved Object list. This spec extends that table with a Content Status column showing the review status indicators (Section 5.2) when a prior closed round exists in the workspace:
┌──────────────────────────────────────────────────────────────────────┐
│ Scope Preview [Close ✕] │
├──────────────────────────────────────────────────────────────────────┤
│ Filter: Status = "Review" · Language = DE │
│ Profile: Product A, US Market │
│ Resolved: 47 Objects │
├──────────────────────────────────────────────────────────────────────┤
│ │
│ Object Name │ Type │ Content Status │ Reviewer(s) │
│ ─────────────────────────────────────────────────────────────────── │
│ replace-oil-filter.dita │ DITA │ 🔴 NEW │ Anna K. │
│ safety-warnings.dita │ DITA │ 🟡 MODIFIED │ ⚠ Unassigned│
│ hydraulic-diagram.svg │ Gfx │ 🟢 UNCHANGED │ Safety Group│
│ torque-specs.dita │ DITA │ 🔵 DIFF CONTEXT │ Björn L. │
│ ... │
│ │
├──────────────────────────────────────────────────────────────────────┤
│ ⚠ 3 Objects have no reviewer assigned │
│ ℹ Scope is live — Objects will enter/leave as their status changes │
│ ℹ Content status based on prior sign-offs in this workspace │
└──────────────────────────────────────────────────────────────────────┘
This gives content managers visibility into review burden before activation.
Route: /ws/:workspaceId/review/:reviewRoundId
Purpose: The focused review workspace where reviewers see their scope, content status indicators, and perform sign-offs. This is the reviewer-facing complement to 049's content-manager round detail (Section 3.4).
Entry points:
┌──────────────────────────────────────────────────────────────────────┐
│ [Page header: Round name │ WP name │ Deadline badge │ Progress bar] │
│ [Recipe context: "Safety Manual 2026" (navigation tree)] │
│ [Actions: Delegate... │ View in Work Package] │
├──────────────┬───────────────────────────────────────────────────────┤
│ SCOPE NAV │ CONTENT DETAIL │
│ ────────── │ ────────────── │
│ [Filter ▾] │ ┌─────────────────────────────────────────────────┐ │
│ [View: 🌳▾] │ │ Object: replace-oil-filter.dita │ │
│ │ │ Status: 🟡 Modified since last review │ │
│ ┌────────┐ │ │ Recipe path: Safety Manual > Maintenance > Oil │ │
│ │▾ Maint │ │ │ │ │
│ │ 🔴 obj│ │ │ [Content View] [Diff View] [History] │ │
│ │ 🟡 obj│ │ │ │ │
│ │────────│ │ │ ┌────────────────────────────────────────────┐ │ │
│ │▸ Safety│ │ │ │ │ │ │
│ │────────│ │ │ │ (Rendered content / diff output) │ │ │
│ │▸ Specs │ │ │ │ │ │ │
│ │────────│ │ │ └────────────────────────────────────────────┘ │ │
│ │ 👁 Ctxt│ │ │ │ │
│ │ obj-5 │ │ │ ┌────────────────────────────────────────────┐ │ │
│ └────────┘ │ │ │ [✓ Sign Off] [Add Comment] │ │ │
│ │ │ └────────────────────────────────────────────┘ │ │
│ │ └─────────────────────────────────────────────────┘ │
│ │ │
├──────────────┴───────────────────────────────────────────────────────┤
│ [Status bar: "12 of 47 signed off │ 3 invalidated │ Due in 5 days"]│
└──────────────────────────────────────────────────────────────────────┘
Status determination logic (displayed as tooltip on hover):
No prior sign-off → 🔴 NEW
Prior sign-off exists:
└─ Content revision changed since sign-off → 🟡 MODIFIED
└─ Content unchanged:
└─ Same profile set ID → 🟢 UNCHANGED
└─ Different profile set ID → 🔵 DIFFERENT CONTEXT
The left column serves as the reviewer's navigation. Its presentation depends on whether a recipe was assigned to the review round (per 049 FR-001):
A toggle in the panel header switches between the two views when a recipe is assigned.
#### 5.3a Recipe Tree View (Primary — when recipe is assigned)
The recipe tree provides the publication structure that reviewers are evaluating content within. Objects appear as leaf nodes under their recipe-defined position. Status indicators appear inline.
┌─────────────────────────────────────────────────────────────┐
│ [🔍 Search Objects...] │
│ │
│ View: [🌳 Recipe Tree ▾ │ 📋 Flat List] │
│ Filter: [All ▾ │ New │ Modified │ Unchanged │ ...] │
│ │
│ Recipe: "Safety Manual 2026" │
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
│ │
│ ▾ 1. Introduction │
│ │ 🟢 OK product-overview.dita ✓ │
│ │ 🔵 CTX regulatory-context.dita ☐ │
│ │ │
│ ▾ 2. Maintenance Procedures │
│ │ ▾ 2.1 Oil System │
│ │ │ 🔴 NEW replace-oil-filter.dita ☐ │
│ │ │ 🟡 MOD oil-level-check.dita ☐ │
│ │ │ │
│ │ ▾ 2.2 Hydraulics │
│ │ │ 🟡 MOD hydraulic-assembly.dita ☐ │
│ │ │ 🟢 OK hydraulic-bleeding.dita ✓ │
│ │ │ │
│ │ ▸ 2.3 Electrical (4 Objects — 2 🟡, 2 🟢) │
│ │ │
│ ▾ 3. Safety Warnings │
│ │ 🟡 MOD safety-warnings.dita ⚠ │
│ │ 🔴 NEW hazard-symbols.dita ☐ │
│ │ │
│ ▸ 4. Specifications (6 Objects — 1 🔴, 5 🟢) │
│ │
│ ── CONTEXT (not in recipe, visible for reference) (3) ── │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 👁 warranty-terms.dita │ │
│ │ 👁 parts-catalog-reference.dita │ │
│ │ 👁 compliance-matrix.dita │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Recipe tree behaviors:
Progress per branch:
#### 5.3b Flat List View (Fallback — no recipe, or toggled manually)
┌─────────────────────────────────────────────────────┐
│ [🔍 Search Objects...] │
│ │
│ View: [📋 Flat List ▾] (no recipe assigned) │
│ Filter: [All ▾ │ New │ Modified │ Unchanged │ │
│ Different Context │ Needs re-review] │
│ Sort: [Status priority ▾ │ Name │ Modified date] │
│ │
│ ── MY ASSIGNMENTS (27) ── │
│ ┌───────────────────────────────────────────────┐ │
│ │ 🔴 NEW replace-oil-filter.dita ☐ │ │
│ │ 🟡 MOD safety-warnings.dita ☐ │ │
│ │ 🟡 MOD hydraulic-assembly.dita ☐ │ │
│ │ 🟢 OK torque-specifications.dita ✓ │ │
│ │ 🔵 CTX product-overview.dita ☐ │ │
│ │ ... │ │
│ └───────────────────────────────────────────────┘ │
│ │
│ ── CONTEXT (visible, not assigned) (20) ── │
│ ┌───────────────────────────────────────────────┐ │
│ │ 👁 VIEW maintenance-schedule.dita │ │
│ │ 👁 VIEW warranty-terms.dita │ │
│ │ ... │ │
│ └───────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────┘
Flat list behaviors:
┌───────────────────────────────────────────────────┐
│ ── OUT OF SCOPE (2) ── │
│ ┌─────────────────────────────────────────────┐ │
│ │ ⊘ removed-procedure.dita (left scope) │ │
│ │ ⊘ deprecated-warning.dita (left scope) │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ ── RE-ENTERED (1) ── │
│ ┌─────────────────────────────────────────────┐ │
│ │ 🔴 NEW re-entered-topic.dita (baseline │ │
│ │ captured at re-entry) │ │
│ └─────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────┘
Behaviors:
The primary view renders the Object content with profile filtering applied. When a recipe is assigned to the round, the Object's position within the recipe structure is shown as a breadcrumb — this gives reviewers context about where this content sits in the publication:
┌──────────────────────────────────────────────────────────────────────┐
│ Object: safety-warnings.dita │
│ Recipe path: Safety Manual 2026 › 3. Safety Warnings │
│ Status: 🟡 Modified since last review │
│ Last sign-off: Round "Q1 Safety Review" (2026-03-15) by Jane D. │
│ Profile: Product A, US Market │
├──────────────────────────────────────────────────────────────────────┤
│ [Content View] [Diff View] [Sign-off History] │
├──────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ <title>Safety Warnings</title> │ │
│ │ │ │
│ │ <section> │ │
│ │ ┌─────────────────────────────────────────────────────┐ │ │
│ │ │ US Market content visible │ │ │
│ │ └─────────────────────────────────────────────────────┘ │ │
│ │ </section> │ │
│ │ │ │
│ │ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ │ │
│ │ │ ⊟ Conditional content hidden (EU Market) [Reveal] │ │ │
│ │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘ │ │
│ │ │ │
│ │ <section> │ │
│ │ Shared content (no profile condition) │ │
│ │ </section> │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ ☐ Show full unfiltered content │
│ │
├──────────────────────────────────────────────────────────────────────┤
│ [✓ Sign Off] [💬 Add Comment] │
└──────────────────────────────────────────────────────────────────────┘
Profile filtering behaviors:
Shows changes between the baseline revision and current revision for Modified Objects:
┌──────────────────────────────────────────────────────────────────────┐
│ [Content View] [Diff View ●] [Sign-off History] │
├──────────────────────────────────────────────────────────────────────┤
│ │
│ Comparing: Baseline (captured 2026-04-01) → Current (rev 7) │
│ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ <title>Safety Warnings</title> │ │
│ │ │ │
│ │ ┌─── REMOVED ────────────────────────────────────────────┐ │ │
│ │ │ - Old warning text about hydraulic pressure limits │ │ │
│ │ └────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌─── ADDED ──────────────────────────────────────────────┐ │ │
│ │ │ + Updated warning text with new PSI thresholds │ │ │
│ │ │ + Additional caution note for cold-weather operation │ │ │
│ │ └────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ Unchanged content continues... │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ ── Compare against other baselines ── │
│ [Prior same-profile sign-off (2026-01-10) ▾] [Load diff] │
│ │
└──────────────────────────────────────────────────────────────────────┘
Diff behaviors:
┌──────────────────────────────────────────────────────────────────────┐
│ [Content View] [Diff View] [Sign-off History ●] │
├──────────────────────────────────────────────────────────────────────┤
│ │
│ ── SIGN-OFF HISTORY FOR THIS OBJECT ── │
│ │
│ Round │ Reviewer │ Profile Set │ Rev │ Date │
│ ─────────────────────────────────────────────────────────────────── │
│ Q2 2026 Tech Review │ You │ Product A, US │ r7 │ (now) │
│ Q1 2026 Safety Review │ Jane D. │ Product A, EU │ r5 │ Mar 15 │
│ 2025 Annual Review │ John S. │ (unfiltered) │ r3 │ Nov 02 │
│ │
│ [Compare rev 5 → rev 7] ← link to diff between specific revisions │
│ │
│ ℹ Status derived from most recent sign-off (Q1 Safety, r5): │
│ Content: r5 → r7 (changed) → 🟡 MODIFIED │
│ │
└──────────────────────────────────────────────────────────────────────┘
Behaviors:
┌──────────────────────────────────────────────────────────────────────┐
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ [✓ Sign Off] │ │
│ │ │ │
│ │ Clicking confirms you have reviewed this Object. │ │
│ │ Current revision: r7 (2026-05-20) │ │
│ │ Profile context: Product A, US Market │ │
│ └────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────┘
Sign-off button states:
When content changes while a reviewer has the round open:
┌──────────────────────────────────────────────────────────────────────┐
│ ⚠ SIGN-OFF INVALIDATED │
│ ───────────────────────── │
│ The content of "safety-warnings.dita" was modified after your │
│ sign-off (new revision r8 created by Author X on May 21). │
│ │
│ Your sign-off on revision r7 is no longer valid. │
│ Please review the changes and re-sign if appropriate. │
│ │
│ [View Changes (r7 → r8)] [Re-sign on r8] │
└──────────────────────────────────────────────────────────────────────┘
Behaviors:
When the round targets multiple language variants:
┌──────────────────────────────────────────────────────────────────────┐
│ Language Variants: │
│ │
│ [EN (source)] ← currently viewing ✓ Signed off (r7) │
│ [DE] ☐ Not signed off │
│ [FR] ⚠ Invalidated (content changed)│
│ │
│ Sign-off is per-language-variant. Each must be reviewed separately. │
└──────────────────────────────────────────────────────────────────────┘
For reviewers with per-Object assignments, the scope list clearly separates:
┌─────────────────────────────────────────────────────────────┐
│ ── MY ASSIGNMENTS (3 of 10 in scope) ── │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 🔴 NEW topic-a.dita [✓] │ │
│ │ 🟡 MOD topic-b.dita [✓] │ │
│ │ 🟢 OK topic-c.dita [✓] │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ ── CONTEXT (7 Objects — read-only) ── [▾ Expand] │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 👁 topic-d.dita [💬 Comment] │ │
│ │ 👁 topic-e.dita [💬 Comment] │ │
│ │ 👁 topic-f.dita [💬 Comment] │ │
│ │ ... │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ ℹ Context Objects are visible for reference. │
│ You can view and comment but cannot sign off. │
└─────────────────────────────────────────────────────────────┘
For reviewers with full-round assignment (no per-Object restriction):
┌─────────────────────────────────────────────────────────────┐
│ ── ALL IN SCOPE (47 Objects) ── │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 🔴 NEW topic-a.dita [✓] │ │
│ │ 🟡 MOD topic-b.dita [✓] │ │
│ │ 🟢 OK topic-c.dita [✓] │ │
│ │ 🔵 CTX topic-d.dita [✓] │ │
│ │ ... │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ (No "context" section — full-round reviewers own all) │
└─────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────┐
│ Q2 2026 Technical Review │ Work Package: Spring Release │
│ Recipe: "Safety Manual 2026" │ Profile: Product A, US Market │
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━░░░░░░░ 65% signed off │
│ Due: May 30, 2026 (8 days remaining) │ 12/18 assigned │ 3 invalidated │
└──────────────────────────────────────────────────────────────────────┘
The app status bar shows active review context:
┌──────────────────────────────────────────────────────────────────────┐
│ Review: "Q2 Tech Review" │ 12/18 signed off │ ⚠ 3 need re-review │
└──────────────────────────────────────────────────────────────────────┘
049 UX Research (Section 6) already defines notifications for: round activated, reminder, round closed/cancelled, Object left scope, unassigned Objects warning, delegation received, deadline expired, auto-activation failed. Those notifications deep-link to the content-manager view (/work-packages/:wpId?tab=review-rounds&round=...).
This spec adds reviewer-facing notifications that deep-link to the Review Round Page (/review/:roundId):
The following 049 notifications are sent to reviewers and should deep-link to the Review Round Page rather than the content-manager WP detail:
Content-manager notifications (Object left scope, unassigned warning, auto-activation failed) continue to link to the 049 WP detail view.
┌────────────────────────────────────────────────────────┐
│ [Review icon] │
│ "No active review assignments" │
│ You have no review rounds assigned to you in this │
│ workspace. When a content manager assigns you to a │
│ review, it will appear here. │
│ │
│ [Go to Dashboard] │
└────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────┐
│ [Empty scope icon] │
│ "No Objects currently in scope" │
│ All Objects have left the configured status filter. │
│ Objects will appear here when they return to │
│ "Review" status. │
│ │
│ ── Previously in scope (3) ── │
│ ⊘ topic-a.dita (left scope May 20) │
│ ⊘ topic-b.dita (left scope May 21) │
│ ⊘ topic-c.dita (left scope May 21) │
└────────────────────────────────────────────────────────┘
┌──────────────┬───────────────────────────────────────────┐
│ ░░░░░░░░░░ │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │
│ ░░░░░░░░░░ │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │
│ ░░░░░░░░ │ │
│ ░░░░░░░░░░ │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │
│ ░░░░░░░░░░ │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │
│ ░░░░░░░░ │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │
│ ░░░░░░░░░░ │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │
│ ░░░░░░░░░░ │ │
│ │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │
└──────────────┴───────────────────────────────────────────┘
┌────────────────────────────────────────────────────────┐
│ [Error icon] │
│ "Failed to load review scope" │
│ The review round data could not be retrieved. │
│ [Retry] │
└────────────────────────────────────────────────────────┘
Content manager opens Work Package detail → Review Rounds tab (049 surface)
→ clicks [+ New Round] (049 Section 3.2)
→ 3-step dialog opens (049 Section 3.3)
→ Step 1 (Scope): selects status filter "Review", language "DE"
→ Step 1 (Profile Set — 051 extension): adds "Product A", "US Market"
→ Step 2 (Assignment): assigns reviewers (049 pattern)
→ Step 3 (Schedule): sets deadline (049 pattern)
→ Summary shown → clicks [Create Round (Pending)]
→ round appears in Review Rounds tab as Pending card
→ content manager clicks [Activate] on card
→ 049 activation confirmation dialog (Section 3.5)
→ round transitions to Active
→ baseline revisions captured for all 47 Objects (051)
→ reviewers receive notification → links to /review/:roundId
Reviewer receives notification "You have been assigned to review round 'Q2 Tech Review'"
→ clicks notification → deep-links to /ws/:workspaceId/review/:roundId
→ Review Round Page loads (Section 5.1)
→ Recipe "Safety Manual 2026" assigned → tree view is default
→ Scope Navigation shows recipe structure with status indicators:
Chapter 1 (2 Objects: 1 🟢, 1 🔵)
Chapter 2 (8 Objects: 2 🔴, 4 🟡, 2 🟢) ← most work here
Chapter 3 (2 Objects: 1 🟡, 1 🔴)
→ Reviewer expands Chapter 2 → sees section breakdown
→ filters to "New + Modified" → tree shows only matching Objects
→ clicks first 🔴 NEW Object under "2.1 Oil System"
→ URL updates to /review/:roundId/object/:objectId
→ Content Detail loads with profile-filtered content
→ Recipe breadcrumb shows: Safety Manual > Maintenance > Oil System
→ reviewer reads content in publication context
→ clicks [✓ Sign Off]
→ badge changes to "✓ Signed off (r7)"
→ progress ring on "2.1 Oil System" updates (1/2)
→ moves to next Object in same section (reading order)
Reviewer has signed off on topic-b.dita (r5)
→ Author updates topic-b.dita → new revision r6 created
→ System automatically invalidates sign-off
→ SignalR pushes update to reviewer's open session
→ Toast: "Sign-off on topic-b.dita invalidated"
→ Scope List: topic-b.dita changes from ✓ to ⚠
→ Status: changes to 🟡 MODIFIED (needs re-review)
→ Reviewer clicks topic-b.dita
→ sees "⚠ Sign-off invalidated" banner
→ clicks [View Changes (r5 → r6)]
→ Diff View shows what changed
→ Reviewer reads changes
→ clicks [Re-sign on r6]
→ sign-off updated to r6
→ status returns to ✓
Object topic-x.dita is in "Review" status → in scope
→ Author changes status to "Draft" (for edits)
→ Object dynamically leaves scope
→ Scope List: topic-x moves to "Out of Scope" section (dimmed)
→ Round manager notified
→ Progress recalculated (excluded from denominator)
→ Author finishes edits, returns to "Review" status
→ Object re-enters scope
→ New baseline captured at re-entry time
→ Scope List: topic-x reappears in main list
→ Status: 🔴 NEW (fresh baseline, diffs from re-entry only)
→ Round manager notified of re-entry
Reviewer opens review round (profile: Product A, US Market)
→ sees topic-d.dita with status 🔵 DIFFERENT CONTEXT
→ clicks topic-d.dita
→ Content Detail shows:
"Last reviewed by Jane D. in Q1 Safety Review
under profile: Product A, EU Market (different context)"
→ Content View shows US Market-filtered content
→ Reviewer clicks [Sign-off History] tab
→ sees prior sign-offs with different profiles
→ clicks [Compare rev 5 → rev 7] to see content diff
→ even though status says "unchanged," reviewer can
verify the content they see (US) vs what was reviewed (EU)
→ signs off → status for future US-profile rounds
will be 🟢 UNCHANGED (same profile now recorded)
Reviewer has per-Object assignment (3 of 10 Objects)
→ Review Round Page loads
→ Scope List shows:
"MY ASSIGNMENTS (3)" section with sign-off buttons
"CONTEXT (7 Objects)" section (collapsed)
→ Reviewer clicks assigned topic-a.dita → can sign off
→ Reviewer expands Context section
→ clicks context topic-d.dita
→ Content Detail loads (read-only indicator)
→ Sign-off button is hidden
→ [💬 Add Comment] button is available
→ Reviewer adds comment for context
→ comment saved with reviewRoundId
→ Reviewer attempts to sign off on context Object → action not available
Content manager creates review round via 049 dialog with status filter "Review"
→ Step 1: "Scope Preview: 0 Objects currently match" (049 inline preview)
→ Dialog shows: "0 Objects match. Round can be created but not activated yet."
→ Creates round in Pending state (round card appears in Review Rounds tab)
→ later, author moves 12 Objects to "Review" status
→ Content manager returns to WP detail → Review Rounds tab
→ clicks [View] on Pending round → Detail view (049 Section 3.4)
→ Scope tab shows 12 Objects now matching (with 051 status column)
→ clicks [Activate]
→ 049 activation confirmation (Section 3.5)
→ baselines captured for 12 Objects
→ round goes Active
→ reviewer notifications sent
aria-label="Modified since last review")049 defines ReviewRound.Manage (round CRUD) and ReviewRound.Read (view rounds). This spec adds a reviewer-facing capability:
Pattern:
/review/:roundId) wrapped in ProtectedRoute checking ReviewRound.ParticipateReviewRound.Manage (049 surface)ReviewRound.ManageAll URLs are deep-linkable. Sharing a URL loads the exact view (round, Object, tab, filter).
useFetch (never raw fetch)/ws/:workspaceId/review/:reviewRoundId — workspace-scopedErrorState component with retryReviewRound.Participate via ProtectedRouteuseWorkspacePath() for linksuseFetch / useMutate throughoutlazyComponents.tsThis spec complements — not replaces — the 049 UX Research. The two specs serve different personas:
Delegation integration: When a reviewer clicks "Delegate" on the Review Round Page, it opens the delegation dialog defined by 049 Section 5. This spec does not redefine that interaction.