# Knowledge graph index

_Generated by `kg.mjs index` — do not edit. Start with [README](README.md)._

398 nodes.

## entity (85)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [response](nodes/response.md) | A student response to be scored (one per section+item+ref_id+pv flag); embeds every score, flag and the computed final score, and carries routing, lock and export state. | 147 | 6 | entity, scoring, core |
| [client](nodes/client.md) | A tenant (customer program) inside an account; owns embedded roles, teams, projects, alerts and tenant feature flags. All tenants share one Mongo database. | 131 | 7 | entity, tenant, platform-auth |
| [item](nodes/item.md) | A scorable question (tenant-scoped, keyed by ref_id) that owns the rubric link and every scoring rule - read type/resolution, reliability %, QC configs, lock/buffer behaviour, AI configs and the API export (score callback) config. | 114 | 7 | entity, scoring, config, core |
| [user](nodes/user.md) | A person who logs into OSCAR (scorer, supervisor, admin); one global record with per-tenant membership (role, team, scorer id, active) in clients[]. | 106 | 5 | entity, identity, platform-auth |
| [section](nodes/section.md) | A tenant-scoped group of items under a project (keyed by ref_id); the unit scorers are assigned to (via teams) and, for UK clients, the unit of allocation with standardisation and contract dates. | 73 | 6 | entity, scoring, allocation |
| [qc-set](nodes/qc-set.md) | A quality-control set (practice, qualification, validity, calibration, rangefinding, exemplar, trend) of QC responses for one item, with its pass rules and delivery flags. | 63 | 7 | entity, qc |
| [credential](nodes/credential.md) | A tenant-scoped stored secret (key/secret, bucket, region) for an outside system - e.g. an external S3 bucket or the IEA credential; secret stored in plaintext, stripped by MakeSafe on read. | 50 | 2 | entity, secrets, platform-auth |
| [qc-score](nodes/qc-score.md) | A scorer's score on a qc-response (practice, qualification, validity, calibration, RF, trend); compared to the response's true score to compute agreement. | 42 | 4 | entity, qc |
| [qc-response](nodes/qc-response.md) | A response copied into the QC pool (with an optional true score) that scorers are measured against; belongs to at most one qc-set. | 41 | 6 | entity, qc |
| [user-qc-stats](nodes/user-qc-stats.md) | A user's QC state per item, either per qc-set (qc_set_id set) or overall per qc_type (qc_set_id null); drives qualification gating, validity intervals and lockouts. | 38 | 5 | entity, qc |
| [rubric](nodes/rubric.md) | Scoring guide for items - an ordered list of traits (score range, condition codes, score point descriptors, external trait ids) plus meta traits, checklist and annotation settings. | 36 | 3 | entity, scoring, config |
| [outbound-queue](nodes/outbound-queue.md) | Mongo-backed retry queue of responses whose scores must be POSTed to an external callback (one message per response per primary/secondary endpoint, max 5 attempts); drained by the outbound score sweeper, deleted on success. | 35 | 4 | entity, export, queue, external |
| [role](nodes/role.md) | A tenant-defined permission set (embedded in clients.roles[]) - an access level plus ~160 boolean flags gating pages, actions and restrictions; assigned per user per tenant via users.clients[].role_id. | 35 | 2 | entity, permissions, platform-auth |
| [session](nodes/session.md) | A browser login session (one per user), identified by a UUID hash sent as X-Auth-Token or kept in the signed "oscar" cookie; expires after SESSION_DURATION minutes of inactivity. | 27 | 4 | entity, auth, platform-auth |
| [account](nodes/account.md) | An organization-level grouping of tenants (clients); drives the scorer portal, host branding and cross-tenant admin scope. | 26 | 2 | entity, tenant, platform-auth |
| [project](nodes/project.md) | A scoring project (administration window) embedded in a client's projects[] array; sets scoring dates/hours, shifts, scheduling rules and field-test mode for its sections. | 26 | 3 | entity, tenant, platform-auth |
| [scan-lock](nodes/scan-lock.md) | Cluster-wide mutex + "last run" record for background jobs - scan_locks (unique type+key, 1 h TTL) and scan_records (performed_at per type+key). | 25 | 1 | entity, async, infra |
| [training-course](nodes/training-course.md) | A per-client scorer training course - an ordered list of elements (SCORM, resource, qualification set, practice set, exemplar set) that sections/items can require before a scorer may score. | 22 | 7 | entity, training |
| [lockout-stat](nodes/lockout-stat.md) | A record that a scorer was locked out of (or deactivated for) an item, with the reason (validity, calibration, qualification, rate, FD, manual, ...). | 19 | 4 | entity, qc, lockout |
| [auth-account](nodes/auth-account.md) | A machine API client (username + secret) allowed to call the external /v1/api, /iea/v1 and /v1/api/iea routes for a list of tenant ref ids or account ref ids; also logs every attempt to auth_requests. | 18 | 3 | entity, auth, external-api, platform-auth |
| [irr-comparison](nodes/irr-comparison.md) | Precomputed agreement between two operational scores (e.g. 1st vs 2nd read) on one response, per trait; the source for IRR reports and compensation adjacency. | 17 | 3 | entity, qc, irr |
| [team](nodes/team.md) | A named group of users inside a tenant (embedded in clients.teams[]); used to scope supervisors, reports (limit_teams), mail and section assignment. | 17 | 2 | entity, tenant, platform-auth |
| [uk-user-allocation](nodes/uk-user-allocation.md) | UK allocations - how many responses one marker must score on one item of one section (target, rolling increment, cap, manual override, milestone e-mail flags, scored counts); with an audit log in uk_user_allocation_log. | 17 | 5 | entity, allocation, uk |
| [work-queue](nodes/work-queue.md) | Per-user claim on a response (LOCK / RESERVE / VIEW / VALIDITY / ITREND task) that pins what a scorer is working on, holds partial scores and measures think time; one record per (user, section, item, task, pv mode). | 17 | 6 | entity, scoring, delivery |
| [reset-job](nodes/reset-job.md) | A queued score-reset job from Score Auditing - a saved audit selection whose matching scores are reset (optionally with resolution/adjudication scores), with before/after agreement snapshots. | 15 | 5 | entity, scoring, job |
| [resolution-group](nodes/resolution-group.md) | A set of section+item queues whose responses (same ref_id) are resolved together as one combined rubric, with its own resolution type and thresholds. | 15 | 4 | entity, scoring, resolution |
| [m-session-reset-job](nodes/m-session-reset-job.md) | An async job that resets the operational scores counted in an interspersed-trend m-session. | 14 | 2 | entity, qc, trend |
| [observation-site](nodes/observation-site.md) | A physical test site for observation exams, with the list of OSCAR users (raters) allowed to work there. | 14 | 3 | entity, observation |
| [rescore-request](nodes/rescore-request.md) | A supervisor's request that a specific scorer re-score one of their scores (or a flagged response); the scorer sees it in their assigned-responses list and submits via submit_rescore. | 14 | 5 | entity, scoring, qc |
| [observation-session](nodes/observation-session.md) | A live observation session at a site - groups candidate observation schedules into stations rated by one or more raters with an observation form. | 13 | 7 | entity, observation |
| [report-queue](nodes/report-queue.md) | Deduplicated work queue of report-cache buckets (client x item x half-hour x target collection) to rebuild after responses change. | 13 | 4 | entity, reporting, queue |
| [schedule](nodes/schedule.md) | A scorer's planned work on one project on one date - free time range or a set of project shift ids; drives shift-change, reminder and sign-up emails. | 13 | 4 | entity, scheduling |
| [user-session-log](nodes/user-session-log.md) | Login/logout event per user per client (including impersonation and client switches); the time base for attendance, payroll and scorer reports. | 13 | 3 | entity, activity |
| [iea-tod-item](nodes/iea-tod-item.md) | Local mirror of an IEA Training-on-Demand (or smart-sort / training-on-the-fly) item model and its workflow state history, kept current by IEA workflow-state callbacks. | 12 | 3 | entity, iea |
| [observation-schedule](nodes/observation-schedule.md) | A candidate's booking for an observation exam (imported from an external booking system); tracks status, its session, and score-export state. | 12 | 6 | entity, observation |
| [observation-score](nodes/observation-score.md) | A candidate's observation result for one schedule - per form-section rater, task scores, subtask codes and absence. | 12 | 5 | entity, observation |
| [trend-item](nodes/trend-item.md) | Per-item trend configuration (m-session count/size, interspersed-trend ratio, approval); cached in valkey. | 12 | 2 | entity, qc, trend |
| [buffered-score](nodes/buffered-score.md) | A score held back before it is committed to the response (item `buffer` setting), so a scorer can revisit their last N scores; swept and committed on expiry. | 11 | 5 | entity, scoring |
| [irr-comparison-daily](nodes/irr-comparison-daily.md) | Report cache of reader-vs-reader agreement counts per item x trait x score pair x user x half-hour bucket; feeds the Item Summary agreement matrix. | 11 | 5 | entity, reporting, cache, irr |
| [observation-form](nodes/observation-form.md) | The rating form for an observation exam - sections, tasks, subtasks and audio prompts (audio stored in S3). | 11 | 2 | entity, observation |
| [progress-job](nodes/progress-job.md) | Generic progress tracker for long-running admin HTTP actions (tenant import/export, previewer import, ops tasks); the handler returns its id and the SPA polls GET /v1/job_progress/:jobID. | 11 | 2 | entity, job |
| [training-progress](nodes/training-progress.md) | One user's progress through one training course, with a per-element progress array; complete progress unlocks scoring. | 11 | 3 | entity, training |
| [video-meeting](nodes/video-meeting.md) | A scheduled Amazon Chime video meeting (e.g. scorer training/standardisation) with invited participants and roles, password-based anonymous guests, breakout rooms and Chime session ids. | 11 | 5 | entity, video |
| [appeal-request](nodes/appeal-request.md) | An inbound appeal from an external system (POST /v1/api/appeal) for a completed response; stored first, then applied asynchronously by the appeal-request sweeper, which moves the response into APPEAL state. | 10 | 3 | entity, scoring, appeal, external |
| [compensation-export-record](nodes/compensation-export-record.md) | One row per scorer x item x score day of paid work units, times and agreement - the cached P-Comp payroll data that is also exported as CSV to S3. | 10 | 4 | entity, compensation, payroll |
| [compensation-job](nodes/compensation-job.md) | A scheduled daily P-Comp (Pearson compensation) run for one pay date; the scheduler inserts one per day and the sweeper locks and runs it. | 10 | 1 | entity, compensation, job |
| [compensation-queue-time](nodes/compensation-queue-time.md) | Client-reported time a scorer spent on one scoring task or training resource, used as paid scoring/training time in P-Comp and dashboards. | 10 | 7 | entity, compensation |
| [iea-outbound-event](nodes/iea-outbound-event.md) | A queued outbound message for IEA (config sync, human-score passback, notifications) in iea_outbound_event_queue, drained per client by the IEA event sweeper with up to 5 attempts. | 10 | 2 | entity, iea, queue |
| [rpt-user-item-daily](nodes/rpt-user-item-daily.md) | Report cache of score counts per user x item x trait x score value x half-hour bucket, rebuilt from report-queue records; feeds the Item Summary frequency distribution. | 10 | 5 | entity, reporting, cache |
| [scorm-import-record](nodes/scorm-import-record.md) | A SCORM package imported (uploaded or pulled from an external S3 "SCORM location") and unpacked into OSCAR's S3, served to scorers through a cookie-restricted CloudFront. | 10 | 4 | entity, training, scorm |
| [uk-item-allocation](nodes/uk-item-allocation.md) | UK allocations - the allocation value per (section, role, item) used as the template for each marker's uk-user-allocation. | 10 | 4 | entity, allocation, uk |
| [link-invite](nodes/link-invite.md) | A short public link (/#/ex/<8 chars>) that exposes one internal view (currently only a QC set document) to anyone with the link, optionally limited by expiry and number of distinct IPs. | 9 | 2 | entity, sharing, platform-auth |
| [qc-trend-set-response](nodes/qc-trend-set-response.md) | Work-queue row wrapping one trend qc-response; tracks lock, scored and processed state for interspersed-trend (m-session) delivery. | 9 | 4 | entity, qc, trend |
| [video-meeting-message](nodes/video-meeting-message.md) | Persisted socket.io messages for a video meeting - chat, admin actions, capability changes, server events - stored in one collection and fanned out across servers via valkey pub/sub. | 9 | 5 | entity, video |
| [auth-token](nodes/auth-token.md) | A bearer token issued to an auth account by POST /v1/auth/token (or /iea/v1/auth) and sent as X-Auth-Token on external API calls; Mongo TTL deletes it 8 hours after creation. | 8 | 2 | entity, auth, external-api, platform-auth |
| [cached-completion-stat](nodes/cached-completion-stat.md) | Cached Completion Report row - per section x item x pv-mode counts of responses in each scoring state, rebuilt by a sweeper and patched live from the responses change stream. | 8 | 4 | entity, reporting, cache |
| [mail](nodes/mail.md) | An internal OSCAR mail message between users (optionally about a response, a score/flag rescore, or a supervisor flag hand-off), with per-recipient state; can also be sent out as an external email. | 8 | 5 | entity, messaging |
| [schedule-change](nodes/schedule-change.md) | Transient record of an added/removed shift or time range, debounced and then emailed to the scorer (and to supervisors for late cancellations). | 8 | 3 | entity, scheduling |
| [schedule-config](nodes/schedule-config.md) | Per-project, per-date staffing target for the shift calendar (users, peak users or hours, or per-shift counts) plus day labels/lock; drives sign-up request emails. | 8 | 3 | entity, scheduling |
| [scorer-report-time-cache](nodes/scorer-report-time-cache.md) | Nightly per user x item x section x day aggregate of score counts, think time and resolution stats used by the Scorer Report for opted-in clients. | 8 | 5 | entity, reporting, cache |
| [bulletin](nodes/bulletin.md) | A bulletin-board post for a client, optionally targeted at specific role ids. | 7 | 3 | entity, messaging |
| [emma-item](nodes/emma-item.md) | OSCAR's record of an item registered with EMMA - training configuration, status and the trained per-trait models with their agreement stats. | 7 | 2 | entity, ai-scoring |
| [exception-stat](nodes/exception-stat.md) | Per user and item scoring-exception counters (frequency distribution per score point, last rate exceptions) that trigger FD and rate lockouts. | 7 | 3 | entity, qc, lockout |
| [training-scorm-stat](nodes/training-scorm-stat.md) | Per-user SCORM runtime state (suspend data, lesson status, score, location) for one imported SCORM package. | 7 | 3 | entity, training, scorm |
| [validity-delivery](nodes/validity-delivery.md) | A scheduled delivery of a validity qc-set to users and/or teams at a specific local date/time. | 7 | 3 | entity, qc, validity |
| [ingest-prediction](nodes/ingest-prediction.md) | Planned number of incoming responses per date x section x item, entered on the Forecast/Calendar pages to compare actual intake against plan. | 6 | 4 | entity, reporting, forecast |
| [observation-candidate](nodes/observation-candidate.md) | A person being observed in an observation exam (not an OSCAR user), created from the external booking feed. | 6 | 2 | entity, observation |
| [peacs-job](nodes/peacs-job.md) | A scheduled daily PEACS import run that pulls vacancy/applicant statuses for every PEACS-enabled client project and creates or updates OSCAR users. | 6 | 1 | entity, job, peacs |
| [score-activity](nodes/score-activity.md) | Client-reported scoring session summary (section, item, mode, count, start/end) used for activity logs and allocation/compensation calculations. | 6 | 4 | entity, activity |
| [report-configuration](nodes/report-configuration.md) | Opt-in switch (report_name x client) that turns on cached behaviour for a report; today only ReportScorers uses it. | 5 | 2 | entity, reporting, config |
| [score-export-message](nodes/score-export-message.md) | API log of every outbound score-export HTTP attempt (payload, endpoint, auth snapshot, error); plus the observation-export and loopback-receipt logs. | 5 | 4 | entity, export, audit |
| [video-meeting-session](nodes/video-meeting-session.md) | Attendance record - one span of time a user (or the meeting itself) was present in a video meeting room; feeds the daily video meeting usage report. | 5 | 4 | entity, video |
| [iea-awaiting-outcome](nodes/iea-awaiting-outcome.md) | Snapshot of an item's IEA handling settings taken when a response is sent to IEA, so the asynchronous outcome is applied under the settings in force at request time. | 4 | 4 | entity, iea |
| [iea-event-request](nodes/iea-event-request.md) | Write-only audit log of every mutating HTTP call OSCAR makes to IEA (request/response dumps, status, error), one document per call. | 4 | 2 | entity, iea, log |
| [qc-response-reorder](nodes/qc-response-reorder.md) | A per-user, per-qc-set randomized but stable ordering of qc-response ids. | 4 | 3 | entity, qc |
| [qc-rule-template](nodes/qc-rule-template.md) | A named, per-client preset of qc-set rule and display settings, applied when creating or importing sets. | 4 | 2 | entity, qc |
| [qc-set-log](nodes/qc-set-log.md) | Audit trail of qc-set field changes, creations, copies, deletions and response moves. | 4 | 3 | entity, qc |
| [external-score](nodes/external-score.md) | Raw log of score-import requests received on the external API (/v1/api/response/score and /scores) - the parsed InScore/InScores plus the original JSON body. | 3 | 1 | entity, ingest, log |
| [iea-item-status](nodes/iea-item-status.md) | Status of an asynchronous IEA item-creation request (sync/async success, waiting, error) per tenant/project/item; blocks scoring until creation succeeds. | 3 | 2 | entity, iea |
| [response-processing-job](nodes/response-processing-job.md) | Tracking record for a src/quick ResponseProcessor run (query, counts, status, log/results files, cancel flag), viewable and cancellable from the admin tasks UI. | 3 | 1 | entity, tooling |
| [happy-item](nodes/happy-item.md) | HAPPY (High-concurrency Asynchronous Performance ProxY) mode - happy_items tracks per section/item whether a lightweight happy_responses proxy queue is loaded for fast get-next delivery (item.use_happy), and also stores the global buffered-update rate settings. | 2 | 3 | entity, scoring, performance |
| [personal-note](nodes/personal-note.md) | A scorer's private note on an item, shown to them while scoring that item. | 2 | 3 | entity, messaging |
| [spreadjs-key](nodes/spreadjs-key.md) | GrapeCity SpreadJS license key per app URL, served to the SPA by GET /v1/spread_js/key. | 2 | 1 | entity, config |
| [contact-log](nodes/contact-log.md) | UK marker-monitoring contact record - a phone call, message or (automated) email to a marker about their progress in a section, with outcome. | 1 | 3 | entity, email, uk |
| [hist-agreement-stat](nodes/hist-agreement-stat.md) | Imported prior-year (historical) agreement statistics per item and trait, used by the NAEP trend report; hist_score_point_stat is its score-point sibling. | 1 | 3 | entity, qc, trend |

## module (71)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [scoring-service](nodes/scoring-service.md) | src/services/scoring - get-next delivery (lock/reserve a response or QC response for a scorer), score submission and the response state machine, buffered scores, rescore requests, score resets, flagging and UK allocation gating. | 59 | 26 | module, scoring, core |
| [iea-integration](nodes/iea-integration.md) | OSCAR's IEA integration - services/iea (IEA client, tenant/project/item/TOD/smart-sort sync, score requests, human-score passback), the ieaqueue outbound event queue, the /iea/v1 callback handlers and the /v1/admin/iea admin handlers. | 37 | 25 | module, ai-scoring, iea |
| [training](nodes/training.md) | Scorer training service - courses, per-user progress, SCORM packages and their S3/CloudFront delivery, time tracking, expiry, and the training gate that blocks scoring until required courses are complete. | 27 | 23 | module, training |
| [trend-qc](nodes/trend-qc.md) | Trend scoring (NAEP-style) covering interspersed-trend delivery and submit, trend item config, m-session lifecycle sweepers and m-session score resets. | 27 | 17 | module, qc, trend |
| [auth](nodes/auth.md) | Browser authentication - password and SAML login, MFA gate, session issue/validation (AuthRequired), logout and idle sweep, password reset, superuser login-as and proxy login, tenant switching, login rate limiting. | 26 | 14 | module, auth, platform-auth |
| [score-export](nodes/score-export.md) | Outbound score delivery - builds ExtScorePayload (scores, final_score, flags, meta incl. scoredResponseText) for a completed response and POSTs it to the response's callback_url or the item's export endpoint via a driver (default/GMAC/Cognia/Pearson/basic, Scorpion, PAN, recombine, batch). | 26 | 17 | module, export, external, integration |
| [allocation-service](nodes/allocation-service.md) | UK allocations - AllocationService (CRUD for uk_user/item_allocation + logs), CalculateAllocationService (familiarisation/standardisation resets, initial and late-joiner allocation, capping) and ManageAllocationsService (supervisor lock/unlock/cap/uncap/bulk CSV). | 25 | 13 | module, allocation, uk |
| [reporting-caches](nodes/reporting-caches.md) | Background builders of report caches - completion cache (sweeper + responses change stream), DSM and SLA caches (cron), nightly scorer-report cache, and the report-queue driven half-hour caches for Item Summary. | 24 | 17 | module, reporting, cache, async |
| [oscar-client](nodes/oscar-client.md) | Vue 3 SPA (client/, Vue 3 in @vue/compat MODE 2, Vite, hash router) for scorers, supervisors and admins; bootstraps axios/auth plumbing, global components, i18n and the route guard, and talks to oscar-server only over /v1 REST plus one socket.io channel. | 22 | 21 | ui, shell |
| [resolution-rules](nodes/resolution-rules.md) | Resolution and final-score rules - picks a ResolutionRule by item/res-group type to decide if first+second scores need a third read, final-score rules (weighted sum etc.) used at export, and ResGroupService for resolution groups. | 21 | 5 | module, scoring, resolution |
| [tenant-config](nodes/tenant-config.md) | Tenant/account administration - create and configure clients (tenants), edit role definitions with escalation guards, teams, projects, credentials, tenant import/export, plus cached client/team/project lookups used on every request. | 21 | 14 | module, tenant, platform-auth |
| [compensation](nodes/compensation.md) | services/compensation plus the P-Comp async jobs - builds the daily scorer-pay extract (units, times, agreement per scorer x item x day), caches it in compensation_export_data and uploads it as CSV to S3; also serves payroll data for Pearson-comp clients. | 20 | 14 | module, compensation, payroll, async |
| [external-ingest](nodes/external-ingest.md) | src/external ExternalAPI - the machine-to-machine side of OSCAR - token auth, response ingest (POST/PUT/PATCH, invalidate, metadata, delete, text), external score import, QC response import, appeals, tenant config (items, rubrics, sections, overlays, resources, IEA config, users) and the unauthenticated loopback score receivers. | 20 | 16 | module, external, ingest, api |
| [scorer-lockout](nodes/scorer-lockout.md) | Scorer lockout and deactivation helpers plus ExceptionService (frequency-distribution and scoring-rate exceptions) that write lockout-stats, flip user activity and email supervisors. | 20 | 8 | module, qc, lockout |
| [observation](nodes/observation.md) | Observation-exam scoring - sites, forms, candidate schedules (bookings), live rating sessions, scores, and the outbound score export back to the client's booking system. | 19 | 20 | module, observation |
| [qc-service](nodes/qc-service.md) | Core QC service (package qc, QcService) for set/response/true-score CRUD, practice/RF/trend-training delivery and submit, agreement reports, admin overrides and CSV/portfolio import. | 18 | 23 | module, qc |
| [qualification-service](nodes/qualification-service.md) | Qualification gating (QualificationService) where scorers must pass qualification qc-sets, judged per set and by cross-set requirements, before getting operational work on an item. | 18 | 9 | module, qc, qualification |
| [irr-watcher](nodes/irr-watcher.md) | Dedicated process mode (SERVER_MODE=watcher) that tails a MongoDB change stream on responses and, every 500 ms, rebuilds irr_comparisons for changed responses and enqueues half-hour report buckets. | 17 | 8 | module, background, qc, irr |
| [calibration-service](nodes/calibration-service.md) | Calibration (CalibrationService) delivers calibration qc-sets automatically after a validity failure or manually to users/teams, judges them and locks or unlocks the scorer. | 16 | 8 | module, qc, calibration |
| [client-route-guard](nodes/client-route-guard.md) | vue-router beforeEach guard in client/src/router/index.js that loads the user (GET /v1/auth), enforces lockdown-browser roles, sets locale/theme, and allows a route only if the user's role has the boolean permission mapped to that route path (userPermissions), or the path is global/external. | 16 | 3 | ui, auth, permissions |
| [outbound-score-drivers](nodes/outbound-score-drivers.md) | The OutboundDriver implementations in src/external that deliver a response's ExtScorePayload to its host - default HTTP (all auth types), batch, Scorpion, recombine (internal), observation, plus the dead BestTraitScore driver. | 16 | 5 | module, score-export |
| [peacs-sync](nodes/peacs-sync.md) | PEACS integration - daily job that imports hired applicants from PEACS vacancy statuses as OSCAR users (role by Fusion job role), plus the scorer self-service routes for PEACS assignments and personal details. | 16 | 9 | module, integration, users, async |
| [reporting-service](nodes/reporting-service.md) | services/reporting - ReportingService, the on-demand aggregations behind every report and dashboard (completion, scorers, payroll, daily, DSM, SLA, quotas, item summary, agreement, burndown, validity, LID status, attendance). | 15 | 27 | module, reporting |
| [scheduling](nodes/scheduling.md) | Scorer shift/availability calendar - schedules, per-day staffing configs, change tracking, and the email sweepers for change notices, reminders, late-cancellation alerts and sign-up requests. | 15 | 13 | module, scheduling |
| [validity-service](nodes/validity-service.md) | Validity checks (ValidityService) that randomly or on schedule intersperse validity qc-responses into live scoring, judge the answers and lock or recalibrate failing scorers. | 15 | 11 | module, qc, validity |
| [video-meetings](nodes/video-meetings.md) | In-app video meetings on Amazon Chime SDK - meeting/room management REST, socket.io chat/admin channel, valkey cross-server fan-out, Chime SQS event processing, attendance and usage reporting. | 15 | 14 | module, video |
| [external-api-auth](nodes/external-api-auth.md) | Machine-to-machine auth for the external API - authorize.AuthorizeRequest (X-Auth-Token or HTTP Basic against auth_accounts), token issue at /v1/auth/token and /iea/v1/auth, per-tenant scoping via CanAccessClient, and auth_requests audit logging. | 14 | 6 | module, auth, external-api, platform-auth |
| [qc-rules](nodes/qc-rules.md) | QC agreement rule engine (package qcrules) judging a scorer's qc-scores against true scores; plus models.CompareByTrait for operational score pairs. | 13 | 4 | module, qc, agreement |
| [scorer-messaging](nodes/scorer-messaging.md) | In-app communication between scorers and supervisors - internal mail (with response/rescore/flag hand-off and optional external email) and the role-targeted bulletin board. | 13 | 12 | module, messaging |
| [copyleaks-service](nodes/copyleaks-service.md) | services/copyleaks - submits response media to Copyleaks, handles its status/report webhooks, stores per-media results on the response and withholds (flags) responses over the item's similarity threshold. | 12 | 8 | module, plagiarism |
| [emma-service](nodes/emma-service.md) | services/emma - EMMA ML scoring worker (score, rescore, model-status sync, training sync, ad-hoc push/train/deploy) and free-score for QC responses. | 12 | 9 | module, ai-scoring |
| [scoring-drivers](nodes/scoring-drivers.md) | Strategy objects in client/src/services/ScoringDrivers/ that tell the response viewer, per scoring mode, which endpoint fetches the next response, which submits the score, and which UI affordances apply (sidebar type, escalation, partial scores). | 12 | 4 | ui, scoring |
| [email-delivery](nodes/email-delivery.md) | Outbound email plumbing - SendGrid client (primary), legacy Postmark client, emailutil wrapper with UK marker-chase templates, and the Go html/template files in src/template. | 11 | 3 | module, email |
| [oscar-server](nodes/oscar-server.md) | The Go monolith (main.go, gin) - boots config, Mongo, Valkey, migrations, background jobs; installs the global middleware chain; registers ~60 API groups via apis.BindAll; serves the built Vue SPA from client/dist; can run in frontend, backend, watcher or one-shot DB-update mode. | 11 | 8 | module, server, platform-auth |
| [scheduled-reports](nodes/scheduled-reports.md) | Cron and loop jobs that generate client-specific reports and push them out by email (SendGrid/Postmark), S3 or SFTP - PTE/ACT aging, NBPTS status, Colorado split scores, cumulative appeal emails, user email-change report, ACT frequency extract, executive dashboard stats. | 11 | 17 | module, reporting, async, email |
| [work-queue-service](nodes/work-queue-service.md) | WorkQueueService - CRUD for work_queues records keyed by WorkQueueScope, with a coded-but-disabled Valkey backend and circuit breaker. | 11 | 4 | module, scoring, delivery |
| [crase-service](nodes/crase-service.md) | services/crase - CRASE sweeper worker; for each crase_config-enabled item scores unscored, unflagged responses through the CRASE API as the item's system user, or flags condition codes. | 10 | 8 | module, ai-scoring |
| [admin-tasks](nodes/admin-tasks.md) | Superuser back-office tools - platform stats, API auth-account provisioning, portal-admin/superadmin grants, superuser-only tenant options (comp, IEA, video, Altus, PEACS, MFA, previewer), Mongo profiler, Valkey inspection, ALB logs, perf-test setup, response search, user export. | 9 | 9 | module, admin, platform-auth |
| [response-service](nodes/response-service.md) | ResponseService - response-level operations outside the scoring loop - reliability (second-read) selection, unlock, invalidate/uninvalidate, appeal request, ref-id change, metadata update, blank detection, res-group rand sync, scorer-uniqueness exclusions, IRR comparison cache. | 9 | 3 | module, scoring, response |
| [user-admin](nodes/user-admin.md) | User administration and identity sync - create/save/import/export/archive users, tenant membership and role assignment, team membership, profile/password, PEACS user import, and the IES (Pearson OpenIDM) sync queue. | 9 | 12 | module, users, platform-auth |
| [async-jobs](nodes/async-jobs.md) | src/async Start() - launches every background sweeper goroutine and robfig/cron job, applies the SUPPRESS_BACKGROUND_PROCESSES / SERVER_MODE gates and property flags; also hosts the score-reset and m-session-reset sweep loops. | 8 | 9 | module, async, jobs |
| [previewer-service](nodes/previewer-service.md) | services/previewer_service.go plus apis/previewer_api.go - Previewer client and the admin import that creates OSCAR items/rubrics (and IEA TOD items) from a Previewer item set. | 8 | 6 | module, content |
| [writeshift-service](nodes/writeshift-service.md) | services/writeshift - Writeshift sweeper worker; scores a percentage of each enabled item's responses through Writeshift, and on error flags or reroutes the response to another section/item. | 8 | 7 | module, ai-scoring |
| [export-services](nodes/export-services.md) | src/services/export - auth helpers for score-export receivers (GMAC, Cognia, Pearson OAuth, AuthRetryClient token cache), the auto-export of appeals, the NBPTS status report, and a dead TII CSV exporter. | 7 | 7 | module, export, auth |
| [field-test-sampling](nodes/field-test-sampling.md) | Field-test sampling for a project - activate a random (general) or identifier-targeted sample of inert responses per section/item, marking a subset for reliability, as a tracked progress job. | 7 | 4 | module, field-test |
| [migrations](nodes/migrations.md) | One-time Go data migrations registered in src/migrations, run at boot on the DBUPDATE_FLAG build job (or locally) under a scan lock, tracked in migration_records; plus the oscar-migrate CLI to check/run/test one ahead of deploy and ad-hoc scripts in database/. | 7 | 4 | module, migrations, platform-auth |
| [upload-service](nodes/upload-service.md) | src/services/upload - admin uploads of responses (CSV rows, single/multi files, zipped content packages to S3) and QC/rangefinding/trend CSVs into a section+item. | 7 | 4 | module, ingest, upload |
| [item-service](nodes/item-service.md) | ItemService and RubricService - cached (Valkey + local) reads of items and rubrics, item save/copy/delete, rubric save/delete, resolution and reliability recalculation. | 6 | 11 | module, config, scoring |
| [learnosity-service](nodes/learnosity-service.md) | services/learnosity - LearnositySweeper worker that pulls completed session responses from the Learnosity Data API into OSCAR responses for items with learnosity_config.sync_enabled. | 6 | 6 | module, learnosity |
| [progress-jobs](nodes/progress-jobs.md) | utils.ProgressJob plus its polling route - the pattern long admin HTTP actions use to run in a goroutine and report progress; also the client_update_jobs tracker for response-uniqueness rebuilds. | 6 | 3 | module, job, async |
| [response-auditing](nodes/response-auditing.md) | Response/score/candidate auditing - builds Mongo queries from audit selections and applies admin batch actions (reset, delete, invalidate, move, label, prioritise, export, escalate, assign) to the selected responses; queues score reset jobs. | 6 | 11 | module, auditing |
| [user-qc-stat-service](nodes/user-qc-stat-service.md) | Cached read/write layer for user-qc-stats (valkey and singleflight, 5 min TTL, not-found cached) keyed by overall vs per-set composite keys. | 6 | 5 | module, qc, cache |
| [activity-tracking](nodes/activity-tracking.md) | User activity logging - login/logout session logs, client-reported scoring activity, per-user activity timelines and the supervisor "who is active now" view. | 5 | 5 | module, activity |
| [response-media-renderer](nodes/response-media-renderer.md) | Client code that turns a response's media list into viewable pages (PDF, image, text/HTML, audio, video, Excel/CSV, Learnosity, Iris, Cognia, Brightcove, download) using signed URLs from the server; also annotations, overlays, tick marks and print. | 5 | 5 | ui, media |
| [respqueue](nodes/respqueue.md) | src/respqueue - the Mongo-backed outbound score queue API (QueueOutgoingResponse, GetMessage, Ack/Reject/RecordError, batch variants) plus the observation score queue. | 5 | 5 | module, export, queue |
| [backreading-service](nodes/backreading-service.md) | Backreading - supervisors re-read a sample of their team's scored responses; QueueBRService builds the backread stats/queue pipelines and per-scorer targets, TeamBRService the team backread view. | 4 | 4 | module, scoring, backreading |
| [media-service](nodes/media-service.md) | services/media plus apis/media_api.go - signs and proxies response media for the scoring UI (S3 CloudFront, RMS, IRIS, Previewer, Learnosity, Copyleaks reports), prints responses and copies external media into S3. | 4 | 8 | module, media |
| [client-api-services](nodes/client-api-services.md) | The client's HTTP layer, client/src/services/*Service.js, ~60 plain-object modules that wrap axios calls to /v1/* (one per backend area) plus non-HTTP helpers (Format, File, Notie, Modal, Timeout, Theme, Store). | 3 | 2 | ui, http |
| [qc-csv-wasm](nodes/qc-csv-wasm.md) | The client's only WebAssembly module - a Rust crate (wasm-bindgen, csv crate) compiled to wasm_utils_bg.wasm that parses and validates QC import CSVs in the browser (section/item ref ids present, no blank trait scores), with a JS fallback. | 3 | 1 | ui, wasm, qc |
| [chatbot](nodes/chatbot.md) | Help chatbot backed by an Amazon Lex V2 bot - start a session and relay user messages, returning the bot's text replies. | 2 | 3 | module, chatbot |
| [image-tools](nodes/image-tools.md) | Image handling - the /v1/image upload route (rich-text images to S3) and the legacy src/image TIFF-to-JPEG batch CLIs for scanned paper responses. | 2 | 3 | module, image |
| [init-data](nodes/init-data.md) | db_utils.CheckNewEnv - on startup, if the users collection is empty, seeds a default account, client, project, section, item, rubric, teams, an admin user and scorer users (fixed bcrypt password hash). | 2 | 5 | module, infra, seed |
| [quick-scripts](nodes/quick-scripts.md) | src/quick - developer/ops scripting toolkit for one-off data fixes - environment bootstrap, ref-id lookups, mock users/ingest, and the ResponseProcessor that iterates responses with concurrency, job tracking, CSV results, S3 upload and email notifications. | 2 | 6 | module, tooling |
| [response-processing-scripts](nodes/response-processing-scripts.md) | src/response_processing/* - one-off `package main` data-fix scripts run by hand against production responses (IEA resend, composite removal, sanitisation fixes, IRR cache rebuilds, reset CF, RMS image-to-text, media size, KT priority). | 2 | 2 | module, ops, legacy |
| [scan-locker](nodes/scan-locker.md) | src/scanlocker - distributed job lock (scan_locks, unique type+key, 1 h TTL) plus last-run throttling (scan_records) used by nearly every background sweeper. | 2 | 3 | module, async, infra |
| [section-service](nodes/section-service.md) | SectionService - cached section reads (full, delivery-light, shallow-with-paper), user/team section access, section CRUD and item/team membership. | 2 | 6 | module, config, scoring |
| [sideserver](nodes/sideserver.md) | Developer tooling (src/sideserver) that cross-compiles OSCAR Go programs and deploys/runs them over SSH/SFTP on the "jobrunner" EC2 box (10.242.44.73) for long one-off processing jobs and A/B comparison runs. | 2 | 1 | module, tooling, platform-auth |
| [externalsender](nodes/externalsender.md) | src/externalsender - a small Go client (OscarSenderService) for OSCAR's own /v1/api (post/put responses, JSON, resources, rubrics, items) against prod/staging/smkdev/local; used only by the mockdb dev tool. | 0 | 1 | module, tooling, external |
| [feedback-service](nodes/feedback-service.md) | services/feedback - resolves a QC or score feedback string; values starting with s3://bucket/path are fetched from S3, anything else is returned as-is. | 0 | 1 | module, qc |
| [interchange](nodes/interchange.md) | src/interchange - pub/sub plumbing - Interchange wraps a MongoDB change stream on a collection (used to watch responses for IRR cache and completion reports); ValkeyInterchange/ValkeyDbInterchange are Valkey pub/sub channels used by video meetings. | 0 | 3 | module, infra, events |
| [simulation-tool](nodes/simulation-tool.md) | src/simulation - a 2016-2020 developer tool (package main) that exported Gateway science/social-studies scores from OSCAR into fixed-width .dat files; ~80 .dat/.csv fixtures; contains hard-coded MongoDB Atlas credentials. | 0 | 5 | module, legacy, tool, security |

## interface (79)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [client-api](nodes/client-api.md) | Browser API for tenant configuration - tenants (clients), roles, teams, projects, field-test sampling, credentials, full/partial tenant import/export, alert codes and RF tags; all AuthRequired with per-handler role checks. | 94 | 7 | interface, api, tenant, platform-auth |
| [admin-tasks-api](nodes/admin-tasks-api.md) | Superuser/ops API - platform stats (/v1/admin_stats), admin tasks (auth accounts, portal admins, superadmin, tenant options, IEA/previewer init, MFA flag, Mongo profiler, Valkey get/set, ALB logs, user export, response search), response-processing job links, perf-testing users and version. | 63 | 4 | interface, api, admin, platform-auth |
| [qc-api](nodes/qc-api.md) | REST route group QcAPI (/v1, AuthRequired) for QC set/response/true-score admin, imports, delivery, qual/validity overrides, QC reports, agreements and NAEP report. | 46 | 15 | interface, api, qc |
| [auditing-api](nodes/auditing-api.md) | REST routes for response, score and candidate auditing - query/sample/export, fetch and rescore, unlock, score reset, reliability, priority, labels, delete/invalidate/move/escalate, export and IEA re-queue, scorer assignment, and score reset jobs. | 43 | 4 | interface, api, auditing |
| [dashboard-api](nodes/dashboard-api.md) | REST routes behind the personal, supervisor, project and tenant dashboards (/v1/dashboard/*) - score volumes, completion, team assignments, section CSV export and queue-for-export, weekly score-time CSVs; also hosts the UK marker-progress routes. | 41 | 5 | interface, api, reporting, dashboard |
| [users-api](nodes/users-api.md) | Browser API for user administration and self-service - list/add/remove users per tenant, save/import/export/archive/activate users, team membership, profile and password change, terms/EULA, PV mode, personal notes, the caller's sections/projects/teams. | 40 | 4 | interface, api, users, platform-auth |
| [section-api](nodes/section-api.md) | Admin section routes under /v1 (session auth) - list/get/save/delete sections, section items and teams, user assignment, UK allocation import and item-allocation view/reset. | 38 | 3 | interface, api, config |
| [item-api](nodes/item-api.md) | Admin item configuration routes under /v1 (session auth) - list/get/save/copy/delete items, bulk update, overlays, IEA item view/reinit, resolution/reliability recalculation, split-item settings. | 35 | 2 | interface, api, config |
| [scoring-api](nodes/scoring-api.md) | Scorer-facing REST routes under /v1 (session auth) - get-next for each read type (score, resolution, adjudication, appeal, backread, review, flags, queue backread), score submit/rescore, QC submits, buffered scores, rescore requests, partial scores, viewer state and score/school-code CSV import. | 35 | 2 | interface, api, scoring |
| [external-api](nodes/external-api.md) | OSCAR's machine API under /v1/api (plus /v1/auth/token) - how AD, ADAM and other delivery systems load responses, scores, appeals and configuration, and read the tenant manifest/items/rubrics; auth is an X-Auth-Token from /v1/auth/token or HTTP Basic against auth_accounts. | 34 | 8 | interface, api, external |
| [auth-api](nodes/auth-api.md) | Browser auth routes - /v1/auth login/me, logout, reset password, login-as/proxy, change tenant, MFA probe, plus SAML SP routes (/saml/*, /identity/saml, /sso) and logout redirects. | 27 | 4 | interface, api, auth, platform-auth |
| [reporting-api](nodes/reporting-api.md) | REST routes for reports - /v1/admin/stat/* and /v1/stat/* (completion, scorers, payroll, daily, DSM, SLA, quotas, item summary, agreement, burndown, ingest predictions, attendance, validity, selection IRR, LID status); each handler checks a role page flag. | 27 | 8 | interface, api, reporting |
| [response-viewer-ui](nodes/response-viewer-ui.md) | The response viewer, client/src/vues/Scoring/Viewer.vue (~6.7k lines) mounted on 22 routes, one per scoring mode (scoring, resolution, adjudication, appeal, review, backread, flags, audits, rescore, practice/QC, rangefinding, true scores); shows the response media, rubric and score entry and submits through a mode driver. | 26 | 12 | ui, scoring |
| [iea-admin-api](nodes/iea-admin-api.md) | Session-authenticated /v1/admin/iea routes behind the IEA admin screens - pretrained/TOD item listing, TOD modeling file creation and job submission, IEA projects, ABBI lookups, test-response cleanup and QC true-score passback. | 24 | 2 | api, iea, admin |
| [mail-api](nodes/mail-api.md) | REST routes for the in-app mailbox - counts, unread, folders, save/send, delete draft, view/trash/archive/label, and opening the referenced response or rescore. | 22 | 2 | interface, api, messaging |
| [manage-allocations-api](nodes/manage-allocations-api.md) | UK Manage Allocations routes under /v1/manage_allocations (session auth, PageManageAllocations) - papers, markers, roles, per-marker item allocations, lock/unlock/cap/uncap/update, targeted calibration, CSV bulk update, contract data. | 22 | 2 | interface, api, allocation, uk |
| [training-api](nodes/training-api.md) | REST routes for scorer training - my courses/progress/SCORM runtime, and admin course, completion, SCORM package and SCORM location management. | 22 | 6 | interface, api, training |
| [observation-api](nodes/observation-api.md) | REST routes for observation exams - my sites/forms/schedules, sessions (save, check-in, score, complete, no-shows), and admin site/form/schedule management. | 21 | 9 | interface, api, observation |
| [qc-ui](nodes/qc-ui.md) | Quality-control screens - QC set setup per item and type (practice, qualification, validity, calibration, exemplar, trend), assigning responses and true scores to sets, CSV import (WASM-validated), QC reporting/agreement with deliver/reset/override actions, scorer QC portfolio and set reports, exemplar viewing, and the printable/shareable QC set document. | 20 | 9 | ui, qc |
| [reporting-ui](nodes/reporting-ui.md) | Quality-management reports and planning screens - completion, scorers, payroll (+incentives), daily, daily scoring mgmt, quotas, user/item summary, user/backread/project agreement, training completion, SLA, validity, LID status, NAEP, burndown, project forecast and the scheduling calendar; most export CSV/PDF client-side. | 17 | 12 | ui, reporting |
| [trend-api](nodes/trend-api.md) | REST route group TrendAPI (/v1, AuthRequired) for trend item setup, m-session open/close/reset jobs and trend response lookup. | 17 | 7 | interface, api, qc, trend |
| [scoring-ui](nodes/scoring-ui.md) | Scorer work-picker screens - the Scoring page listing the scorer's sections/items with launch buttons per mode (score, resolution, adjudication, appeal, flags, practice/exemplar/RF sets, backread, assigned responses), plus Backreading, assigned-response list and item resource pages. | 16 | 9 | ui, scoring |
| [auditing-ui](nodes/auditing-ui.md) | Auditing screens - response Auditing (query responses, batch delete/reset/invalidate/move/label/prioritise/export/escalate/unprotect/assign), Score Auditing (query scores, queue reset jobs), Candidate Auditing (by candidate), Reset History (approve/execute reset jobs), and the audit viewers. | 13 | 8 | ui, auditing |
| [emma-api](nodes/emma-api.md) | Session-authenticated GET routes that drive EMMA ad-hoc model work for an item (view, push item/responses, train, check status, deploy, reset) - all side effects behind GET with no role check. | 13 | 1 | api, ai-scoring |
| [rubric-api](nodes/rubric-api.md) | Admin rubric routes under /v1 (session auth) - list/get/save/copy/delete rubrics and "is scored / used in res group" checks. | 13 | 2 | interface, api, config |
| [activity-api](nodes/activity-api.md) | REST routes for user activity timelines, current user activity, exception logs, and posting a scoring-activity record. | 12 | 3 | interface, api, activity |
| [login-ui](nodes/login-ui.md) | Sign-in screens - email/password login with MFA-forces-SAML, Pearson SAML SSO hand-off (Oscar-Auth-Token cookie), password reset with reCAPTCHA, proxy-account picker, debug-code impersonation, and the post-login landing decision (portal vs landing). | 12 | 7 | ui, auth |
| [response-upload-api](nodes/response-upload-api.md) | Admin response upload routes under /v1 (session auth, no role check) - CSV of responses, single/multi files, zipped content packages into a section+item. | 12 | 1 | interface, api, ingest |
| [my-training-ui](nodes/my-training-ui.md) | Scorer-side training - the My Training course list with priority/ordering rules, SCORM player (SCORM 2004 API bridge in an iframe), training resources, and links into training practice/QC viewers. | 11 | 4 | ui, training |
| [res-group-api](nodes/res-group-api.md) | Admin resolution-group routes under /v1 (session auth) - list/get/save/delete groups, combined rubric preview and score-pair simulation. | 11 | 2 | interface, api, config, resolution |
| [item-config-ui](nodes/item-config-ui.md) | Item Config screens (/items, /items/:id, /config_sheets/:id): list/copy/delete items, import from Previewer, and edit an item across ten tabs (details, scoring setup, quality, quotas, resources, flags, viewer controls, integrations, Copyleaks, split); bulk-edit items via config sheets. | 10 | 14 | ui, admin, item, config |
| [api-logs-api](nodes/api-logs-api.md) | Read routes for the API Logs pages (/v1/api_logs/*) - outbound score-export attempts, observation score exports and loopback receipts, paged and filtered; login is the only server-side check. | 9 | 2 | interface, api, export, audit |
| [exception-api](nodes/exception-api.md) | REST route group ExceptionAPI (/v1, AuthRequired, page_supervisor_dashboard) returning a user's scoring exceptions and current lockout reason. | 9 | 3 | interface, api, qc, lockout |
| [iea-callback-api](nodes/iea-callback-api.md) | Routes IEA calls on OSCAR - /iea/v1 outcome, LID outcome, score-priority and workflow-state callbacks, and /v1/api/iea tenant/item reads; token-authenticated via auth_accounts. | 9 | 4 | api, iea, callback |
| [tenant-config-ui](nodes/tenant-config-ui.md) | Tenant Config screens (/tenants, /tenants/:id, /tenant): list/create/delete tenants (clients), edit tenant setup, flag codes, metadata, integration credentials, user import, role setup, config sheets, full/partial tenant import-export. | 9 | 8 | ui, admin, tenant, config |
| [trend-ui](nodes/trend-ui.md) | Trend scoring admin screens - per-item trend rates and monitoring-session (M-session) sizing/approval, M-session detail with close/reopen/reset jobs, trend training set matrices, and loading historical trend responses/scores. | 9 | 3 | ui, qc, trend |
| [dashboards-ui](nodes/dashboards-ui.md) | Dashboard screens - scorer Dashboard (personal stats, QC results, training, mail, activity), Supervisor Dashboard (team assignments, live activity, weekly volume, lockouts), Project and Tenant dashboards. | 8 | 6 | ui, dashboard |
| [marker-allocation-ui](nodes/marker-allocation-ui.md) | UK marking screens: Manage Allocations (/manage_allocations), Marker Progress (/marker_progress) and My Marking Progress (/my_marking_progress): per-marker item allocations, caps, locks, targeted calibration, contact logs and progress emails. | 8 | 8 | ui, uk, allocation, marking |
| [observation-ui](nodes/observation-ui.md) | Classroom/skills observation screens - observation session list with check-in, the Observe scoring screen (per-candidate section scores, no-shows, completion), and setup of observation forms (with audio); scores can be re-exported per schedule. | 8 | 4 | ui, observation |
| [previewer-api](nodes/previewer-api.md) | Session-authenticated /v1/admin/previewer routes for browsing Previewer tenants, items and testmaps and importing an item set into OSCAR; gated by page_config_items. | 8 | 2 | api, content, admin |
| [rangefinding-ui](nodes/rangefinding-ui.md) | Rangefinding screens - RF set setup and response assignment, RF reporting with tags and true-score decisions, per-response RF report and per-user RF set report; scorers score RF sets in the viewer (RANGEFINDING mode). | 8 | 4 | ui, qc, rangefinding |
| [schedule-api](nodes/schedule-api.md) | REST routes for the scorer schedule calendar - own schedules, all schedules (supervisor), per-day schedule configs, and the finish-scheduling flush trigger. | 8 | 4 | interface, api, scheduling |
| [training-admin-ui](nodes/training-admin-ui.md) | Training course authoring - course list, course editor (details, elements, linked sections/items, resource and SCORM uploads) and the SCORM pool of external SCORM locations/packages. | 8 | 4 | ui, training |
| [video-meeting-api](nodes/video-meeting-api.md) | REST routes for video meetings - list/get/join/leave, rooms, attendees, capabilities, chat history, transcripts; an anonymous (password) route group; and an unauthenticated feedback endpoint. | 8 | 4 | interface, api, video |
| [copyleaks-webhook-api](nodes/copyleaks-webhook-api.md) | Unauthenticated Copyleaks webhook receivers (/v1/api/copyleaks_status/:status/:responseID and /v1/api/copyleaks_report/complete/:scanID) validated only by a shared token in developerPayload. | 7 | 1 | api, webhook, plagiarism |
| [flagging-api](nodes/flagging-api.md) | Flag (alert/withhold) routes - raise a flag (optionally with a score), update, mark reviewed, release from FLAGGED, delete. | 7 | 1 | interface, api, scoring, flags |
| [image-api](nodes/image-api.md) | Image upload route (POST /v1/image -> S3 signed URL), an unimplemented delete, and a dev2-only delayed-file test route. | 7 | 0 | interface, api, image |
| [incentive-api](nodes/incentive-api.md) | Scorer incentive targets per item (distributed/sync/validity targets and a maximum) - payroll admins set them, scorers see their own incentive progress while scoring. | 7 | 3 | interface, api, reporting, payroll |
| [mail-ui](nodes/mail-ui.md) | In-app mail screen (/mail) for scorer-supervisor messaging - inbox/sent/drafts/archive/trash, labels, important flag, draft autosave, and rescore-request mails that open the response in the rescore viewer. | 7 | 1 | ui, messaging |
| [progress-job-api](nodes/progress-job-api.md) | GET /v1/job_progress/:jobID - poll a progress-job; 206 while running (progress or update list), 200 with result when done, 500 on error. | 7 | 1 | interface, api, job |
| [media-api](nodes/media-api.md) | Session-authenticated /v1 media routes the scoring UI uses to print, sign, proxy and render response media (S3, RMS, IRIS, Learnosity, Copyleaks report, SCORM), plus the unauthenticated content-package redirect. | 6 | 2 | api, media |
| [resource-api](nodes/resource-api.md) | Item and training resources (reference documents, HTML content packages) - upload to S3, signed URL or CloudFront signing cookies to view them, remove from an item. | 6 | 5 | interface, api, config, training |
| [account-api](nodes/account-api.md) | Browser API for accounts and the scorer portal - the caller's accounts with their tenants, last-visited tenant, and portal holiday/payday calendars (portal_admin to edit). | 5 | 2 | interface, api, tenant, platform-auth |
| [backreading-api](nodes/backreading-api.md) | Backreading routes under /v1 (session auth) - my team, team backread query, backreading stats, individual backread targets. | 5 | 1 | interface, api, backreading |
| [external-link-api](nodes/external-link-api.md) | Public short-link API - create a link-invite (logged in) and resolve/fetch it without auth (/v1/external_link/:linkID, /v1/external_link_data/:linkID). | 5 | 3 | interface, api, sharing, platform-auth |
| [profile-ui](nodes/profile-ui.md) | The user's own profile (POST /v1/profile; UK PEACS personal details) and the My Schedule page where scorers enter availability days per project. | 5 | 5 | ui, profile |
| [video-meeting-ui](nodes/video-meeting-ui.md) | Built-in video meetings for scorer training/standardisation - meeting calendar, pre-call device check, in-call video (Amazon Chime SDK) with breakout rooms, participant capabilities and chat/presence over a socket.io websocket, post-call feedback; includes an anonymous password join link. | 5 | 6 | ui, video |
| [video-meeting-ws](nodes/video-meeting-ws.md) | socket.io endpoint (/ws/video_meeting/*) for meeting chat, hand raise, screenshare, emoji and admin actions; auth by session secondary token or meeting password. | 5 | 2 | interface, websocket, video |
| [bulletin-api](nodes/bulletin-api.md) | REST routes for the bulletin board - list (role-filtered), save, delete. | 4 | 2 | interface, api, messaging |
| [ops-tasks-api](nodes/ops-tasks-api.md) | POST /v1/ops_tasks/priority_update - operations-management bulk re-prioritisation of open responses in a project/section/item that match a meta key/value, run as a progress job. | 4 | 3 | interface, api, ops |
| [peacs-api](nodes/peacs-api.md) | Scorer self-service routes for PEACS - view assignments, view and update own personal details (/v1/my/peacs/*), proxied to the PEACS applicant API by the caller's email. | 4 | 1 | interface, api, peacs |
| [priority-update-ui](nodes/priority-update-ui.md) | Priority Update screen (/priority_update, OpsMgmt): set scoring priority for all responses in a project/section/item that match a metadata key/value. | 4 | 5 | ui, ops, priority |
| [section-config-ui](nodes/section-config-ui.md) | Section Config screens (/sections, /sections/:id): list/delete sections, import allocations, edit section details, item membership and order, team assignment and UK per-item allocations. | 4 | 8 | ui, admin, section, config |
| [user-team-mgmt-ui](nodes/user-team-mgmt-ui.md) | User Config and Team Config screens (/users, /users/:id, /teams, /teams/:id): list, import/export, edit, delete users and log in as a user (superuser); create teams and manage team membership. | 4 | 8 | ui, admin, users, teams |
| [api-logs-ui](nodes/api-logs-ui.md) | API Logs screens (/api_logs/loopback, /api_logs/incoming, /api_logs/outgoing, /api_logs/observation/outgoing): paged, filterable logs of exported score messages, loopback messages and observation score exports. | 3 | 3 | ui, admin, export, logs |
| [chatbot-ui](nodes/chatbot-ui.md) | Chat assistant panel (vues/Chatbot/components/Chat.vue + ChatMessage.vue) that was meant to sit on the Scorer Portal; its only usage in Portal.vue is commented out, so nothing renders it. | 3 | 1 | ui, dead |
| [export-api](nodes/export-api.md) | CSV download routes /v1/admin/export/* - scores for one section/item, all scores grouped by rubric (zip), audit-query results and QC sets; login is the only check. | 3 | 7 | interface, api, export |
| [iea-tod-ui](nodes/iea-tod-ui.md) | IEA Item Models screens (/iea_tod_items, /iea_tod_items/:tenantId/:projectId/:itemId): per-item IEA train-on-demand (TOD) state, modeling snapshots and sending modeling requests. | 3 | 3 | ui, admin, iea, ai |
| [internal-api](nodes/internal-api.md) | Unauthenticated plain net/http server on localhost:8546 started in init() - operations/executive/profiler stats for local sidecars, plus broken CAS response endpoints that use the uninitialised ProdDB. | 3 | 1 | interface, api, internal, platform-auth |
| [learnosity-api](nodes/learnosity-api.md) | Unauthenticated demo routes GET/POST /v1/assess that render assess.html and return a Learnosity Items API request signed with the global consumer secret. | 3 | 0 | api, learnosity, legacy |
| [observation-sites-ui](nodes/observation-sites-ui.md) | Observation Site Config (/sites, /sites/:id): list/create/delete observation sites and manage which users belong to a site. | 3 | 4 | ui, admin, observation |
| [res-group-config-ui](nodes/res-group-config-ui.md) | Resolution Groups screens (/resolution_groups, /resolution_groups/:id): define groups of section items that resolve together, with combined rubric, score/weight difference thresholds and a score-pair simulator. | 3 | 5 | ui, admin, resolution, config |
| [roles-ui](nodes/roles-ui.md) | Roles Edit screen (/roles): create, clone, delete and edit tenant roles: access level, theme and ~170 boolean permission keys grouped in tabs; the editor for every client-side permission check in OSCAR. | 3 | 5 | ui, admin, permissions, roles |
| [admin-tasks-ui](nodes/admin-tasks-ui.md) | Superuser console (/admin_tasks, /admin_stats, /alb_logs, /response_processing_job/:jobID): cross-tenant stats, tenant options, IEA/Previewer initialisation, auth accounts, portal admins, bucket/Valkey/Mongo tests, perf-test setup; can target another environment by sending a Mongo connection string. | 2 | 4 | ui, admin, superuser, ops |
| [chatbot-api](nodes/chatbot-api.md) | Two authenticated routes to start a Lex chatbot session and send it a message. | 2 | 0 | interface, api, chatbot |
| [portal-landing-ui](nodes/portal-landing-ui.md) | Post-login entry screens - the account-level Scorer Portal (tenant tiles, account calendar of holidays/paydays, PEACS assignments), account picker, plain Landing page, no-clients and invalid-link pages, and the Bulletin Board. | 2 | 6 | ui, landing |
| [project-config-ui](nodes/project-config-ui.md) | Project Config screens (/projects, /projects/:id): list/create/delete projects and edit details, scheduling, scoring availability, backreading, ref-id aliases, IEA config and field-test sampling. | 2 | 5 | ui, admin, project, config |
| [oscar-migrate-cli](nodes/oscar-migrate-cli.md) | Developer CLI (src/oscar-migrate) to check, run, force-run or sandbox-test a single registered data migration against local, staging, prod or UK. | 1 | 0 | interface, cli, platform-auth |
| [rubric-config-ui](nodes/rubric-config-ui.md) | Rubric Config screens (/rubrics, /rubrics/:id): list/copy/delete rubrics and edit numeric and text traits, score point descriptors, annotation tags, standard feedback and checklist settings. | 1 | 8 | ui, admin, rubric, config |

## integration (29)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [aws-s3](nodes/aws-s3.md) | Amazon S3 via src/s3 S3Service - OSCAR's file store (GENERAL_BUCKET for media, images, audio prompts, reports, recordings; SCORM/content packages served through a cookie-restricted CloudFront). | 16 | 1 | integration, aws, storage |
| [pearson-iam](nodes/pearson-iam.md) | Pearson identity platform (ForgeRock "IES") - the SAML 2.0 IdP at iam(-stage).pearson.com that handles SSO and MFA for OSCAR logins, and the OpenIDM REST API OSCAR uses to create/update identities, passwords and MFA flags. | 16 | 0 | integration, identity, platform-auth |
| [iea](nodes/iea.md) | Pearson Intelligent Essay Assessor (IEA, a.k.a. Continuous Flow / CF / KT scoring services) - the AI scoring engine OSCAR sends responses to and receives machine scores, LID alerts and smart-sort codes from. | 14 | 2 | integration, ai-scoring, iea |
| [score-callback-endpoint](nodes/score-callback-endpoint.md) | The configurable host callback that receives OSCAR scores (AD, adam, PASS, GMAC, Cognia, PSI, Accuplacer…) - POST ExtScorePayload JSON to the response's callback_url or the item's export endpoint, with per-type auth. | 13 | 0 | integration, score-export, cross-app |
| [sendgrid](nodes/sendgrid.md) | Twilio SendGrid v3 mail API - OSCAR's main outbound email provider. | 13 | 1 | integration, email |
| [aws-chime](nodes/aws-chime.md) | Amazon Chime SDK (meetings + media pipelines) used for OSCAR video meetings; AWS default credential chain, events via SQS. | 6 | 1 | integration, aws, video |
| [copyleaks](nodes/copyleaks.md) | Copyleaks plagiarism-detection API - OSCAR submits response media for scanning and receives status, completion and PDF-report webhooks. | 6 | 2 | integration, plagiarism |
| [observation-score-endpoint](nodes/observation-score-endpoint.md) | A client's external booking/results system that sends observation bookings into OSCAR and receives completed observation scores (per-client URL + basic auth). | 6 | 1 | integration, observation |
| [cambium-iris](nodes/cambium-iris.md) | Cambium IRIS item/response renderer - OSCAR fetches an AES content key and mints encrypted JWTs so the scoring UI can iframe IRIS-rendered responses. | 5 | 2 | integration, media |
| [peacs](nodes/peacs.md) | PEACS - Pearson's scorer recruiting/applicant system (JSON API, basic auth); OSCAR reads vacancy/applicant statuses to create users and proxies scorer profile reads/updates. | 5 | 1 | integration, users |
| [spreadjs](nodes/spreadjs.md) | GrapeCity/MESCIUS SpreadJS spreadsheet library (licensed, self-hosted under /static/js) used for in-browser Excel rendering and config sheets; license keys are hard-coded per hostname. | 5 | 0 | ui, integration, license |
| [testnav](nodes/testnav.md) | Pearson TestNav app (lockdown/kiosk browser) - OSCAR detects it via window.TestNavApp.Api to enforce roles with require_lockdown and to switch kiosk mode on/off. | 5 | 0 | ui, integration, security |
| [caveon-scorpion](nodes/caveon-scorpion.md) | Caveon Scorpion exam platform - score-export target; OSCAR PUTs item-response scores to scorpion.caveon.com with basic auth (export endpoint type 4). | 4 | 1 | integration, score-export |
| [crase](nodes/crase.md) | CRASE automated scoring API behind AWS API Gateway (SigV4 execute-api us-east-1), polled by the CRASE sweeper for items with crase_config.enabled. | 4 | 2 | integration, ai-scoring |
| [pearson-previewer](nodes/pearson-previewer.md) | Pearson Previewer (TestNav item previewer, ePEN API) - source of QTI item XML, rubrics, testmaps and rendered content packages; authenticated per client with a token/secret ticket. | 4 | 2 | integration, content |
| [postmark](nodes/postmark.md) | Postmark email API - legacy provider superseded by SendGrid; still used only for the Colorado split-score report email. | 4 | 1 | integration, email |
| [act-sftp](nodes/act-sftp.md) | ACT's SFTP server that receives the nightly ACT writing frequency-distribution extract (CSV) from OSCAR. | 3 | 1 | integration, sftp |
| [google-recaptcha](nodes/google-recaptcha.md) | Google reCAPTCHA on the public reset-password request; the server POSTs the token to siteverify but ignores the verdict. | 3 | 0 | integration, security, platform-auth |
| [learnosity](nodes/learnosity.md) | Learnosity assessment platform - OSCAR pulls session responses from the Learnosity Data API into OSCAR responses and signs Items API requests for a demo assess page. | 3 | 3 | integration, learnosity |
| [rms](nodes/rms.md) | RMS (Response Management Services) - Pearson host of student response media (https://rms...); OSCAR gets an authGenToken and rewrites media URLs to authenticated ones. | 3 | 2 | integration, media |
| [splunk](nodes/splunk.md) | Splunk HTTP Event Collector - logrus hook that batches info/warn/error/fatal/panic log entries and flushes every 5 s when SHIP_LOGS and all SPLUNK_* vars are set. | 3 | 0 | integration, logging, platform-auth |
| [writeshift](nodes/writeshift.md) | Writeshift essay-scoring API (api.writeshift.com/essayscore/v1/score) authenticated with clientId/apiKey headers from a per-item credential. | 3 | 1 | integration, ai-scoring |
| [amazon-lex](nodes/amazon-lex.md) | Amazon Lex V2 runtime (lexruntimev2) hosting OSCAR's help chatbot. | 2 | 1 | integration, aws, chatbot |
| [emma](nodes/emma.md) | EMMA - MZ Development's ML scoring service (static_score v1 plus a v2 API for item status, training and deployment), keyed by the Emma-Api-Key header. | 2 | 2 | integration, ai-scoring |
| [erater](nodes/erater.md) | ETS e-rater essay scoring (WAT servlet, XML over HTTPS basic auth) - driver exists but its sweeper is commented out, so nothing calls it. | 2 | 0 | integration, ai-scoring, dead |
| [new-relic](nodes/new-relic.md) | New Relic APM via the nrgin middleware (distributed tracing, code-level metrics) when NEW_RELIC_ENABLED; /anon and /headers excluded. | 2 | 0 | integration, observability, platform-auth |
| [pan](nodes/pan.md) | PAN (Pearson client_type "PAN") score receiver - for responses with meta.client_type=PAN, OSCAR gets an OAuth token from callback_url + /ps/auth with env PAN_CLIENT_ID/SECRET and posts ExtPANScorePayload to /ps/scores instead of the standard payload. | 2 | 0 | integration, export, external |
| [ami](nodes/ami.md) | AMI - an AWS API Gateway scoring endpoint (GCAv1/response) that exists only as curl and JSON fixtures in services/ami; no Go code calls it. | 1 | 0 | integration, ai-scoring, dead |
| [aws-secrets-manager](nodes/aws-secrets-manager.md) | AWS Secrets Manager wrapper (src/secrets_manager GetSecret/SetSecret, us-east-1) that no Go code calls; runtime secrets come from env vars. Only the Jenkinsfile reads Secrets Manager (Snyk token). | 1 | 0 | integration, secrets, platform-auth |

## datastore (2)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [oscar-mongo](nodes/oscar-mongo.md) | The single MongoDB database "<ENV>-<CENTRAL_DB_NAME>" (e.g. v3prod-oscar) holding every tenant's data, separated only by client_id; plus an optional archive DB. Accessed through models.DB/DBC, generic helpers in models/db_generics.go, and src/db_utils. | 107 | 0 | datastore, mongo, platform-auth |
| [valkey](nodes/valkey.md) | Valkey (Redis-compatible, AWS ElastiCache) used as a read-through cache for hot Mongo records (clients, sections, items, rubrics, training, QC stats…), pub/sub interchange between instances, and small FIFO/queue structures; TLS outside dev. | 34 | 0 | datastore, cache, platform-auth |

## event (20)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [auto-deliver-sweeper](nodes/auto-deliver-sweeper.md) | Scan-locked job (every 6 s, flag auto_deliver_sweeper_enabled) that queues COMPLETE, not-yet-exported responses of auto-deliver items onto outbound_queue (immediately or after delay_hours); plus the appeal variant (every 1 min). | 13 | 2 | event, job, export |
| [observation-score-export](nodes/observation-score-export.md) | Mongo-backed queue (observation_outbound_queue) and sweeper that POSTs completed observation scores to the client's booking-system URL with basic auth, logging each attempt. | 12 | 2 | event, queue, observation, export |
| [appeal-request-sweeper](nodes/appeal-request-sweeper.md) | Backend job (every 30 s, scan-locked, flag appeal_request_sweeper_enabled) that applies stored appeal requests to their responses (APPEAL state) and marks them SUCCESS/ERROR. | 10 | 2 | event, job, appeal |
| [outbound-score-sweeper](nodes/outbound-score-sweeper.md) | Background loop on every instance (flag outbound_score_sweeper_enabled) that pops one outbound_queue message at a time and sends the response's scores to the external callback; plus a scan-locked batch variant (flag outbound_score_batch_sweeper_enabled) that is effectively dead. | 10 | 2 | event, job, export |
| [response-ingest-sweeper](nodes/response-ingest-sweeper.md) | Background job (every ~6 s, scan-locked, flag response_ingest_sweeper_enabled) that moves newly loaded responses LOADING → PROCESSING → UNSCORED / RELIABILITY / FLAGGED / COMPLETE after reliability selection. | 9 | 1 | event, job, ingest |
| [chime-sqs-events](nodes/chime-sqs-events.md) | Amazon Chime meeting events (AttendeeJoined/Left/Dropped, AttendeeCapabilitiesUpdated, MeetingEnded) delivered via SQS and polled by the ChimeServerEvents background job. | 8 | 2 | event, queue, video |
| [iea-event-sweep](nodes/iea-event-sweep.md) | Background job (every 6 s, flag iea_event_sweeper_enabled) that drains each IEA client's iea_outbound_event_queue and sends the messages to IEA. | 8 | 1 | job, background |
| [training-expiration-jobs](nodes/training-expiration-jobs.md) | Background jobs that reset expired training progress (daily) and export completion/QC CSVs to S3 for courses about to expire (hourly cron). | 8 | 2 | event, job, training |
| [initial-allocation-sweeper](nodes/initial-allocation-sweeper.md) | Backend job (every 120 s, flag initial_allocation_sweeper_enabled checked each loop) that, for UK-allocation clients, runs familiarisation resets before SRD, the standardisation reset and initial/late-joiner allocation after SRD, and marker-chase e-mails, per section under a per-section scan lock. | 7 | 2 | event, job, allocation, uk |
| [schedule-email-jobs](nodes/schedule-email-jobs.md) | Two 5-second background sweepers that email schedule-change notices (debounced 2 min), late-cancellation alerts, shift reminders and unfilled-shift sign-up requests. | 7 | 3 | event, job, scheduling, email |
| [copyleaks-sweep](nodes/copyleaks-sweep.md) | Background job (every 2 min, flag copyleaks_sweeper_enabled) that submits unscanned response media of copyleaks_config-enabled items to Copyleaks. | 6 | 1 | job, background |
| [response-lock-sweeper](nodes/response-lock-sweeper.md) | Scan-locked job (every 30 s, backend only, flag lock_sweeper_enabled) that unlocks responses whose lock_expire_time has passed or is null while lock_user_id is set. | 6 | 1 | event, job, scoring |
| [trend-sweepers](nodes/trend-sweepers.md) | Background goroutines (ITrendQCResponseSweeper, MSessionSweeper, ITrendAdminSweeper, MSessionResetSweeper) that run trend m-session bookkeeping every 30 s under a scan lock. | 6 | 4 | event, job, qc, trend |
| [crase-sweep](nodes/crase-sweep.md) | Background job (every 60 s, flag crase_sweeper_enabled) that scores eligible responses of crase_config-enabled items through CRASE. | 5 | 1 | job, background |
| [iea-score-sweep](nodes/iea-score-sweep.md) | Background job (every 60 s, flag iea_score_sweeper_enabled) that sends unscored responses of IEA-enabled items to IEA for scoring. | 5 | 1 | job, background |
| [ies-user-sync](nodes/ies-user-sync.md) | Queue of pending user changes for Pearson IES/OpenIDM (collection ies_user_sync_events) - mainly MFA enable/disable from tenant MFA changes - drained every 6 s by IesEventSweeper with up to 5 attempts. | 5 | 1 | event, queue, identity, platform-auth |
| [writeshift-sweep](nodes/writeshift-sweep.md) | Background job (every 1 min, flag writeshift_sweeper_enabled) that sends a percentage of responses of Writeshift-enabled items to Writeshift. | 5 | 1 | job, background |
| [emma-sweeps](nodes/emma-sweeps.md) | Three EMMA background jobs - EmmaSweeper (score, 1 min), EmmaRescoreSweeper (rescore, 1 min) and EmmaSyncSweeper (status/training sync, 2 min) - each behind its own property flag. | 4 | 2 | job, background |
| [iea-item-status-sweep](nodes/iea-item-status-sweep.md) | Background job (every 30 s, flag iea_item_status_sweeper_enabled) that polls IEA for items whose asynchronous creation is still waiting. | 3 | 1 | job, background |
| [learnosity-sweep](nodes/learnosity-sweep.md) | Background job (every 1 min, flag learnosity_sweeper_enabled) that pulls new Learnosity session responses into OSCAR. | 2 | 1 | job, background |

## config (7)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [integration-env](nodes/integration-env.md) | Env vars and property-value job flags that point OSCAR at its scoring engines and third-party services (IEA, EMMA, CRASE, RMS, Copyleaks, Learnosity, Previewer, Cambium IRIS, Writeshift) and turn their sweepers on or off. | 28 | 2 | config, env |
| [oscar-env](nodes/oscar-env.md) | Core platform environment variables read by src/options (EvalEnv) - environment name, Mongo/Valkey connections, server mode and one-shot flags, SSL, session lifetimes, SAML, rate limit, captcha, logging/APM, secure-storage key - and the OSCAR_<ENV>_ prefixes used by -staging/-prod/-uk runs. | 20 | 0 | config, env, platform-auth |
| [reporting-env](nodes/reporting-env.md) | Env vars, dynamic config and property_values job flags that control reporting caches, P-Comp, PEACS import, score-export sweepers and the scheduled report/extract jobs. | 19 | 0 | config, env, reporting, export |
| [item-engine-config](nodes/item-engine-config.md) | Per-item engine settings embedded in the item document - cf_config (IEA), crase_config, erater_config, writeshift_config, copyleaks_config, emma_config, learnosity_config and api_export_config - that switch each AI or third-party integration on for that item. | 15 | 7 | config, item |
| [item-qc-config](nodes/item-qc-config.md) | Per-item QC settings embedded on the item document (validity_config, qualification_config, calibration_config, exception_config) that switch QC checks on and set their thresholds and consequences. | 14 | 1 | config, qc |
| [ops-integration-config](nodes/ops-integration-config.md) | Environment variables for the people/ops integrations - SendGrid, Chime/SQS, S3/CloudFront, Lex, report recipients - plus the property_values flags that switch their background jobs on/off. | 14 | 0 | config |
| [deployment](nodes/deployment.md) | How OSCAR is built and shipped - multi-stage Dockerfile (Go + Vue build on Amazon Linux 2023) pushed to ECR by Jenkins and handed to per-line manifest jobs (ECS); legacy Elastic Beanstalk zip deploy for US/UK/PT; a GitHub workflow for the GMAC side server. | 5 | 0 | config, deploy, platform-auth |

## flow (27)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [export-scores](nodes/export-scores.md) | The single score-export flow - a COMPLETE response is queued on outbound_queue (auto-deliver sweeper, manual export, rescore/backread re-export, appeals), the outbound score sweeper builds ExtScorePayload (incl. meta.scoredResponseText) and a driver POSTs it to the response's callback_url (AD /api/scoring/oscar/callback, ADAM /v1/api/score) or the item's export endpoint; failures retry every 2 h up to 5 times. | 15 | 9 | flow, export, external, cross-app |
| [iea-scoring](nodes/iea-scoring.md) | A response of an IEA-enabled item is sent to IEA by the score sweeper, IEA posts the outcome back to /iea/v1/outcome, and OSCAR applies it as a machine score, rescore, low-confidence meta score or condition flag; human scores flow back to IEA through the event queue. | 13 | 7 | flow, iea, ai-scoring |
| [score-response](nodes/score-response.md) | A human scorer's loop - GET /v1/score/:section/:item (Deliver → GetFresh locks a response and writes a LOCK work queue, possibly interleaving QC), the scorer submits via POST /v1/legacy/submit (SubmitScoreAsUser), and GetNextResponseState moves the response to second read, resolution, adjudication or COMPLETE. | 11 | 8 | flow, scoring, core |
| [qualification-gate](nodes/qualification-gate.md) | Before operational work on a qualification-enabled item, get-next serves the scorer qualification qc-sets one at a time; each set is judged on completion, cross-set requirements decide the overall pass, and failure can deactivate, item-lock or cap the scorer. | 8 | 11 | flow, qc, qualification, scoring |
| [validity-check](nodes/validity-check.md) | During operational scoring, get-next intersperses known-answer validity responses (by interval or scheduled delivery), the scorer submits to /v1/validity/submit, and a wrong answer can auto-deliver calibration, write a lockout or deactivate the scorer. | 8 | 12 | flow, qc, validity, scoring |
| [ai-engine-sweep-scoring](nodes/ai-engine-sweep-scoring.md) | The shared polling pattern for synchronous AI engines (CRASE, Writeshift, EMMA) - a sweeper picks enabled items, selects eligible responses, calls the engine per response and submits the result as the item's system user, or flags/reroutes on conditions and errors. | 7 | 6 | flow, ai-scoring |
| [interspersed-trend](nodes/interspersed-trend.md) | For use_trend clients, sweepers seed trend responses into a queue, get-next intersperses them into operational scoring at the item's i_trend_ratio, submits are filed into m-session qc-sets by the m-session sweeper, and the admin sweeper closes m-sessions when operational work ends. | 7 | 11 | flow, qc, trend |
| [training-gate](nodes/training-gate.md) | Get-next blocks operational scoring (402 requires training) until every active training course assigned to the section and item is complete; scorers complete SCORM, resource, exemplar, practice and qualification elements in My Training, and progress is recomputed per element. | 7 | 10 | flow, training, scoring, security |
| [external-response-import](nodes/external-response-import.md) | A host system (AD, PAN/PASS, Cognia, …) authenticates, pushes a response with PATCH/POST /v1/api/response, OSCAR stores and routes it to human/AI scoring, and the final scores are POSTed back to the response's callback_url. | 6 | 8 | flow, ingest, cross-app |
| [uk-allocation](nodes/uk-allocation.md) | UK marking allocation - section dates and role allocations are imported, the 120 s sweeper runs familiarisation resets before SRD, the standardisation reset and initial allocation after SRD, get-next refuses items a marker has used up, each score increments the marker's count, and supervisors override allocations by hand. | 6 | 9 | flow, allocation, uk |
| [appeal](nodes/appeal.md) | A host files an appeal (POST /v1/api/appeal) that is stored as an appeal_request, the appeal sweeper moves the matching COMPLETE response to APPEAL, appeal scorers re-read it (score types 17/18), and the auto-appeal deliver sweeper re-exports it. | 5 | 8 | flow, appeal, scoring, external |
| [copyleaks-plagiarism-scan](nodes/copyleaks-plagiarism-scan.md) | Response media of Copyleaks-enabled items are submitted to Copyleaks by the sweeper; Copyleaks' completed webhook stores similarity results on the media, flags the response over threshold, and a PDF report is fetched for the scorer UI. | 5 | 7 | flow, plagiarism |
| [iea-tod-modeling](nodes/iea-tod-modeling.md) | Training-on-Demand - an admin configures an item for IEA TOD, OSCAR creates the TOD item at IEA, exports human-scored responses/scores to S3, submits a modeling job, and IEA reports workflow-state changes until the model can score. | 5 | 6 | flow, iea |
| [ingest-response](nodes/ingest-response.md) | How one response gets into OSCAR's scoring pool - a host (AD, ADAM, PAN…) PATCH/POST/PUTs /v1/api/response, DoImportResponse validates and inserts it in LOADING (INERT for field test or split originals), and the response ingest sweeper moves it to UNSCORED / RELIABILITY / FLAGGED / COMPLETE. | 5 | 7 | flow, ingest, external, cross-app |
| [irr-rebuild](nodes/irr-rebuild.md) | A separate OSCAR process (SERVER_MODE=watcher) tails a change stream on responses, every 500 ms deletes and recomputes irr_comparisons for changed responses, and enqueues half-hour report-queue buckets that ReportDailySweeper turns into irr_comparison_daily and rpt_user_item_daily caches. | 5 | 7 | flow, irr, reporting, background |
| [score-reset](nodes/score-reset.md) | Resetting scores from Score Auditing - an immediate single-score or batch reset, or a queued reset job that first reports before/after agreement and then (on execute) moves the selected scores to reset_scores, recomputes response state and tells IEA. | 4 | 8 | flow, scoring, auditing |
| [config-sheet-bulk-edit](nodes/config-sheet-bulk-edit.md) | Bulk item editing through config sheets - a tenant defines spreadsheet column sets, an admin edits all items in a SpreadJS grid, and the SPA posts changed fields to POST /v1/admin/bulk_update/items, which $sets each dotted path by item id, re-derives rubric config and writes a backup copy. | 3 | 6 | flow, config, items |
| [peacs-import](nodes/peacs-import.md) | Nightly PEACS user import - a scheduled peacs_job asks PEACS for the applicants of every project of every PEACS-enabled tenant and creates OSCAR users with a role mapped from their Fusion job role; a bug sends every applicant after the first match to the same tenant. | 3 | 6 | flow, users, peacs, async |
| [public-qc-set-link](nodes/public-qc-set-link.md) | An admin on the QC set document page creates a short public link (POST /v1/create_link); anyone opening /#/ex/<id> is routed to the QC set document, which loads the section, item, rubric, set and signed responses with true scores from /v1/external_link_data/:id without logging in. | 3 | 6 | flow, qc, sharing, security |
| [rescore](nodes/rescore.md) | A supervisor asks a scorer to rescore one of their scores (or a flag) by sending an in-app mail with rescore_score_id / rescore_flag_id; this creates a rescore_request, the scorer opens it from mail into the rescore viewer and submits via /v1/legacy/submit_rescore (ApplyRescore replaces the score in place) or /submit_flag_rescore; completed responses may be re-exported. | 3 | 7 | flow, rescore, scoring, mail |
| [scorer-pay](nodes/scorer-pay.md) | Scorer pay (P-Comp) - the SPA reports time on task per response, a daily job joins scored units, queue time, training time and agreement into compensation_export_data and uploads a payroll CSV to S3, and payroll screens read the same data; the time input is fully client-controlled. | 3 | 8 | flow, compensation, payroll, reporting |
| [tenant-import-export](nodes/tenant-import-export.md) | Copying a tenant between environments - export zips the tenant's client, sections, items, rubrics, users, QC sets/responses, credentials and S3 media to S3 and returns a signed URL; full import recreates the tenant (optionally as a copy with new ids), partial import adds selected rubrics/projects/items/sections to an existing tenant; all run as progress jobs. | 3 | 6 | flow, tenant, admin |
| [login-as](nodes/login-as.md) | Impersonation - a superuser logs in as another user in a chosen tenant (POST /v1/login_as/:userID/:clientID, from user management or a debug-code link), or a user switches into one of their proxy users (POST /v1/proxy_login/:userID); both log the caller out and ForceLogin a session with controlling_user_id. | 2 | 5 | flow, auth, impersonation |
| [observation-exam](nodes/observation-exam.md) | An external booking system posts candidate bookings to the external API; site staff group them into sessions, check in, raters score on tablets, completing the session queues each score, and a sweeper POSTs it back to the client's obs_score_url. | 2 | 9 | flow, observation, export |
| [password-login](nodes/password-login.md) | A user signs in with email and password - POST /v1/auth is IP rate limited, bcrypt-checked, a session is created, then the MFA and archived gates run; a 407 sends the SPA to Pearson SSO instead. | 2 | 6 | flow, auth, login |
| [schedule-change-emails](nodes/schedule-change-emails.md) | Scorers edit their availability on My Schedule; each save records schedule-change rows, and a 5-second sweeper groups unnotified changes per user and project and, after a 2-minute debounce, emails the scorer and (for late cancellations) the project's cancel-alert roles via SendGrid. | 2 | 8 | flow, scheduling, email |
| [sso-login-flow](nodes/sso-login-flow.md) | Pearson SSO login - /sso → /identity/saml (samlsp RequireAccount) → Pearson IAM → /saml/acs → HandleSamlAssertion matches the email to a user, DoLogin creates the session, and the SPA picks up the Oscar-Auth-Token cookie at /login/proceed. | 1 | 6 | flow, auth, sso, saml |

## concept (40)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [superuser](nodes/superuser.md) | Platform-wide privilege flags on the user document - superuser (MZD/dev god mode), superadmin (narrow ops admin), checked directly in handlers, independent of tenant roles. | 15 | 1 | concept, permissions, platform-auth |
| [proxy-user](nodes/proxy-user.md) | A support/dev account listed in another user's proxy_user_ids that the owner can switch into without a password (POST /v1/proxy_login/:userID); sessions record controlling_user_id. | 6 | 1 | concept, auth, platform-auth |
| [access-level](nodes/access-level.md) | The integer role.access rank (DIRECTOR 100 … BASIC_SCORER 10 in default roles) that caps which roles a user may assign or edit and defines supervisor relationships. | 4 | 1 | concept, permissions, platform-auth |
| [portal-admin](nodes/portal-admin.md) | users.portal_admin - administrator of the scorer portal (account-level landing page) who may edit the portal holiday and payday calendars; granted by superusers. | 4 | 1 | concept, permissions, platform-auth |
| [alert-flag](nodes/alert-flag.md) | Alert / flag code = a tenant-defined reason for flagging a response (e.g. LID, off-topic); alerts email supervisors, some require a score or restrict review. | 3 | 2 | concept, glossary |
| [tenant](nodes/tenant.md) | "Tenant" is the UI/API word for a client - one customer scoring program; Client in code, tenantRefID in external APIs; grouped into accounts; all tenants share one database. | 3 | 1 | concept, glossary, platform-auth |
| [inert](nodes/inert.md) | INERT (state 101) = a response that exists but is not scoreable - field-test responses waiting to be sampled, or the source copy of a split-queue response. | 2 | 2 | concept, glossary |
| [lid](nodes/lid.md) | LID = "Learning in Danger" (UI wording; some nodes say "Learner in Danger") - a safeguarding alert raised by IEA (or a scorer) when a response suggests a student may be at risk. | 2 | 2 | concept, glossary |
| [withheld](nodes/withheld.md) | A withheld response is one in state FLAGGED - held out of normal scoring and export until a supervisor reviews and releases it. | 2 | 2 | concept, glossary |
| [adjudication](nodes/adjudication.md) | Adjudication = a further read after resolution by a scorer with has_adjudication, used when resolution still leaves the response unsettled. | 1 | 2 | concept, glossary |
| [do-not-export](nodes/do-not-export.md) | do_not_export - a response meta flag meaning "score it but never send the score to the host"; the export path marks it done without calling out. | 1 | 2 | concept, glossary |
| [final-score](nodes/final-score.md) | Final score = score_type 50, computed from all reads by the item's final-score rule when a response completes or is exported; it is what hosts receive. | 1 | 2 | concept, glossary |
| [irr](nodes/irr.md) | IRR = inter-rater reliability - exact/adjacent agreement between two scores on the same response, stored per pair in irr_comparisons. | 1 | 2 | concept, glossary |
| [omaha-rule](nodes/omaha-rule.md) | Omaha rule - a named resolution/agreement rule (from the Omaha program) used both to decide third reads and to judge QC agreement. | 1 | 2 | concept, glossary |
| [qc-type](nodes/qc-type.md) | The qc_type code on QC sets and QC scores - 1 practice, 2 qualification, 3 validity, 4 calibration, 5 rangefinding, 6 exemplar, 8 training resource, 9 training trend, 10 interspersed trend. | 1 | 2 | concept, glossary |
| [queue](nodes/queue.md) | "Queue" means several things in OSCAR - a section+item pair scorers work on, a per-scorer work-queue lock, the outbound score queue, or the report queue. | 1 | 4 | concept, glossary |
| [reliability](nodes/reliability.md) | Reliability = the second independent read; a set percentage of responses is marked for it at ingest and waits in state RELIABILITY. | 1 | 2 | concept, glossary |
| [score-type](nodes/score-type.md) | The numeric score_type on every score that says which read it is - 1 FIRST, 2 SECOND, 3 RESOLUTION, 4 BACKREAD, 5 ADJUDICATION, 17/18 APPEAL, 50 FINAL and so on. | 1 | 2 | concept, glossary |
| [true-score](nodes/true-score.md) | True score = the agreed correct score for a QC response, set in rangefinding; scorers' QC scores are judged against it. | 1 | 2 | concept, glossary |
| [admin](nodes/admin.md) | "Admin" in OSCAR means a role (ADMIN in the default roles) or the /v1/admin/* route prefix - never a test administration. | 0 | 2 | concept, glossary |
| [cf](nodes/cf.md) | IEA, CF (Continuous Flow) and KT (Knowledge Technologies, ktscoringservices) all name the same external AI scoring engine in OSCAR code. | 0 | 2 | concept, glossary |
| [condition-code](nodes/condition-code.md) | Condition code = a non-numeric trait outcome (blank, off-topic, illegible …) defined on the rubric; stored as score -1 with the code. | 0 | 2 | concept, glossary |
| [cross-set-requirement](nodes/cross-set-requirement.md) | Cross-set requirement - a qualification rule evaluated across all of a scorer's qualification sets (e.g. overall agreement on a trait), not set by set. | 0 | 2 | concept, glossary |
| [debug-code](nodes/debug-code.md) | Debug code - a base64 link (userID\|clientID\|url) support staff use to log in as a user and jump straight to a page. | 0 | 1 | concept, glossary |
| [fd-exception](nodes/fd-exception.md) | FD = frequency distribution - a lockout check that compares how often a scorer gives each score point with the item's limits. | 0 | 2 | concept, glossary |
| [happy-mode](nodes/happy-mode.md) | HAPPY = High-concurrency Asynchronous Performance ProxY - an optional fast get-next path that serves responses from a light proxy queue (happy_responses) with buffered score writes. | 0 | 2 | concept, glossary |
| [lockout](nodes/lockout.md) | Lockout vs deactivation - a lockout stops one scorer on one item; deactivation stops them scoring in the tenant until reactivated. | 0 | 2 | concept, glossary |
| [loopback](nodes/loopback.md) | Loopback = sending an item's exported scores back to OSCAR's own unauthenticated /v1/api/score receivers instead of a real host, for testing. | 0 | 2 | concept, glossary |
| [m-session](nodes/m-session.md) | M-session = a measurement session for interspersed trend - one trend qc-set covering a window of operational scoring, closed when the item's operational work runs out. | 0 | 2 | concept, glossary |
| [paper](nodes/paper.md) | UK vocabulary - a "paper" is a section and a "marker" is a scorer; marking = scoring. | 0 | 2 | concept, glossary |
| [project-section-item](nodes/project-section-item.md) | OSCAR's hierarchy - tenant → project (a scoring program/window) → section (a test or paper, a group of items) → item (one question); hosts map their forms and items onto sections and items by ref id. | 0 | 3 | concept, glossary |
| [pv-mode](nodes/pv-mode.md) | PV mode - a per-user toggle that switches a scorer onto the PV copy of each queue; PV responses (is_pv_response) are scored, reported and exported separately from operational ones. | 0 | 2 | concept, glossary |
| [recombine](nodes/recombine.md) | Recombine = an export mode that merges partial scores from split items back onto one target response inside OSCAR instead of sending them out. | 0 | 2 | concept, glossary |
| [ref-id](nodes/ref-id.md) | ref_id - the caller's own id for a record (response, item, section, tenant); for AD responses it is AD's response id, and it is how hosts address OSCAR records. | 0 | 3 | concept, glossary |
| [resolution](nodes/resolution.md) | Resolution = the third read that settles a disagreement between the first two reads; the item's resolution rule decides when it is needed. | 0 | 2 | concept, glossary |
| [response-state](nodes/response-state.md) | The routing state of a response - LOADING, UNSCORED, RELIABILITY, RESOLUTION, ADJUDICATION, APPEAL, COMPLETE, FLAGGED (withheld), INVALIDATED, INERT and others. | 0 | 1 | concept, glossary |
| [scoring-mode](nodes/scoring-mode.md) | Driver / mode - the response viewer's scoring mode (normal, resolution, adjudication, appeal, backread, flag queue, audit, practice, RF, rescore …), each implemented by a client-side driver. | 0 | 2 | concept, glossary |
| [smart-sort](nodes/smart-sort.md) | Smart sort = an IEA mode that does not score but classifies responses with condition codes that map to OSCAR alerts, for humans to review. | 0 | 2 | concept, glossary |
| [srd](nodes/srd.md) | SRD = standardisation reset date; CCD = contract complete date - section milestone dates that drive UK allocation (familiarisation scores are wiped at SRD; capping at CCD). | 0 | 2 | concept, glossary |
| [tod](nodes/tod.md) | TOD = Training on Demand - building a new IEA scoring model for an item from OSCAR's human scores. | 0 | 2 | concept, glossary |

## capability (38)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [sso-login](nodes/sso-login.md) | Users sign in to OSCAR with their Pearson account (single sign-on), and sign out of both together. | 4 | 4 | capability, auth, platform-auth |
| [user-impersonation](nodes/user-impersonation.md) | Platform staff can log in as any user in a tenant to reproduce problems, and support staff can switch into their linked support accounts. | 4 | 2 | capability, auth, platform-auth |
| [multi-factor-auth](nodes/multi-factor-auth.md) | Tenants can require multi-factor sign-in; affected users must log in through Pearson SSO, with a support override for one-off password logins. | 2 | 4 | capability, auth, platform-auth |
| [response-flagging](nodes/response-flagging.md) | Scorers flag responses they cannot score (off-topic, illegible, safeguarding concern); flagged responses are withheld and reviewed by supervisors. | 2 | 3 | capability, scoring |
| [automatic-lockouts](nodes/automatic-lockouts.md) | Scorers who score too fast or with an unusual score distribution are automatically locked out or deactivated until a supervisor intervenes. | 1 | 3 | capability, qc |
| [role-based-access](nodes/role-based-access.md) | Each tenant defines its own roles with fine-grained switches for every page and action, and assigns one role per person. | 1 | 4 | capability, permissions, platform-auth |
| [scorer-training](nodes/scorer-training.md) | Scorers complete training courses (SCORM modules, documents, practice) that must be finished before they can score. | 1 | 5 | capability, training |
| [ai-scoring](nodes/ai-scoring.md) | Responses can be scored by AI engines - mainly Pearson IEA, plus CRASE, EMMA and Writeshift - with the machine score used directly, as a second read, or only as advice to humans. | 0 | 8 | capability, ai-scoring |
| [backreading](nodes/backreading.md) | Supervisors re-score a sample of a scorer's work (backreading) to check quality, and can override scores. | 0 | 3 | capability, scoring, qc |
| [config-sheets](nodes/config-sheets.md) | Admins edit many items' settings at once in a spreadsheet view. | 0 | 3 | capability, config |
| [field-test-scoring](nodes/field-test-scoring.md) | Field-test responses are loaded inert and only a sample is released for scoring. | 0 | 2 | capability, scoring |
| [human-scoring](nodes/human-scoring.md) | Scorers sign in, pick an item and score student responses one after another against a rubric; OSCAR hands out responses, holds them while being scored and records each score. | 0 | 6 | capability, scoring |
| [iea-model-training](nodes/iea-model-training.md) | Admins can train a new IEA scoring model for an item from responses that humans have already scored (Training on Demand), and watch its progress until it can score. | 0 | 3 | capability, ai-scoring |
| [inter-rater-reliability](nodes/inter-rater-reliability.md) | Reports show how often pairs of scores on the same response agree (exact/adjacent), per scorer, item and day. | 0 | 4 | capability, reporting, qc |
| [internal-messaging](nodes/internal-messaging.md) | In-app mail between scorers and supervisors, team bulletins and personal notes. | 0 | 4 | capability, ops |
| [observation-scoring](nodes/observation-scoring.md) | Examiner observation sessions are booked from an external system, scored in OSCAR on observation forms, and the scores sent back. | 0 | 5 | capability, ops |
| [peacs-hiring-sync](nodes/peacs-hiring-sync.md) | Newly hired scorers from the Pearson hiring system (PEACS) are created as OSCAR users automatically. | 0 | 4 | capability, ops |
| [plagiarism-detection](nodes/plagiarism-detection.md) | Responses can be checked for plagiarism by Copyleaks, and scorers see the similarity report before scoring. | 0 | 4 | capability, ai-scoring |
| [quality-reports](nodes/quality-reports.md) | Supervisors see dashboards and reports on progress, scorer productivity, agreement, SLA and training completion, with CSV/PDF export. | 0 | 6 | capability, reporting |
| [rangefinding-and-practice](nodes/rangefinding-and-practice.md) | Teams agree true scores on sample responses (rangefinding), build practice and exemplar sets from them, and scorers practise before qualifying. | 0 | 4 | capability, qc |
| [response-intake](nodes/response-intake.md) | Student responses arrive in OSCAR from the testing platform (AD and other hosts) over an API, or are uploaded by admins as files, and are queued for scoring. | 0 | 5 | capability, ingest |
| [score-appeals](nodes/score-appeals.md) | The testing platform can request an appeal on a scored response; OSCAR routes it to appeal scorers and sends the new score back. | 0 | 3 | capability, scoring |
| [score-auditing](nodes/score-auditing.md) | Admins search responses and their scores, change routing (priority, labels, unlock, invalidate), release withheld responses and reset scores. | 0 | 4 | capability, auditing |
| [score-delivery](nodes/score-delivery.md) | Final scores are sent back to the testing platform automatically (or on demand) once a response is fully scored, with retries. | 0 | 5 | capability, export |
| [scorer-calibration](nodes/scorer-calibration.md) | Scorers receive calibration sets to re-align them, after a validity failure or when a supervisor sends one. | 0 | 3 | capability, qc |
| [scorer-payroll](nodes/scorer-payroll.md) | OSCAR calculates paid scoring time for each scorer per day for payroll, and admins can set incentive targets that scorers see while working. | 0 | 5 | capability, reporting, payroll |
| [scorer-qualification](nodes/scorer-qualification.md) | Before scoring an item, a scorer must pass qualification sets of pre-scored responses. | 0 | 4 | capability, qc |
| [scorer-scheduling](nodes/scorer-scheduling.md) | Scorers sign up for the days they will work; admins see the calendar and attendance, and changes trigger emails. | 0 | 4 | capability, ops |
| [scoring-priority](nodes/scoring-priority.md) | Operations staff push chosen responses (by project, item and metadata) to the front of the scoring queue. | 0 | 3 | capability, ops |
| [second-reads-and-resolution](nodes/second-reads-and-resolution.md) | A share of responses is scored by two people; when they disagree, a senior scorer resolves it, and an adjudicator can settle remaining disputes. | 0 | 4 | capability, scoring |
| [shared-qc-links](nodes/shared-qc-links.md) | QC admins share a read-only link to a QC set document with people who have no OSCAR login. | 0 | 3 | capability, qc |
| [supervisor-monitoring](nodes/supervisor-monitoring.md) | Supervisors watch who is scoring right now and each scorer's activity history. | 0 | 3 | capability, reporting |
| [supervisor-rescore](nodes/supervisor-rescore.md) | A supervisor can ask a scorer to look at one of their scores again by sending a rescore request through in-app mail. | 0 | 3 | capability, scoring |
| [tenant-copy](nodes/tenant-copy.md) | Platform admins export a tenant's whole configuration (or part of it) and import it into another tenant or environment. | 0 | 3 | capability, config |
| [trend-scoring](nodes/trend-scoring.md) | Scorers re-score responses from earlier administrations (trend) so drift between years can be measured. | 0 | 4 | capability, qc |
| [uk-marker-allocation](nodes/uk-marker-allocation.md) | For UK marking, each marker is allocated a quota of responses per paper and item, with standardisation resets and supervisor overrides. | 0 | 4 | capability, uk, scoring |
| [validity-monitoring](nodes/validity-monitoring.md) | While scoring, scorers are given hidden pre-scored responses (validity) at intervals to check they stay accurate. | 0 | 3 | capability, qc |
| [video-conferencing](nodes/video-conferencing.md) | Built-in video meetings for scorer training and standardisation, with chat, breakout rooms and attendance. | 0 | 4 | capability, ops |
