# Knowledge graph index

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

215 nodes.

## entity (33)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [client](nodes/client.md) | A customer tenant (district/state/school account) in LaunchPad; every roster row and config is scoped by client_id. | 108 | 13 | tenancy, core |
| [user](nodes/user.md) | OneRoster user (student, teacher, admin, guardian...) rostered for a client, the identity that logs in to the launchpad, stored in the school_year-partitioned users table. | 100 | 11 | roster, oneroster, identity |
| [integration-config](nodes/integration-config.md) | A configured roster data source for a client (Clever, OneRoster API/CSV, PowerSchool, Ed-Fi, PSL, Utah) with schedule and settings. | 91 | 4 | integrations |
| [org](nodes/org.md) | OneRoster org (state, district, school, department...) forming a per-client hierarchy via parent_id, stored in the school_year-partitioned orgs table. | 89 | 8 | roster, oneroster |
| [app-subscription](nodes/app-subscription.md) | A client's subscription to an app - active flag, allowed roles, order, org scope, customization, notification endpoint and data-sharing flag. | 77 | 3 | apps |
| [app-config](nodes/app-config.md) | A downstream application registered in LaunchPad (ADAM, Navvy, Propel...) with its launch, auth and rostering settings. | 74 | 5 | apps |
| [role](nodes/role.md) | OneRoster 1.2 role row giving a user a role (student, teacher, siteAdministrator...) at an org, primary or secondary, stored in the school_year-partitioned roles table. | 69 | 6 | roster, oneroster, permissions |
| [role-permission](nodes/role-permission.md) | Per-client row mapping a role name (systemAdministrator, teacher, customRole1...) to a JSON permission set, alias, notes and enabled flag. | 58 | 2 | permissions |
| [integration-stat](nodes/integration-stat.md) | One run of an integration - status, trigger, mode, per-entity counts, timings, errors and the run settings snapshot. | 52 | 2 | integrations |
| [class](nodes/class.md) | OneRoster class (section) of a course at a school with its terms, the target of enrollments, stored in the school_year-partitioned classes table. | 48 | 7 | roster, oneroster |
| [enrollment](nodes/enrollment.md) | OneRoster enrollment linking a user to a class at a school with a role (student, teacher...), stored in the school_year-partitioned enrollments table. | 47 | 6 | roster, oneroster |
| [academic-session](nodes/academic-session.md) | OneRoster academicSession (school year, term, semester, grading period) for a client, stored in the school_year-partitioned academic_sessions table. | 45 | 4 | roster, oneroster |
| [demographic](nodes/demographic.md) | OneRoster demographics record for a user (birth date, sex, race and ethnicity flags, education and economic classifications in metadata), stored in the school_year-partitioned demographics table. | 45 | 4 | roster, oneroster, pii |
| [admin-user](nodes/admin-user.md) | A LaunchPad console user (Pearson staff or district admin/team member) who logs into the config-client. | 43 | 4 | auth, tenancy |
| [course](nodes/course.md) | OneRoster course (catalogue entry offered by an org in a school year), parent of classes, stored in the school_year-partitioned courses table. | 42 | 6 | roster, oneroster |
| [authentication-provider](nodes/authentication-provider.md) | A per-client SSO/login provider configuration (SAML, OIDC, CAS, Clever, ClassLink, Google, simple student login, QR). | 41 | 3 | auth |
| [user-login](nodes/user-login.md) | Local password credentials for a rostered user at one authentication provider (logins table, keyed by user LPI and provider). | 41 | 4 | auth, roster |
| [student-transfer-request](nodes/student-transfer-request.md) | A request to move a student from one school to another school (under a different parent org) within a client and school year, with approve/reject lifecycle. | 40 | 5 | roster |
| [entity-export](nodes/entity-export.md) | An asynchronous export job of roster entities to CSV in S3, requested by a console admin or an end user, with status and timings. | 34 | 4 | exports |
| [usage-tracking](nodes/usage-tracking.md) | One row per rostered user and client recording last LaunchPad login, last login per provider type and acceptable-use-policy acceptance. | 34 | 3 | analytics |
| [admin-user-client](nodes/admin-user-client.md) | Join row granting an admin user access to a client, with the role name that selects its permission set. | 31 | 4 | auth, tenancy |
| [user-override](nodes/user-override.md) | LaunchPad-owned per-user overrides (login_enabled flag, LMS data) keyed by users.id that integrations never overwrite. | 26 | 2 | roster, identity |
| [admin-user-app](nodes/admin-user-app.md) | Join row granting an admin user a role on every client actively subscribed to one app (app-scoped team members). | 24 | 5 | auth |
| [change-history-entry](nodes/change-history-entry.md) | A recorded version of a roster entity (from the WAL) in the school_year-partitioned change_history table or DynamoDB, queryable through the changes API. | 24 | 3 | audit |
| [sidebar-content](nodes/sidebar-content.md) | Ordered, role-targeted HTML content blocks shown in a client's launchpad sidebar (sidebar_content table). | 17 | 2 | launchpad |
| [integration-queue-message](nodes/integration-queue-message.md) | A row in the SQL-backed job queue (integration_queue) carrying an IntegrationStat payload to be run by a worker. | 16 | 2 | integrations, async |
| [metric](nodes/metric.md) | A time-bucketed aggregate metric value (count, sum/avg, min/max) keyed by metric name and timestamp, stored in SQL or DynamoDB. | 16 | 2 | analytics |
| [address-validation](nodes/address-validation.md) | Cache of Google Address Validation API responses keyed by a hash of the request, with a derived valid_address flag. | 13 | 2 | roster |
| [oauth-user](nodes/oauth-user.md) | Unused legacy OAuth client-credential tables (oauth_users and oauth_user_clients); external API clients now authenticate with app_configs settings. | 12 | 2 | auth |
| [measures](nodes/measures.md) | Removed OneRoster gradebook/measures tables (categories, line_items, results, score_scales, assessment_*); Go models and consumers remain but have no tables. | 11 | 0 | roster |
| [distributed-lock](nodes/distributed-lock.md) | A named lease row in distributed_locks used for cross-instance locking of cron jobs and integration runs. | 9 | 1 | async |
| [change-event](nodes/change-event.md) | Legacy change_events row (roster change log) - table dropped in 2025-06 and superseded by change_history; only an unused Go struct remains. | 7 | 0 | audit |
| [radar-dashboard](nodes/radar-dashboard.md) | Removed RADAR analytics schema - dashboards, widgets, widget libraries, radar roles/permissions, grades, views and materialized views (radar_* objects). | 5 | 0 | analytics |

## module (28)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [launchpad-internal-api](nodes/launchpad-internal-api.md) | Gin handlers behind /api/internal for the LaunchPad console and end-user launchpad - accounts, apps, subscriptions, integrations, team, auth providers, role permissions, transfers, logins. | 138 | 78 | backend, api, admin |
| [integration-engine](nodes/integration-engine.md) | Integration runtime - DataSource/Integration abstractions, package sources, OneRoster HTTP client and auth, and the buffered consumers that upsert, stat and bulk-delete roster rows. | 102 | 33 | integrations, roster, core |
| [api-commons](nodes/api-commons.md) | Shared API layer - JWT auth middleware, request-user (UserInfo) resolution and permission checks, response helpers, and the roster write handlers. | 67 | 27 | backend, api, auth, permissions |
| [config-client](nodes/config-client.md) | Vue 3 + PrimeVue SPA (hash routing, Pinia) - Pearson/district admin console plus the end-user login pages and app-tile launchpad. | 55 | 9 | frontend, ui |
| [roster-services](nodes/roster-services.md) | Go services package - tenant-scoped read services for the eight OneRoster entities, the filter language, OR12 mappers, critical warnings, student-information export columns and student-transfer bulk approval. | 50 | 28 | backend, roster, core |
| [db-migrations](nodes/db-migrations.md) | golang-migrate SQL migrations (215 up/down pairs, 2023-01 to 2026-09), the bun dbfixture loader and the docker db-init image that build and seed the LaunchPad Postgres schema. | 49 | 28 | data, db, migrations |
| [notifications-service](nodes/notifications-service.md) | Postgres logical-replication (wal2json) consumer that turns roster/client/role-permission row changes into change-history snapshots and OAuth2-authenticated POSTs to subscribed apps. | 46 | 18 | async, notifications |
| [auth-federation](nodes/auth-federation.md) | SSO federation package - LaunchPad as SAML IdP and SP, OIDC provider and relying party, CAS client; turns an external login into an lp-token session and completes pending app SSO requests. | 42 | 27 | auth, sso, security |
| [integration-scheduler](nodes/integration-scheduler.md) | Scans active integration configs every 5 minutes under a SQL lease, enqueues due runs into the integration_queue table and runs up to 4 queued integrations per worker process. | 38 | 12 | async, integrations |
| [external-api](nodes/external-api.md) | Go package api/external - OneRoster 1.2 read API for subscribed apps (OAuth2 client credentials) plus the async CSV entity-export runner. | 33 | 21 | backend, api, oneroster, exports |
| [change-history](nodes/change-history.md) | Stores and queries per-entity change snapshots behind ChangeEventProvider (Postgres change_history when APP_URL is localhost, DynamoDB CHANGE_EVENTS_ENV_YEAR otherwise) and reverts roster entities to a snapshot. | 30 | 18 | audit |
| [export-entities-lambda](nodes/export-entities-lambda.md) | AWS Lambda (Go) triggered by the entity-export SQS queue - resolves DB credentials from Secrets Manager and runs AsyncExportPayload.RunExport to write a CSV to the export-reports S3 bucket. | 28 | 16 | exports, aws |
| [oneroster-12-source](nodes/oneroster-12-source.md) | OneRoster 1.2 roster sources - REST API puller (or1p2_server), zipped CSV package (or1p2_csv), single-file console uploads (or1p2_single_csv), student-details update CSV and the school-year rollover source. | 27 | 12 | integrations, oneroster |
| [data-validation](nodes/data-validation.md) | Per-batch roster validation during an integration (OneRoster entity checks, custom validations, client data validation rules) and the CSV report writers (S3 or local). | 26 | 5 | integrations, validation |
| [adobe-lms-sync](nodes/adobe-lms-sync.md) | Go package api/launchpad/adobelms - provisions LaunchPad users into Adobe Learning Manager on SSO, syncs profile/Org fields and managed offices, stores encrypted config and course completions. | 23 | 14 | apps, adobe, integration |
| [email-service](nodes/email-service.md) | Builds and sends transactional HTML emails through SendGrid - rostered-user welcome and password-reset links, admin welcome/reset, integration reports and student-transfer-request alerts. | 23 | 9 | email |
| [backend-server](nodes/backend-server.md) | Go process entrypoint (main.go) that picks a process role from APP_TYPE, plus the gin API app (api/App.go) with New Relic, logging, CSP and CORS middleware. | 21 | 13 | backend, runtime |
| [powerschool-source](nodes/powerschool-source.md) | PowerSchool SIS roster source (type powerschool_api) - full pull from PowerSchool REST and PowerQuery table endpoints with OAuth2 client credentials, mapped to OneRoster 1.2. | 18 | 11 | integrations, roster, powerschool |
| [clever-source](nodes/clever-source.md) | Clever roster source adapter - full REST pull on first run then incremental sync from the Clever events stream, mapped to OneRoster 1.2 models. | 16 | 17 | integrations, roster, clever |
| [edfi-source](nodes/edfi-source.md) | Ed-Fi ODS v3 roster source - change-version (minChangeVersion/maxChangeVersion) incremental pull plus /deletes endpoints, OAuth2 client credentials; Delaware _ext extensions. | 16 | 18 | integrations, roster, edfi |
| [ci-cd](nodes/ci-cd.md) | GitHub Actions on self-hosted runners - build and test, push ARM64 images to ECR, retag per env and terraform-apply; dev branch to smk+dev, prd branch to uat+pen-test, manual approved workflow to prd. | 14 | 8 | infra, ci |
| [infrastructure](nodes/infrastructure.md) | Terraform IaC for AWS - per-environment ECS Fargate services, Aurora Postgres, export SQS+Lambda, S3/CloudFront, WAF/Shield, monitoring. | 14 | 21 | infra, aws |
| [oneroster-11-source](nodes/oneroster-11-source.md) | OneRoster 1.1 roster sources - REST API puller (or1p1_server) and zipped CSV package reader (or1p1_csv) that convert OR1.1 rows into internal OR1.2 models and synthesize roles. | 14 | 7 | integrations, oneroster |
| [or12-validation](nodes/or12-validation.md) | The models/or12 package with OneRoster 1.2 wire structs, the per-entity Validate rules engine, change-detection hashes, and CSV marshallers shared by every roster source, API and export. | 14 | 6 | roster, oneroster, validation |
| [metrics-service](nodes/metrics-service.md) | In-process metric aggregator (count/unique via HyperLogLog, sum/avg, min/max) flushed every 15 minutes to Postgres metrics (localhost) or DynamoDB METRICS_ENV_YEAR, with read-time re-aggregation. | 13 | 5 | analytics |
| [psl-source](nodes/psl-source.md) | PSL (Pearson standard) student CSV source - single students.csv upload (type psl_student_csv) scoped to the uploader's orgs; the older multi-file PSL zip adapter (psl/csv) is dead. | 13 | 8 | integrations, roster, csv, psl |
| [utah-source](nodes/utah-source.md) | Utah USBE roster source for the UA Plus program - OneRoster 1.2 pull filtered to grade 9/10 UA+ data, 1-percent special-ed exclusion, teacher enrollments synthesized from class metadata, legacy org bootstrap. | 13 | 13 | integrations, roster, utah |
| [test-automation](nodes/test-automation.md) | Go godog (Gherkin) + playwright-go end-to-end suite with axe accessibility scans, run in a docker-compose stack or against dev/uat; not wired into CI. | 5 | 5 | test |

## interface (43)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [internal-login-api](nodes/internal-login-api.md) | Internal sign-in endpoints - admin password grant, rostered-user LaunchPad password/badge(QR)/simple-student login, SSO id-token account pick, impersonation, welcome and reset emails, badge PDFs, pre-login account lookup and custom sign-in redirects. | 42 | 7 | api, auth, login |
| [internal-clients-api](nodes/internal-clients-api.md) | Internal REST endpoints for LaunchPad accounts (clients) - list/search, create/update/delete, CSV bulk create, config export/import, logos, layout specs, sidebar content, roll-over. | 34 | 7 | api, admin, accounts |
| [oneroster-external-api](nodes/oneroster-external-api.md) | REST surface /api/external - OAuth2 client-credentials token plus 55 read-only OneRoster 1.2 rostering GET routes per client, with optional async CSV export. | 34 | 10 | api, oneroster, external |
| [internal-roster-api](nodes/internal-roster-api.md) | Internal REST routes under /api/internal/clients/{clientID}/roster used by the admin console to edit and query roster data (users, orgs, classes, courses, enrollments, demographics, sessions, quick class upload, student transfers). | 32 | 18 | api, roster, internal |
| [internal-apps-api](nodes/internal-apps-api.md) | Internal REST endpoints for app configs (launchpad tiles) - list, CRUD, logos, data validation counts, data-filter counts, and the end-user my-apps list. | 23 | 4 | api, admin, apps |
| [admin-roster-data-ui](nodes/admin-roster-data-ui.md) | Roster Data screens - list, filter, view, create and edit orgs, users, roles, demographics, academic sessions, courses, classes and enrollments, with user actions (impersonate, welcome emails, badges, login enable) and change history. | 22 | 26 | frontend, admin-ui, roster |
| [sso-oidc-rp](nodes/sso-oidc-rp.md) | Login via external OIDC/OAuth providers - Pearson IES (admins), Google, Clever, ClassLink and per-client generic OIDC providers; auth start and callback routes. | 21 | 3 | auth, sso, oidc |
| [lp-launchpad-ui](nodes/lp-launchpad-ui.md) | The end-user launchpad page (LaunchpadView) - app tiles, sidebar content, role switcher and profile menu for signed-in rostered users. | 20 | 8 | frontend, ui, end-user |
| [lp-login-ui](nodes/lp-login-ui.md) | End-user sign-in pages - account search, sub-account picker, per-account sign-in (SSO buttons + LaunchPad username/password), multi-account select, password reset/set. | 18 | 4 | frontend, ui, end-user, auth |
| [sso-saml-idp](nodes/sso-saml-idp.md) | LaunchPad as SAML 2.0 Identity Provider to downstream apps - global IdP and per-client IdPs, SP-initiated and IdP-initiated SSO. | 17 | 4 | auth, sso, saml |
| [internal-integrations-api](nodes/internal-integrations-api.md) | Internal REST endpoints for roster integration configs - CRUD, test, run-now, single-file CSV upload and validation, school-year switch, run stats and error reports. | 16 | 3 | api, admin, integrations |
| [adobe-lms-api](nodes/adobe-lms-api.md) | Internal REST routes under /api/internal/clients/{clientID}/adobeLMS - config CRUD, connection test, SSO launch into Adobe Learning Manager, and the course-completed webhook. | 15 | 3 | api, apps, adobe |
| [internal-query-api](nodes/internal-query-api.md) | Internal roster read endpoints implemented in api/launchpad - POST query streams for users/classes/courses/orgs/demographics/enrollments/roles, org-tree lookups, teachers of a school, plus custom user metadata and AUP acceptance. | 15 | 9 | api, roster, query |
| [internal-subscriptions-api](nodes/internal-subscriptions-api.md) | Internal REST endpoints for app subscriptions - which apps a client subscribes to, for which roles and org scope, plus ordering and deletion. | 15 | 4 | api, admin, apps |
| [sso-oidc-provider](nodes/sso-oidc-provider.md) | LaunchPad as OpenID Connect provider for downstream apps - discovery, authorize, token, userinfo, keys, revoke, logout; stateless HMAC tokens, RS256 id_tokens. | 15 | 2 | auth, sso, oidc |
| [admin-clients-ui](nodes/admin-clients-ui.md) | Accounts and Sub-Accounts list - search and filter child clients, add or bulk-upload accounts, assign app licenses, delete accounts, login analytics header. | 14 | 8 | frontend, admin-ui, accounts |
| [internal-student-transfer-api](nodes/internal-student-transfer-api.md) | Internal REST endpoints for student transfer requests between schools - list, submit, approve/reject/close, bulk approve, orgs with pending requests, and requests created by an integration run. | 14 | 3 | api, roster, transfers |
| [lp-badge-login-ui](nodes/lp-badge-login-ui.md) | Student sign-in without a password - QR badge scanner (QRLogin) and simple student login form (student id + optional name/DOB/school). | 14 | 3 | frontend, ui, end-user, auth |
| [internal-changes-api](nodes/internal-changes-api.md) | Internal REST endpoints for roster change history - per-entity history, client-wide history, role-permission history, and revert-to a prior version. | 13 | 2 | api, admin, history |
| [sso-session](nodes/sso-session.md) | Session hand-off endpoints under /auth - resume a parked app SSO request after login, and log out of the lp-token session. | 13 | 1 | auth, sso |
| [admin-client-settings-ui](nodes/admin-client-settings-ui.md) | Account Settings page - vertical tabs editing the client record and its config (details, sign-in, org metadata, student information, validations, single file upload, other settings, Adobe LMS, history) plus import/export of settings and roles. | 11 | 8 | frontend, admin-ui, accounts |
| [sso-cas-server](nodes/sso-cas-server.md) | Login via an external CAS 3.0 server (Pearson LaaS) - redirect, ticket callback and logout per cas authentication-provider row. LaunchPad is the CAS client, not a CAS server. | 11 | 2 | auth, sso, cas |
| [internal-admin-users-api](nodes/internal-admin-users-api.md) | Internal REST endpoints for console team members (admin users) - list/search, create/update/delete with client and app grants, password change/reset, and the public reset-password flow. | 10 | 6 | api, admin, team |
| [sso-saml-sp](nodes/sso-saml-sp.md) | LaunchPad as SAML 2.0 Service Provider to district IdPs - one SP per saml authentication-provider row (metadata, login, ACS, SLO). | 10 | 2 | auth, sso, saml |
| [validation-report](nodes/validation-report.md) | Per-run CSV of skipped/invalid roster rows (SyncReport_<start>.csv) written to the integration reports bucket and surfaced as a presigned reportUrl on the integration stat and as an email attachment. | 10 | 2 | integrations, validation, report |
| [internal-exports-api](nodes/internal-exports-api.md) | Internal REST endpoints for the export-downloads page (the caller's entity exports of the last 30 days with pre-signed URLs) and the users-with-details roster stream. | 9 | 2 | api, exports |
| [internal-metrics-api](nodes/internal-metrics-api.md) | Internal REST endpoints for client-side logging to Splunk (plus app-launch metrics), metric time-series and totals, and the dev/uat usage-analytics simulator. | 9 | 2 | api, metrics, analytics |
| [admin-transfer-requests-ui](nodes/admin-transfer-requests-ui.md) | Student Transfer Requests page - tabs for requests awaiting my approval and my submitted requests, status and from/to school tree filters, approve/reject/close single or select-all bulk approve, and the Request Student Transfer modal used from the Users list. | 8 | 5 | frontend, admin-ui, transfers |
| [admin-integrations-ui](nodes/admin-integrations-ui.md) | Data Import screens - roster integration list, create/edit modal (details, mapping, sync schedule, note), run and upload, run history and per-run stat, plus Single File Upload tab per entity. | 7 | 6 | frontend, admin-ui, integrations |
| [admin-launchpad-setup-ui](nodes/admin-launchpad-setup-ui.md) | LaunchPad Setup page for a client - licensed and system app tiles with per-app settings (visibility roles, data sharing limits, live data sync, Adobe LMS), additional local links, sidebar content, validation and role preview. | 7 | 10 | frontend, admin-ui, apps, launchpad |
| [internal-auth-providers-api](nodes/internal-auth-providers-api.md) | Internal REST endpoints to configure a client's sign-in providers (SAML, OIDC, CAS, Clever, ClassLink, Google, LaunchPad password/badge, simple student login). | 7 | 2 | api, admin, auth |
| [internal-role-permissions-api](nodes/internal-role-permissions-api.md) | Internal REST endpoints to read and edit a client's per-role permission matrix and download it as an XLSX workbook. | 7 | 2 | api, admin, permissions |
| [admin-dashboard-ui](nodes/admin-dashboard-ui.md) | Admin Dashboard (ClientHome) for a non-super client - roster entity counts, recent integration sync activity, pending transfer requests and usage analytics cards. | 6 | 8 | frontend, admin-ui, dashboard |
| [admin-exports-ui](nodes/admin-exports-ui.md) | Admin Downloads page listing the user's async roster export requests (status Ready/Preparing/Pending/Failed) with download links; roster list pages enqueue the exports. | 6 | 4 | frontend, admin-ui, exports |
| [aws-cloudfront-dashboard](nodes/aws-cloudfront-dashboard.md) | Public CloudFront edge per environment - serves the config-client SPA from S3 and proxies api, auth, signin, accountselect and docs paths to the API ALB. | 6 | 1 | infra, aws, edge |
| [admin-analytics-ui](nodes/admin-analytics-ui.md) | Usage Analytics / Usage Reporting page and reusable login and app-launch metric widgets (totals, period-over-period change, charts) for team members. | 5 | 4 | frontend, admin-ui, analytics |
| [admin-login-ui](nodes/admin-login-ui.md) | Pearson team-member console sign-in page (email and password) with forgot-password and the emailed reset-password page. | 5 | 5 | frontend, admin-ui, auth |
| [admin-apps-ui](nodes/admin-apps-ui.md) | App Setup and Licensing (super client) - application catalogue, create/edit app config (auth SAML/OIDC, launch), app detail page with per-account license add/remove and delete application. | 4 | 8 | frontend, admin-ui, apps |
| [admin-data-validation-ui](nodes/admin-data-validation-ui.md) | Roster data validation rule editor (Account Settings tab) and the per-app App Data Validation dialog launched from LaunchPad Setup. | 4 | 5 | frontend, admin-ui, data-validation |
| [admin-permissions-ui](nodes/admin-permissions-ui.md) | Role Permissions page - per-role tabs to enable a role, set alias and notes, choose view/edit/create levels for every permission key (incl. roster edit-user-type limits), see user counts, download permissions and view per-role change history. | 3 | 8 | frontend, admin-ui, permissions |
| [admin-team-members-ui](nodes/admin-team-members-ui.md) | Team Members page (super client) - search, add, edit, duplicate and delete Pearson console users with a default role, per-account roles, per-app roles and tags. | 3 | 9 | frontend, admin-ui, team-members |
| [admin-auth-providers-ui](nodes/admin-auth-providers-ui.md) | Authentication page - list, add, edit and delete a client's sign-in providers (SAML, OIDC, CAS, Clever, ClassLink, Google, Manual LaunchPad Login with QR/badge, Simple Student Login) with button logo and attribute mapping. | 2 | 4 | frontend, admin-ui, auth |
| [health-check-api](nodes/health-check-api.md) | Unauthenticated liveness route GET /ping and the static /docs mount served by the API process. | 2 | 0 | backend, ops |

## integration (17)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [subscribed-app](nodes/subscribed-app.md) | Downstream applications (ADAM, Navvy, Propel...) subscribed to a LaunchPad client - they receive roster change webhooks, SSO launches, and call back the OneRoster external API. | 16 | 1 | integration, notifications |
| [adobe-learning-manager](nodes/adobe-learning-manager.md) | Adobe Learning Manager (learningmanager.adobe.com) primeapi v2 and OAuth refresh endpoint, used to provision users, set profile/Org fields and managed offices; also a SAML SP and webhook sender. | 11 | 0 | apps, adobe, external |
| [new-relic](nodes/new-relic.md) | New Relic APM agent (go-agent v3 + nrgin middleware) on the API process when NEW_RELIC_LICENSE_KEY is set; the SPA also loads a browser agent. | 10 | 1 | ops, observability |
| [oneroster-provider-api](nodes/oneroster-provider-api.md) | Third-party OneRoster 1.1/1.2 REST endpoints (SIS vendors) polled as roster sources through the generic OneRosterAPI client and its OAuth1/OAuth2 authenticators. | 10 | 0 | integrations, external, oneroster |
| [google](nodes/google.md) | Google - OIDC sign-in for rostered users (google provider type) and the Google Maps Address Validation API used to validate org addresses. | 9 | 0 | auth, sso |
| [aws-secrets-manager](nodes/aws-secrets-manager.md) | AWS Secrets Manager read at startup by the export lambda to turn secret ARNs in env vars (DB connections, Google API key) into values; other processes receive secrets already injected as env vars. | 8 | 0 | aws, security |
| [sftp](nodes/sftp.md) | Customer or vendor SFTP servers from which file-based integrations download the newest roster zip (password or PEM key auth). | 8 | 0 | integrations, external |
| [clever-api](nodes/clever-api.md) | Clever - district roster data API (v3.1 districts, schools, terms, courses, users, sections, events) and Clever OAuth SSO for rostered users; both use the global CLEVER_CLIENT_ID/SECRET. | 7 | 1 | integrations, auth, sso |
| [pearson-ies](nodes/pearson-ies.md) | Pearson IES identity service (OIDC) used for Pearson staff / team-member sign-in to the admin console; matched to admin_users by email. | 6 | 0 | auth, sso |
| [powerschool-api](nodes/powerschool-api.md) | A district's PowerSchool SIS server - /ws/v1 XML resources and /ws/schema/table JSON table queries, OAuth2 client credentials; polled by the powerschool_api source. | 6 | 0 | integrations, external, powerschool |
| [sendgrid](nodes/sendgrid.md) | SendGrid v3 mail-send API - the only transactional email provider actually used by the backend. | 6 | 1 | email |
| [aws-waf](nodes/aws-waf.md) | AWS WAFv2 web ACLs (regional for the ALB, CloudFront-scope for both distributions) plus Shield Advanced protections. | 4 | 0 | infra, aws, security |
| [edfi-api](nodes/edfi-api.md) | An Ed-Fi ODS/API v3 instance (school-year scoped) with Change Queries and /deletes feeds, OAuth2 client credentials; polled by the edfi source. | 4 | 0 | integrations, external, edfi |
| [utah-usbe-api](nodes/utah-usbe-api.md) | Utah State Board of Education OneRoster 1.2 API (with metadata.usbe extensions and legacy /api/v1 endpoints) used as the UA Plus roster source. | 4 | 0 | integrations, external, utah |
| [classlink](nodes/classlink.md) | ClassLink OAuth2 identity provider used for rostered-user SSO (classlink provider type); users matched on verified email plus username. | 3 | 0 | auth, sso |
| [postmark](nodes/postmark.md) | Postmark email API - only a POSTMARK_API_KEY setting remains; no code sends through Postmark. | 2 | 1 | email |
| [splunk](nodes/splunk.md) | Splunk HTTP Event Collector client and zerolog writer in utils/splunk - not wired into logging; logs go to stdout JSON. | 2 | 0 | ops, logging |

## datastore (4)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [postgres](nodes/postgres.md) | Primary PostgreSQL database (with read replica) holding tenants, config and school_year-partitioned roster data; WAL feeds notifications. | 47 | 0 | data |
| [s3](nodes/s3.md) | AWS S3 buckets - LP_EXPORT_REPORTS_BUCKET (entity export CSVs), LP_INTEGRATION_REPORTS_BUCKET (integration validation reports, transfer-request files, uploaded roster packages) and PUBLIC_S3_BUCKET (logos served via CloudFront). | 26 | 0 | data, aws |
| [dynamodb](nodes/dynamodb.md) | AWS DynamoDB on-demand tables created at runtime per environment and year - CHANGE_EVENTS_ENV_SCHOOLYEAR for change history and METRICS_ENV_YEAR for metrics; used whenever APP_URL is not localhost. | 14 | 0 | data, aws |
| [sqs](nodes/sqs.md) | AWS SQS queue named by LP_EXPORT_ENTITIES_QUEUE_NAME that carries entity-export jobs from the API to the export lambda (10 s delivery delay). | 12 | 0 | aws, exports |

## event (3)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [integration-job](nodes/integration-job.md) | A queued integration run - an integration_queue row whose jsonb payload is the pending IntegrationStat; enqueued by the scheduler (scheduled, delta) or the internal API (manual) and executed by a worker. | 15 | 2 | async, integrations |
| [roster-change-notification](nodes/roster-change-notification.md) | JSON webhook POSTed to a subscribed app when a roster, client or role-permission row of its client (or a descendant client) is inserted, updated or deleted - carries a OneRoster GUIDRef and status, not the data. | 15 | 8 | notifications |
| [entity-export-job](nodes/entity-export-job.md) | JSON AsyncExportPayload sent to the SQS export queue after an entity_export row is created; consumed by the export lambda which writes the CSV to S3. | 14 | 1 | exports, aws |

## config (11)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [sso-credentials](nodes/sso-credentials.md) | Global OAuth client ids/secrets and issuers for Clever, ClassLink, Google and Pearson IES sign-in (also the Clever roster API credentials). | 19 | 0 | config, auth |
| [jwt-settings](nodes/jwt-settings.md) | JWT_SIGNINGKEY and JWT_ISSUER - the single symmetric secret behind lp-token sessions, every HMAC-signed cookie/token, OIDC OP codes and tokens, and utils AES encryption. | 17 | 0 | config, auth, security |
| [database-connection](nodes/database-connection.md) | Postgres settings - LP_PG_CONNECTION (primary, also used for WAL replication), LP_PG_REPLICA_CONNECTION (read pool, defaults to primary), MAX_CONNECTIONS (100) and DEBUG_SQL (per-query logging). | 13 | 0 | config, data |
| [saml-keys](nodes/saml-keys.md) | Platform RSA key pair (cert + private key) loaded at startup into common.CertKeyStore - signs SAML IdP/SP messages, per-client IdP certs and OIDC id_tokens; from SAML_*_SECRET env or SAML_CERT_PATH/SAML_KEY_PATH files. | 13 | 0 | config, auth, security |
| [aws-resource-names](nodes/aws-resource-names.md) | AWS_REGION (default us-east-1) and resource names - PUBLIC_S3_BUCKET + PUBLIC_CLOUDFRONT_URL (logos), LP_EXPORT_REPORTS_BUCKET, LP_INTEGRATION_REPORTS_BUCKET and LP_EXPORT_ENTITIES_QUEUE_NAME. | 11 | 0 | config, aws |
| [cors-domains](nodes/cors-domains.md) | APP_URL (public SPA origin, link base, New Relic app name and the localhost dev switch) and CORS_DOMAINS (comma-separated origin suffixes allowed by CORS, default navvyeducation.com, adamexam.com, pearson.com, bam.nr-data.net). | 9 | 0 | config, security |
| [app-type](nodes/app-type.md) | APP_TYPE env var selecting what the main binary runs - INTEGRATION_SCHEDULER (scanner + worker only), DEV (scheduler + WAL notifier + API, the default when unset) or anything else (API only). | 8 | 0 | config, runtime |
| [env-config](nodes/env-config.md) | ENV env var naming the deployment environment - suffix of the WAL replication slot (launchpad_ENV), prefix of DynamoDB tables (CHANGE_EVENTS_ENV_*, METRICS_ENV_*) and of S3 export keys. | 7 | 0 | config |
| [email-api-keys](nodes/email-api-keys.md) | SENDGRID_API_KEY (used by every outgoing email) and POSTMARK_API_KEY (loaded but unused). | 6 | 0 | config, email |
| [new-relic-config](nodes/new-relic-config.md) | NEW_RELIC_LICENSE_KEY - enables the New Relic Go agent and nrgin middleware on the API when non-empty. | 3 | 0 | config, observability |
| [client-env-config](nodes/client-env-config.md) | Build-time VITE_* env vars of the config-client SPA - backend base URL, New Relic browser agent ids/key, prod devtools flag. | 2 | 0 | frontend, config |

## flow (18)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [notify-apps-of-roster-change](nodes/notify-apps-of-roster-change.md) | Any committed roster, client or role-permission row change is read from the Postgres WAL by the notifications service, saved as a change-history snapshot and POSTed as a reference-only notification to every subscribed app of the client and its ancestors. | 10 | 6 | notifications, async, roster |
| [upload-roster-file](nodes/upload-roster-file.md) | Console upload of a roster file - single-file CSV, OneRoster CSV zip, PSL student CSV or student-update CSV - archived to S3 and run synchronously-in-a-goroutine through the integration engine, then welcome and transfer emails. | 10 | 11 | integrations, roster, upload, admin |
| [run-scheduled-integration](nodes/run-scheduled-integration.md) | Cron-scheduled (or Run-now) roster sync - scanner enqueues a pending integration-stat into the SQL queue, a worker runs the source adapter through validation and hash-upsert, bulk-deletes stale rows, writes the report and emails it. | 9 | 10 | integrations, async, roster |
| [end-user-sign-in](nodes/end-user-sign-in.md) | A rostered student or teacher finds their account, picks a sign-in method (district SSO, Clever, ClassLink, Google, CAS, LaunchPad password, simple student login or QR badge) and ends with an lp-token session on the launchpad. | 8 | 9 | auth, login, end-user |
| [sso-into-app](nodes/sso-into-app.md) | A student or teacher opens a downstream app; the app starts SAML or OIDC SSO at LaunchPad, the request is parked in a signed cookie while the user signs in, then LaunchPad resumes it and posts a SAML assertion or OIDC code back to the app. | 7 | 9 | auth, sso, apps, security |
| [transfer-student](nodes/transfer-student.md) | School staff request to move a student from a school outside their hierarchy; district admins of the source school are emailed, approve (single or bulk, one transaction via ApproveLegacyTransferRequests) and TransferStudent ends the old student role and creates a primary role at the new school. | 7 | 9 | roster, transfers |
| [delete-client-account](nodes/delete-client-account.md) | Deleting an account with no active children marks the client tobedeleted, then a background goroutine hard-deletes all its roster rows, exports, logins, admin grants, apps, providers and integrations without a transaction. | 5 | 6 | accounts, admin, data-loss |
| [app-pulls-roster-via-oneroster-api](nodes/app-pulls-roster-via-oneroster-api.md) | A downstream app exchanges its app-config client credentials for a 30-minute JWT and reads a subscribed client roster through the OneRoster 1.2 external API, filtered by the subscription scope. | 4 | 8 | api, oneroster, external, security |
| [badge-login](nodes/badge-login.md) | A teacher prints QR badges for students (badge user-login rows with a random secret), and a young student signs in by scanning the badge, which the backend verifies by HMAC before issuing an lp-token. | 4 | 7 | auth, login, badge, security |
| [create-client-account](nodes/create-client-account.md) | A console user with accounts write creates a sub-account (or bulk-creates from CSV); SaveClient inserts the client, inherits parent config and logo, then seeds the single-file integration, default org, parent link subscriptions and role permissions, and the UI adds app licenses. | 4 | 8 | accounts, admin |
| [edit-roster-from-console](nodes/edit-roster-from-console.md) | A console user creates or edits a user, org, class, course, session, demographic or enrollment on the Roster Data screens; the apicommons roster handlers run the same OR12 validation and integration consumer as a sync, then WAL notifies apps and records history. | 4 | 8 | roster, admin |
| [pull-roster-from-api-source](nodes/pull-roster-from-api-source.md) | An API-type integration run pulls a district roster from an external SIS or rostering API (OneRoster 1.1/1.2, Clever, PowerSchool, Ed-Fi, Utah USBE) with OAuth2, converts to OR12 and saves its delta cursor. | 4 | 11 | integrations, roster, api |
| [admin-console-login](nodes/admin-console-login.md) | A console team member (admin-user) signs in either with email and password (internal password grant) or through Pearson IES OIDC, getting a 30-minute admin lp-token scoped to their oldest client, then lands on the accounts or dashboard page. | 3 | 7 | auth, admin, login |
| [adobe-lms-sso-provisioning](nodes/adobe-lms-sso-provisioning.md) | Launching the Adobe Learning Manager system app provisions or refreshes the LaunchPad user in Adobe (profile, Org field, managed offices) and then SAML-SSOs them in as IdP; Adobe posts course completions back by webhook, which gate other apps. | 3 | 9 | apps, adobe, sso |
| [export-roster-entities](nodes/export-roster-entities.md) | Async CSV export of roster entities - a list query with Accept text/csv inserts a pending entity-export row and an SQS job, the export Lambda streams the rows to S3 and the Admin Downloads page serves a presigned link. | 3 | 7 | exports, roster, aws |
| [roll-over-school-year](nodes/roll-over-school-year.md) | An account admin moves a client to a new school year - optionally switches every integration to the new year, ensures a default org, and replays current-year orgs and selected users into the new year partition through the rollover data source, then remaps app subscription org scopes. | 3 | 7 | roster, accounts, school-year |
| [send-welcome-email](nodes/send-welcome-email.md) | A console user (or a single-file upload with sendWelcomeEmail) sends rostered non-students a welcome email; the email service upserts their LaunchPad user-login with a 5-day reset token and mails a set-password link through SendGrid. | 2 | 5 | email, auth, end-user |
| [deploy-launchpad](nodes/deploy-launchpad.md) | GitHub Actions builds and tests the backend, SPA and export lambda, pushes ARM64 images to ECR, retags per environment and terraform-applies; dev branch goes to smk and dev, prd branch to uat and pen-test, and a manually approved workflow promotes uat-latest to production. | 0 | 11 | infra, ci, deploy |

## concept (29)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [permission-model](nodes/permission-model.md) | How LaunchPad decides what a caller may do - per-role permission levels (none/view/edit/create) stored in role_permissions jsonb, resolved differently for admins, rostered users and OAuth apps. | 33 | 4 | permissions, auth, concept |
| [hash-upsert](nodes/hash-upsert.md) | How integrations write roster rows - batched INSERT ON CONFLICT (lpi, school_year) that updates only when the content hash differs and the incoming date_last_modified is not older. | 24 | 1 | integrations, roster, glossary |
| [lpi](nodes/lpi.md) | LaunchPad Identifier, the string lpi colon env colon client_code colon entityType colon sourcedId that uniquely names every roster row and is used as the cross-system key. | 22 | 8 | roster, identity, glossary |
| [school-year-partition](nodes/school-year-partition.md) | How LaunchPad stores roster data per school year using Postgres LIST partitions on a smallint school_year column, with composite (id, school_year) keys and yearly partition migrations. | 16 | 9 | roster, data, glossary |
| [team-member](nodes/team-member.md) | Team member - a console user stored in admin_users (Pearson staff or an invited admin), identified by a userCustomId starting with A, as opposed to a rostered user. | 8 | 3 | glossary, identity |
| [critical-warning](nodes/critical-warning.md) | Per-student flag computed at read time when an active student is missing a demographic or user-metadata field the client marked as warning (or required) in its Student Information settings. | 6 | 2 | roster, student-information |
| [integration-source-type](nodes/integration-source-type.md) | The integration_configs.type value (clever, or1p2_server, or1p2_csv, utah ...) and how the engine maps it, plus settings.type for file packages, to a source adapter. | 6 | 2 | integrations, glossary |
| [lp-token](nodes/lp-token.md) | lp-token - the LaunchPad session cookie, an HS256 JWT bound to the browser IP and user agent, carried by every signed-in team member and rostered user. | 6 | 2 | glossary, auth |
| [rostered-user](nodes/rostered-user.md) | Rostered user - a student, teacher or staff member who exists because the account's roster says so (users table), signs in to the launchpad and gets permissions from their OneRoster role. | 6 | 2 | glossary, identity |
| [school-year](nodes/school-year.md) | School year - the integer year (clients.school_year) that selects which yearly copy of the roster an account currently reads and writes. | 6 | 2 | glossary, roster |
| [sub-account](nodes/sub-account.md) | Sub-account - an account that sits under another account (a district under a state, a school under a district) and inherits some of its parent's setup. | 6 | 1 | glossary, tenancy |
| [super-client](nodes/super-client.md) | Super client - the root account with client_code 000001 that Pearson staff work in; it owns the app catalogue, team members and the Accounts list. | 6 | 1 | glossary, tenancy |
| [app-license](nodes/app-license.md) | App license (subscription) - the link that makes an app available to an account, carrying which roles see it, its order, org scope, data sharing and live-sync endpoint. | 5 | 1 | glossary, apps |
| [soft-delete](nodes/soft-delete.md) | Soft delete - roster rows and accounts are marked status tobedeleted rather than removed; roster rows stay, accounts are later hard-deleted. | 5 | 4 | glossary, roster |
| [system-app](nodes/system-app.md) | System app - a built-in LaunchPad tile (QR code badges or Adobe LMS) stored as an app_configs row with a special appType, as opposed to a licensed third-party app. | 5 | 1 | glossary, apps |
| [data-sharing](nodes/data-sharing.md) | Data sharing - the per-license switch (app_subscriptions.data_sharing) that decides whether an app may read the account's roster through the OneRoster API, optionally narrowed by scope. | 4 | 1 | glossary, apps, privacy |
| [filter-expression](nodes/filter-expression.md) | LaunchPad's OneRoster-style filter string language (field op value joined by AND/OR, plus LaunchPad extensions) parsed into a FilterExpression tree and compiled to bun WHERE clauses. | 4 | 1 | roster, api, query |
| [single-file-integration](nodes/single-file-integration.md) | Single File integration - the built-in or1p2_single_csv integration_configs row every account gets, used as the owner of console uploads, manual edits and reverts. | 4 | 1 | glossary, integration |
| [allow-manual-editing](nodes/allow-manual-editing.md) | Allow manual editing - an integration setting that lets admins hand-edit roster rows imported from an SIS feed, which are otherwise read-only in the console. | 3 | 1 | glossary, roster, integration |
| [bulk-delete-threshold](nodes/bulk-delete-threshold.md) | Bulk delete threshold - the per-integration percentage of existing rows a single run may mark deleted before LaunchPad refuses and marks the run incomplete. | 3 | 1 | glossary, integration, safety |
| [permission-level](nodes/permission-level.md) | Permission level - the 0 to 3 value (none, view, edit, create) stored per role per permission key, e.g. usersRosterData 2 means that role can view and edit users. | 3 | 1 | glossary, permissions |
| [placeholder-org](nodes/placeholder-org.md) | Placeholder org - the default top-level org created with every account, and pre-allocated stub rows inserted when a record references something not yet imported. | 3 | 1 | glossary, roster |
| [custom-role](nodes/custom-role.md) | Custom roles - five extra role slots (customRole1 to customRole5) an account can enable and name for staff types OneRoster does not have. | 2 | 2 | glossary, permissions |
| [role-display-name](nodes/role-display-name.md) | Role display name - an account-specific alias for a role (role_permissions.role_alias) shown in the UI and required in import files instead of the OneRoster role name. | 2 | 1 | glossary, permissions |
| [launchpad](nodes/launchpad.md) | LaunchPad - the whole Pearson rostering and SSO platform, and also, lower-case, the end-user page of app tiles; context decides which. | 1 | 3 | glossary |
| [managed-office](nodes/managed-office.md) | Managed office - an Adobe Learning Manager grouping that LaunchPad assigns users to by district name during Adobe SSO, so district managers in Adobe see their people. | 1 | 2 | glossary, lms |
| [sourced-id](nodes/sourced-id.md) | sourcedId - the identifier a source system gives a roster record, kept verbatim in sourced_id and embedded in the LPI; unique only within an account, type and year. | 1 | 3 | glossary, roster, identity |
| [sync-mode](nodes/sync-mode.md) | Delta vs full sync - an integration run either fetches only what changed since last time (delta, the scheduled default) or re-reads everything (full). | 1 | 3 | glossary, integration |
| [tenant-account](nodes/tenant-account.md) | Account (code name client) - one customer tenant such as a state, district or school; everything in LaunchPad is scoped to it. | 1 | 1 | glossary, tenancy |

## capability (29)

| node | summary | in | out | tags |
|---|---|---|---|---|
| [student-information-export](nodes/student-information-export.md) | Client-configurable student export - columns, order and custom headers come from the Student Information settings, filtered by the viewer's role access and economic-details permission. | 10 | 4 | roster, export, student-information |
| [launchpad-setup](nodes/launchpad-setup.md) | LaunchPad Setup - a district admin decides which licensed and system apps appear on their users' launchpad, for which roles and schools, what roster data each app may see, and extra links and sidebar content. | 7 | 5 | capability, admin-console, apps |
| [live-data-sync](nodes/live-data-sync.md) | Live data synchronization - LaunchPad notifies a subscribed app within seconds whenever roster, account or role-permission data of a licensed account changes. | 6 | 6 | capability, apps, roster |
| [oneroster-api-access](nodes/oneroster-api-access.md) | OneRoster API for apps - licensed apps read an account's roster through a standard OneRoster 1.2 REST API using their own credentials, limited to the data the district shares. | 6 | 6 | capability, apps, roster |
| [adobe-lms-integration](nodes/adobe-lms-integration.md) | Adobe LMS integration - users open Adobe Learning Manager from LaunchPad already signed in and provisioned, and completing a required course can unlock other apps. | 5 | 5 | capability, apps, lms |
| [account-settings](nodes/account-settings.md) | Account Settings - a district admin edits their account's details, sign-in options, org metadata, student information columns, validations, single file upload defaults, Adobe LMS and history. | 4 | 4 | capability, admin-console |
| [authentication-settings](nodes/authentication-settings.md) | Authentication page - a district admin chooses how their users sign in (SAML, OIDC, CAS, Clever, ClassLink, Google, LaunchPad password with QR badges, simple student login). | 4 | 6 | capability, admin-console, sso |
| [launchpad-portal](nodes/launchpad-portal.md) | The launchpad page - after signing in, a student or teacher sees tiles for every app their district licensed for their role and opens them with one click. | 4 | 5 | capability, end-user |
| [single-file-upload](nodes/single-file-upload.md) | Single file upload - an admin uploads one CSV of a single kind (orgs, students, staff, classes, courses, enrollments) to add or update roster records without a full SIS feed. | 4 | 6 | capability, roster, integration |
| [sis-roster-sync](nodes/sis-roster-sync.md) | SIS roster sync (Data Import) - LaunchPad keeps each account's roster up to date by pulling from the district's student information system or rostering service on a schedule. | 4 | 15 | capability, roster, integration |
| [sso-to-apps](nodes/sso-to-apps.md) | Single sign-on into apps - LaunchPad acts as the identity provider so a signed-in user opens ADAM, Navvy and other apps without another login. | 4 | 7 | capability, sso |
| [account-management](nodes/account-management.md) | Accounts and Sub-Accounts - Pearson staff and district admins create, find, license and delete customer accounts and the child accounts beneath them. | 3 | 6 | capability, admin-console, tenancy |
| [qr-badge-login](nodes/qr-badge-login.md) | QR badge login - teachers print QR code badges for their students, who sign in by holding the badge up to the camera. | 3 | 5 | capability, end-user, sso |
| [rostered-user-sign-in](nodes/rostered-user-sign-in.md) | Sign in to LaunchPad - students, teachers and district staff find their district and sign in with the district's chosen method (SSO button or LaunchPad username and password). | 3 | 9 | capability, end-user, sso |
| [school-year-rollover](nodes/school-year-rollover.md) | School-year rollover - at the start of a new school year an admin moves the account to the new year, optionally copying its schools forward, so imports and the console work on fresh data. | 3 | 5 | capability, roster |
| [acceptable-use-policy](nodes/acceptable-use-policy.md) | Acceptable use policy (AUP) - an account can require users to accept its usage policy before they reach their apps; acceptance is recorded per user. | 2 | 4 | capability, end-user |
| [data-validation-rules](nodes/data-validation-rules.md) | Data validation rules - an account defines extra checks (required fields, formats) that imported roster rows must pass, and can see how many records each app would reject. | 2 | 4 | capability, roster, validation |
| [role-permission-management](nodes/role-permission-management.md) | Role Permissions - a district admin decides, per role, what that role may see and change in the console (none, view, edit, create) and can rename or enable roles. | 2 | 4 | capability, admin-console, permissions |
| [roster-change-history](nodes/roster-change-history.md) | Change history and revert - admins see who or what changed a roster record over time and can restore a record to an earlier version. | 2 | 4 | capability, roster, audit |
| [simple-student-login](nodes/simple-student-login.md) | Student Sign In - young students sign in with just their student id (plus optional name, birth date or school) instead of a password. | 2 | 4 | capability, end-user, sso |
| [user-impersonation](nodes/user-impersonation.md) | Login as user (impersonation) - a permitted admin opens LaunchPad as a specific student or teacher to see exactly what they see. | 2 | 4 | capability, admin-console, support |
| [admin-dashboard](nodes/admin-dashboard.md) | Admin Dashboard - the landing page a district admin sees with roster counts, recent sync activity, pending transfer requests and usage cards for their account. | 1 | 5 | capability, admin-console |
| [app-licensing](nodes/app-licensing.md) | App Setup and Licenses - Pearson staff register downstream apps (ADAM, Navvy, Propel...) with their SSO and rostering settings and license them to accounts. | 1 | 5 | capability, admin-console, apps |
| [org-address-validation](nodes/org-address-validation.md) | Org address validation - LaunchPad checks school and district shipping addresses against Google so that materials and reports ship to real addresses. | 1 | 4 | capability, roster |
| [roster-export](nodes/roster-export.md) | Downloads and roster exports - admins export a roster list to CSV, large exports are prepared in the background and collected from the Downloads page. | 1 | 5 | capability, admin-console, export |
| [team-member-management](nodes/team-member-management.md) | Team Members - Pearson staff manage the console users who administer accounts, with a default role, per-account roles, per-app roles and tags. | 1 | 4 | capability, admin-console |
| [usage-analytics](nodes/usage-analytics.md) | Usage Analytics - Pearson team members see login and app-launch counts and trends per account over time. | 1 | 4 | capability, admin-console, analytics |
| [roster-data-management](nodes/roster-data-management.md) | Roster Data - admins browse, filter, view and hand-edit the orgs, users, roles, demographics, sessions, courses, classes and enrollments of their account. | 0 | 7 | capability, admin-console, roster |
| [transfer-requests](nodes/transfer-requests.md) | Transfer Requests - school staff request that a student move to another school and the receiving side approves or rejects it, singly or in bulk. | 0 | 6 | capability, admin-console, roster |
