Skip to main content

📘 UX-OPERATIONS.md

This document specifies the UX patterns for the Operations category. This is the "Live Pulse" of Evalium, where administrative intent (Assignments) meets real-time execution (Command Centre) and human judgement (Grading Queue).

Operations UX must stay calm and actionable for SMBs, while still supporting enterprise-grade workflows via progressive disclosure and capability gating.


Capability Baseline (Validated 2026-02-25)

This Operations plan includes both live backend capability and target-state UX.

Backend-live now:

  • Assignment issuance, redemption, monitoring, overrides, and schedules are implemented.
  • Delivery session runtime APIs are implemented for create/answer/submit plus event/probe telemetry.
  • Observation review/finding flows are implemented (approve/reject/request-changes/reopen with findings enforcement).
  • Defensibility readiness/exception projections are implemented for submission, engagement, and programme rollups.

Backend gaps to treat as feature-flagged/pending:

  • No first-class persisted assignment draft entity yet (wizard draft is currently a projection/local workflow concern).
  • Explicit first-class proctor command endpoints (pause / resume / terminate) are not yet a normalized backend action surface.
  • A dedicated subjective grading queue projection API is not yet a first-class backend surface.

0. Operations Doctrine (MUST)

  • On-demand by default: Live monitoring is manual refresh first. Optional auto-refresh is available but off by default.
  • Smallest sufficient context: Tables drive flow; drill-ins happen in drawers; full pages are reserved for primary assets.
  • Ledger principle applies: Session/proctor events, grading/review decisions, and overrides are append-only and must record who/when/why.
  • Operations → Insights handoff is explicit: Live actions must be visible later in durable history (Submission / Assignment Activity).
  • Security is visible: When an assignment/session is configured as high-security (e.g., lockdown), the UI must reflect a High Stakes mode with a persistent Security Level badge.

0.1 Operations Interface Guardrails (MUST)

  • Assignment monitor labels must remain canonical and deterministic:
    • invited|started|completed|expired -> Not started|In progress|Completed|Expired
  • Queue and monitor actions must be keyboard-complete and touch-usable.
  • Refreshing live tables must preserve focus and selection context.
  • High-stakes actions (override/proctor/review decision) require explicit reason capture and durable audit linkage.
  • Mobile/iPad supports quick triage and monitoring actions; dense investigation flows may be desktop-optimized with explicit handoff.
  • Status meaning must never rely on color only; chips must include textual semantics.

1. Assignments & Schedules

Assignments define who may take an assessment and under what conditions. For SMBs, the focus is on frictionless issuance with safe defaults.

1.1 The Issue Wizard

When creating a new assignment, the UI defaults to the simplest path to avoid "enterprise anxiety".

Wizard Steps

  1. Step 1: Who?
  • Select individual Users, Emails, or Groups.
  1. Step 2: What?
  • Select the Evaluation or Programme to issue.
  1. Step 3: When & Limits (Simple Defaults)
  • When (simple):
    • Start: Now (default) or Schedule start…
    • Deadline: optional (“No deadline” default)
  • Standard Limits toggle (default ON):
    • UI displays the resolved default limits inline (read-only), e.g.:
      • “Standard: 45m, 1 attempt”
    • “Where do standards come from?” link opens a drawer explaining the source (tenant defaults / evaluation defaults).
  1. Step 4: Policy (The "Power Drawer")
  • Security Level Badge (MUST): The drawer header displays a badge derived from the chosen security_config:

    • Standard (default) / Elevated / High Stakes
  • High Stakes Mode (SHOULD): If High Stakes is selected, the wizard enters a visibly distinct mode:

    • Displays a short banner: “High security enabled. Proctoring and audit requirements are stricter.”
    • Shows a compact checklist of implications (e.g., “Lockdown required”, “Stricter integrity flags”).
    • Keeps advanced security fields visible within the drawer (still collapsed by default, but the security subsection is expanded once a high-stakes config is chosen).
  • Advanced Section: collapsed by default; contains:

    • security_config (Lockdown Browser requirements)
    • assignment_overrides (policy exceptions template)
    • specific availability windows (if not covered by simple start/deadline)
    • other advanced issuance rules

Primary / Secondary Actions

  • Primary CTA: Send Now
  • Secondary CTA: Save Draft (feature-flagged until persisted draft backend state exists)

Until persisted assignment draft state exists, draft behavior must be explicitly labeled as non-authoritative (local/projection), and must not be presented as an immutable backend status.

Trust & Preview (SHOULD)

Before sending, show a compact summary panel:

  • Recipients count (and sample list)
  • Asset issued (Evaluation/Programme)
  • When (start/deadline)
  • Limits (time/attempts)
  • Security requirements (if any) + Security Level badge
  • Results grouping label (see Run Labels)

If Security Level is High Stakes, the summary must include a short “What this means” hint.


1.2 Run Labels (Results Grouping)

To help SMBs understand reporting grouping without exposing data-model complexity:

  • The UI auto-generates a run_label (e.g., Compliance_Q1_2025) on send.
  • The label is visible in the wizard summary and Assignment Hub.
  • Provide a safe inline action: Edit label (simple validation).
  • Helper text: “This groups results in Insights.”

1.3 Schedules (Automated Issuance)

For recurring compliance needs, the UI uses the "Set and Forget" pattern.

Pattern

A simplified version of the Issue Wizard that includes:

  • Frequency Picker (e.g., “Every 12 months”)
  • Next Runs Preview (SHOULD): show next 3 planned run dates and their generated labels
  • “Last run” and “Next run” indicators for trust

All mutating schedule actions must use idempotency keys and show deterministic retry messaging.

Run Labels (Automated)

  • The UI generates a run label per run (e.g., Compliance_Q1_2025).
  • Labels are editable (safe) and visible in the schedule detail.

2. The Command Centre (Live Monitoring)

The Command Centre is a real-time view of active delivery_sessions. It transitions from Operational monitoring (live) to Durable history (completed submissions).

2.1 The Monitor Table

Refresh Doctrine (MUST)

  • Default interaction is on-demand refresh via a persistent Refresh button.
  • The UI must display a Freshness Indicator (e.g., “Updated 12s ago”).
  • Optional Auto-refresh is available but OFF by default.
    • When enabled, show cadence options: 10s / 30s / 60s.

Performance Safeguards (MUST)

  • Auto-refresh pauses when the browser tab is hidden.
  • Auto-refresh pauses when the Session Drill-in drawer is open and the user is interacting, to avoid UI jumping.
  • Prefer “cheap refresh” patterns where supported (ETag/304, cursor-based deltas, or a lightweight summary endpoint).

Glanceable Status (MUST)

Candidates are shown with status chips. Status taxonomy must be consistent:

  • Live (actively answering / recently active)
  • Idle (no activity for N minutes; define threshold in implementation)
  • Paused
  • Submitted
  • Expired
  • Terminated

Assignment Monitor Bucket Labels (MUST)

For assignment-target cohort views (for example GET /api/v1/assignments/\{id\}/monitor), frontend labels must use this exact mapping:

  • backend invited -> UI Not started
  • backend started -> UI In progress
  • backend completed -> UI Completed
  • backend expired -> UI Expired

Rules:

  • Do not show backend terms directly in primary UI.
  • Do not mix synonymous labels in one screen (for example Started and In progress together).
  • If a filter chip is shown, it must use the UI label and map back to canonical backend value.

Security Level (SHOULD)

  • Each row shows a compact Security Level badge (Standard / Elevated / High Stakes), derived from the assignment/session policy.
  • Provide a quick filter: “High Stakes only”.

Pulse Telemetry (SHOULD)

If a candidate loses browser focus, a pulse indicator appears next to their name.

  • Tooltip shows: “Focus lost X times, last at HH:MM
  • Clicking opens the Session Drill-in drawer focused on telemetry events.
  • In High Stakes mode, telemetry indicators should be more prominent (without becoming noisy), and tooltips must include counts + last occurrence time.

Error / Stale State (MUST)

If refresh fails:

  • Show: “Connection issue — last updated Xm ago”
  • Keep Refresh available at all times.
  • Display a Stale badge if data age exceeds a defined threshold (e.g., >2–5 minutes).

2.2 The Session Drill-in (Right Drawer)

Clicking a candidate opens a side-panel for "Proctor Actions".

Drawer Sections

  • Summary: candidate, assignment/run label, current section, time remaining (if applicable), Security Level badge
  • Timeline: vertical view of session events (started, section changed, focus lost, reconnects)
  • Telemetry: focus events, suspicious indicators (capability gated)
  • Live Actions: capability-gated proctor controls
    • Current: event-driven controls where backend supports session/proctor event writes.
    • Future: dedicated Pause / Resume / Terminate commands once normalized endpoints are available.

Proctor Notes & Reasons (Ledger UX) (MUST)

  • High-risk proctor actions should require a reason when supported by backend policy.
  • Lower-risk actions may allow optional notes for speed.
  • All persisted proctor/session events are visible later on:
    • Submission Activity (if a submission exists)
    • Assignment Activity (always)

Security Probe (Progressive Disclosure) (MUST)

Display security posture in human language first:

  • Lockdown: ✅ Verified / ⚠️ Not detected / ⛔ Tampered (if supported)

Technical signals are revealed only behind “Show technical details” (capability gated), e.g. headers, fingerprint signals.

Example user-facing message:

  • “Lockdown verified” (expand to “SEB Header Present” only for privileged users)

2.3 Live → History Transition (MUST)

Command Centre must clearly separate:

  • Live Monitoring: delivery_sessions and real-time signals (operational)
  • History: submissions as durable truth (audit/reporting)

When a session reaches a terminal state (Submitted/Expired/Terminated):

  • The row’s primary action becomes View Submission (full page) where available.
  • The drawer includes a durable summary and links to the Submission ledger.

3. The Grading Queue (Subjective Workflow)

The Grading Queue handles the assessment of Essays, Observations, and Evidence uploads. It follows the Ledger Principle: every grade is a durable record and requires provenance.

This section is target-state. Current backend already supports observation findings + approval transitions, but a dedicated queue/read-model surface should be treated as incremental UX work.

3.1 The Queue Hub

Queue Item Definition (MUST)

Default SMB model:

  • A queue item represents a Submission with one or more subjective items pending.
  • The row shows: “2 items pending” and opens the grading view with an item navigator.

Filter-First (MUST)

Assessors can filter by:

  • Org Unit (hidden globally if tenant has only one org unit)
  • Evaluation / Programme
  • Status
  • “Urgency” (e.g., “Due in 2 days”)

Status Tags (MUST)

Items are marked as:

  • Awaiting Review
  • In Progress (claimed by a reviewer)
  • Requires Second Opinion

Ownership / Claiming (SHOULD)

To avoid collisions:

  • Assessors can Claim an item.
  • “In Progress” displays the reviewer.
  • Filters: Assigned to me, Unclaimed.

3.2 The Split-Screen Grading Interface

To maximise efficiency, the reviewer never leaves the page to see the response.

Layout

  • Left Pane (The Evidence):
    • Candidate work:
      • Rendered Markdown for essays
      • Document/video player for evidence uploads
  • Right Pane (The Rubric):
    • Displays the versioned Rubric from the version_snapshot
    • Assessors click levels (e.g., Pass / Merit / Distinction) rather than input raw numbers
    • Shows:
      • rubric version scope chip (“Rubric vX” / “Evaluation vY”)
      • Security Level badge (Standard/Elevated/High Stakes)

Item Navigator (MUST for multi-item submissions)

  • A compact list to switch between subjective items (Essay 1, Evidence 2, etc.)
  • Each item has its own draft/final state.

Draft vs Finalise (MUST)

  • Reviewers can Save Draft without finalising.
  • Finalise Grade is the high-stakes action.

Mandatory Rationale (Ledger) (MUST)

Finalising a grade requires a mandatory Rationale comment.

  • Stored as a durable ledger record on the submission.
  • Visible later in Submission Activity / audit views.

Second Opinion (SHOULD)

If “Requires Second Opinion” is used:

  • The UI must show why it was triggered (manual flag / rule threshold / policy)
  • The second reviewer sees the first reviewer’s rationale (capability gated if needed).

4. High-Stakes Accommodations (Overrides)

Evalium supports making "at-the-moment" changes to live assignments without re-issuing the assessment.

4.1 Override Drawer

  • Accessible from:
    • Assignment Hub
    • Command Centre (candidate drill-in drawer)

4.2 Supported Actions

  • Extend time_limit for a specific user
  • Add an extra_attempt for a specific user

4.3 Preview + Ledger Rules (MUST)

Before applying, the UI shows a compact preview:

  • “Effective time limit: 60m → 75m”
  • “Attempts: 1 → 2”
  • “Applies immediately”

Reason is mandatory.
Every override is an immutable row in the assignment_overrides table.

The UI must display effective totals:

  • “Effective Limit: 60m (Base) + 15m (Override)”

If Security Level is High Stakes, the Apply flow adds an additional confirmation line:

  • “This accommodation will be recorded for audit and may affect compliance.”

4.4 Default Scope (SHOULD)

Overrides default to:

  • This assignment run only
  • This user only Optional advanced control:
  • “Valid until” (time-bound override)

5. Summary of Navigation Contracts

Operational TaskPatternPrimary CTALink Contract (Peek + Full Page)
Issue TestWizardSend NowUser Profile (Who)
Monitor SessionsTable + DrawerRefreshSession Timeline & Telemetry
Grade Submission (Future)Split-ScreenFinalise GradeRubric Definition (version-scoped)
Apply OverridesDrawerApply ChangeOverrides Ledger (and link to impacted Submission)
Triage DefensibilityQueue Table + RollupsAcknowledge / Suppress / ResolveSubmission/Engagement/Programme details

6. Operations → Insights Handoff (MUST)

To preserve trust and auditability, operational actions must surface in durable history and derived readiness views:

  • Session/Proctor Events (including pause/resume/terminate once dedicated commands exist)

    • Visible in Assignment Activity
    • Visible in Submission Activity when a submission exists
  • Grading Finalisation

    • Rationale stored as a submission ledger record
    • Visible in Submission Activity and audit exports
  • Overrides

    • Visible in Assignment Activity
    • Effective totals displayed in Submission summary (where relevant)
  • Defensibility State

    • Submission outcomes must flow into proof-readiness/KOE projections.
    • Exceptions should appear in defensibility queues (submission, engagement, programme requirement) for triage.

7. Evidence Integrity Operations (MUST)

Operations must expose a first-class evidence workflow for review teams without forcing them into raw ledger JSON.

7.1 Evidence Action Surface

Submission-scope endpoints:

  • POST /api/v1/submissions/\{id\}/evidence/record
  • POST /api/v1/submissions/\{id\}/evidence/amend
  • POST /api/v1/submissions/\{id\}/evidence/approve
  • POST /api/v1/submissions/\{id\}/evidence/reject
  • POST /api/v1/submissions/\{id\}/evidence/verify
  • POST /api/v1/submissions/\{id\}/evidence/void

Item-scope endpoints:

  • POST /api/v1/submissions/items/\{itemId\}/evidence/record
  • POST /api/v1/submissions/items/\{itemId\}/evidence/amend
  • POST /api/v1/submissions/items/\{itemId\}/evidence/approve
  • POST /api/v1/submissions/items/\{itemId\}/evidence/reject
  • POST /api/v1/submissions/items/\{itemId\}/evidence/verify
  • POST /api/v1/submissions/items/\{itemId\}/evidence/void

7.2 Evidence Panel UX

Required elements:

  • scope switch (Submission vs Item)
  • integrity indicator (queued / verified / failed / unknown)
  • latest decision indicator (approved / rejected / voided / none)
  • action rail with explicit idempotent retry behavior

Rules:

  • all mutating evidence actions include Idempotency-Key.
  • verify action is async intent; UI must show queued state and refresh affordance.
  • amend/void actions require explicit reason capture and show lineage to prior event when available.

7.3 Error and Safety Behavior

  • 409 conflicts must be rendered as state drift, not generic failure.
  • 404 should be presented as scope-hidden or missing evidence target.
  • evidence action failures must not clear currently visible evidence history.

8. Programme and Enrolment Operations (MUST)

Operations must include a programme-focused control plane because programme progress and defensibility rollups are now backend-live.

8.1 Programme Hub Screens

Required screens:

  1. Programme list and detail
  2. Programme requirements manager
  3. Enrolment list and enrolment detail
  4. Per-enrolment progress view
  5. User cross-programme enrolments view

Primary APIs:

  • GET/POST /api/v1/programmes
  • GET/PATCH/DELETE /api/v1/programmes/\{id\}
  • POST /api/v1/programmes/\{id\}/requirements
  • PATCH/DELETE /api/v1/programmes/\{id\}/requirements/\{reqId\}
  • GET/POST /api/v1/programmes/\{id\}/enrolments
  • GET /api/v1/programmes/\{id\}/enrolments/\{enrolId\}
  • GET /api/v1/programmes/\{id\}/enrolments/\{enrolId\}/progress
  • GET /api/v1/programmes/\{id\}/enrolments/user/\{userId\}
  • GET /api/v1/programmes/enrolments/user/\{userId\}

8.2 Required Programme UX Blocks

  • requirement list with evaluationVersionId visibility
  • enrolment status card (in_progress, completed, certified, etc.)
  • requirement progress rows with linked submissionId when present
  • engagement linkage visibility where engagementId exists
  • rollup handoff link to programme-requirement defensibility exceptions

8.3 Certificate Verification Entry

Public/operations verification route:

  • GET /api/v1/certs/verify/\{token\}

UX behavior:

  • provide a lightweight verify screen with clear valid/invalid state.
  • do not expose internal identifiers when verification fails.

9. Accessibility & Performance Notes (Operations)

  • All tables, drawers, and split-screen grading interfaces must support keyboard-only use.
  • Drawer focus management and escape behaviour is consistent across Operations.
  • Monitor table refresh must not cause focus loss or disorienting reflows.
  • Grading actions must be resilient to network interruption (draft autosave where feasible).
  • Operations actions follow task-tier policy: quick monitor/triage tasks are mobile-safe, dense investigation screens are desktop-optimized with explicit handoff.

reference:

  • /docs/ux/UX-ACCESSIBILITY-STANDARDS-AND-GUARDRAILS.md
  • /docs/ux/UX-MOBILE-AND-TASK-TIER-POLICY.md