Skip to content

Training & Onboarding

Enterprise feature — requires the enterprise image and a license with the Training & onboarding entitlement. See Enterprise edition.

A policy acknowledgement asks someone to confirm they’ve read a document. Training (from 0.78) goes further: any published document becomes a training deck that people work through slide by slide in a full-screen player, finishing with a compliance confirmation that records exactly which version of the document they were trained on. Assign decks with due dates, auto-assign them to new joiners, bundle them into onboarding programs, and track who’s done from one dashboard.

Open Training in the main navigation and click New deck (requires manager access). Pick the source document from a searchable picker — it shows the 10 most recently updated published documents, and typing filters the full list. Only published documents can become decks.

Deck settings:

  • Due in N days (1–365) — each assignment’s due date is computed from the day it’s assigned.
  • Auto-assign to new members — every new account (created locally, via SSO auto-provisioning, or by SCIM) is assigned the deck automatically on creation.
  • Active / inactive — deactivate a deck to stop new assignments without touching existing ones.

The deck’s slides are the document itself, split on --- (horizontal-rule) lines. The split is fence-aware — a --- inside a code fence doesn’t start a new slide. Editing the document is editing the training.

The editor toolbar has a training page break button that inserts the divider for you. In the editor’s preview a break shows as a labeled “Slide break” marker so authors can see the slide boundaries; on the published document page it renders as nothing at all, so ordinary readers never see training scaffolding.

End the document with a :::compliance block to set the exact wording of the final confirmation:

:::compliance
I have completed the fire-safety training and will follow the
evacuation procedure described here.
:::

Without one, a default confirmation wording is used. Either way, confirming records the person, the timestamp, and the exact document version they confirmed.

Add graded questions to any slide with a :::quiz block (there’s an editor toolbar button). Q: starts a question; - [x] marks the correct option — mark more than one to make it multi-select:

:::quiz
Q: Where may client files be stored?
- [ ] Personal laptop
- [x] The approved DMS
:::

Grading happens server-side — the answer key is stripped before slides reach the browser, so it can’t be read from the page source. Learners answer on the slides and submit at the confirmation gate; the deck’s pass threshold (default 80%, per-deck setting) must be met before the confirmation unlocks. Retakes are unlimited until the deck is confirmed, the latest score counts, and scores appear on the dashboard, in CSV exports, on certificates, and in the audit log. On the published document page a quiz block renders as nothing (like slide breaks); in the editor preview it shows as a labeled callout so authors can proofread the questions.

From 0.82 each deck card also shows question-level analytics: how often every question is answered correctly across attempts (including prior cycles). A question everyone misses is usually a confusing question — or a slide that doesn’t actually teach it.

Assign a deck to individual users, groups, or everyone. Assignment itself grants access to the document’s content in the player — an assignee can complete their training even if the document’s space isn’t otherwise visible to them. Each assignee gets a notification with a due date computed from the deck’s due-in-N-days setting.

New joiners are covered by the deck’s auto-assign switch (or by an onboarding program, below) — no one has to remember to assign the security training to the person who started Monday.

From 0.79, decks can be bundled into onboarding programs — named, ordered lists of decks (“Engineering onboarding”: security basics, incident process, code of conduct). Programs behave like decks, at a higher level:

  • Active programs auto-assign every deck they contain to new members.
  • Assigning a program to people, groups, or everyone creates all the individual deck assignments — but sends one notification naming the program, not one email per deck.

Policies have the same shape: a policy set (Compliance → Sets, 1.14.0) assigns a bundle of policies to people, groups or everyone as one unit, and to every new joiner automatically.

Rolling out CompassDocs training to a team that already did the training elsewhere? Waive a deck for selected people or for everyone (from 0.79):

  • Their assignments are marked complete immediately and recorded as waived — there is no confirmed version, because nothing was confirmed.
  • No notification is sent.
  • Waived shows as its own status — distinct from completed — in the dashboard and in the CSV export, so the record stays honest.

Each deck expands into a people table (from 0.81): status filter chips, name search, and per-person rows with due/completed dates, quiz scores, and prior-completion counts. Row checkboxes open a bulk-action bar — remind now (in-app + email, resets the reminder cadence), waive, extend due dates (someone on leave no longer trips the escalation), and unassign. Unassign removes open assignments only; completed rows are records and can never be removed — reopen them instead. Completed rows offer a per-person Reopen that archives the completion to history and asks the person to retake.

Deck and org CSVs share one schema — status (completed / waived / open), quiz score, and prior completions. From 0.81, Manage decks itself is a dense, searchable table: sort by title, lowest completion, or most overdue, filter by free-form deck tags (e.g. Safety, HR), and click a row to expand the full deck card. Managers can also preview any deck exactly as trainees will see it, without assigning it to themselves.

Click any name (people tables, the attention queue) for that person’s training transcript: every live assignment plus each prior certification cycle, with quiz scores, waivers, and confirmed document versions — printable, with its own CSV. This is the record auditors sample when they ask for one employee’s file.

Annual or periodic training: set Recertify every N months on a deck and each completed assignment automatically reopens once the interval elapses — the person is notified, the due clock restarts, and the prior completion is preserved in a history table (visible as a prior-completions count on the dashboard and in CSVs). Waived records recertify too, so grandfathered staff take the real training on the next cycle.

After a material document update, use the deck’s Reopen completed button to start a new cycle immediately for everyone who had finished — same history-preserving mechanics, without waiting for the interval.

Every real completion (waivers excluded) earns a printable certificate — person, deck, completion date, quiz score, confirmed document version, and the assignment record number. Learners reach it from the player and their My Training card; managers from the deck’s people list. Print to PDF for employee files. From 0.82 the certificate also shows the signed name (when the deck requires an e-signature) and the SHA-256 of the exact content confirmed.

For training where “I clicked a button” isn’t strong enough evidence, turn on Require e-signature in the deck’s settings. At the confirmation gate the trainee must type their full name exactly as it appears on their account (case and spacing don’t matter), and accounts with a local password must re-enter it; SSO accounts sign by typed name alone. The signed name is stored on the completion and shown on the certificate, in the people table CSVs, and in every export. The password check is throttled like a sign-in: five wrong passwords lock signing, and signing in with the username, for that account and address for fifteen minutes (the sixth attempt answers 429 “Too many failed attempts. Try again in 15 minutes.”; signing in with the email, possible since 1.16.0, is counted separately), and each wrong password is written to the audit log as auth.login_failed against the deck’s document, with auth.lockout when the fifth miss engaged the lock; the password itself reaches no row.

Independent of signatures, every completion records a SHA-256 hash of the exact document content confirmed — so even after the document is edited, an auditor can tie each historical confirmation to the precise text that was on screen.

Three tools built for the moment an auditor is in the room:

  • Compliance matrix — the Matrix tab shows every person with an assignment × every deck in one grid: done, waived, open, overdue, or not assigned. Search by name; export as CSV.
  • Point-in-time snapshots — a snapshot of the entire training record (totals, decks, matrix, every assignment row) is stored automatically every month, and on demand via Overview → Evidence → Take snapshot now. Each snapshot stores the exact JSON text it was hashed over along with its SHA-256 — run sha256sum on the downloaded file and it reproduces the stored hash, so the evidence is tamper-evident.
  • Audit package — one click on Audit package (ZIP) downloads everything at once: a summary, the matrix and all assignment/history records as CSV, every stored snapshot, and a manifest listing a SHA-256 for each file in the bundle. Exports are recorded in the audit log.

Enable Monthly report email under Overview and pick recipients: each month (alongside the automatic snapshot) they get completion rate, overdue counts, and the lowest-completion decks by email. The training_report template is editable like every other alert email.

Not everyone who needs visibility should manage the program. Under Overview → Team leads, name one or more leads per group: leads get a scoped /training/team page showing just their group’s members and status (a banner on their Training page links to it), plus a weekly email digest of where their team stands. Leads see nothing outside their own groups and need no section grant — leading the group is the access.

Since 1.14.0 the same group leads can also see policy standing for their members (Compliance → Team, when Program settings → Group leads see policy standing is on; see Team leads on the read confirmations page), and the weekly digest is one email for both programmes: a Training section when training is licensed, a Policies section when read confirmations are licensed and that setting is on. The digest is sent by a neutral scheduler, so a workspace licensed for read confirmations alone still gets it; the template is still training_team_digest. The Team leads block is the same on both Overviews (Training’s and Compliance’s), and the leads it names are one list.

The Overview tab gives training managers the whole program at a glance: active decks, people with assignments, overall completion, and per-deck completion bars (sorted lowest-completion first, with waived counted separately) — plus All records (CSV), one export across every deck with quiz scores and prior-completion counts.

From 0.81 the overdue list is a needs-attention queue: overdue assignments, quiz attempts below the pass threshold, and stalled trainees (started, then idle for 14+ days) in one actionable list with inline Remind, +7 days, and Snooze (hides the row for a week). Work it to zero; the header is honest about truncation (“showing 50 of N”).

Both from 0.79:

  • Archive hides a deck from everyone — learners and managers — while keeping its full assignment history. Archived decks are listed at /training/archived and can be restored at any time.
  • Permanent delete removes the deck and its open assignments — but from 0.81, completed assignments are archived to the completion-history table first (with name and title snapshots), so the evidence survives the deck. The same safeguard applies when a user account is deleted: their completed training is preserved in history before the account goes.

Everyone with open assignments sees a Training tab in the sidebar with a badge counting them. The Training page shows a card per assignment with its progress and due date. Opening one launches the player:

  • Next / Back buttons and arrow keys move between slides, with progress dots showing where you are.
  • Leaving and coming back resumes at the same slide; Save & exit (or Esc) leaves deliberately.
  • The final slide is the compliance gate: the confirmation wording (from the :::compliance block, or the default), and confirming completes the assignment — recording the exact document version confirmed.

From 1.17.0 the dashboard has a My training tile too. It lists up to three open assignments, overdue first, then by due date, each with Overdue or its due day and, for a deck with slides, a bar and “40% complete” from the slides seen so far. The title opens the player, the corner counts what is still open against everything assigned (“2 of 3 due”), and Go to Training opens the Training page. The tile needs the Training entitlement and the Read own training permission (training.read_own), which every built-in role has, and is left out when nothing is open. Without the entitlement it isn’t offered in Edit dashboard either.

Two notification kinds cover training, both with editable email templates:

  • training_assigned — sent when a deck (or program — one notification naming the program) is assigned.
  • training_due — due and overdue reminders. A background job runs hourly and reminds people whose assignment is due within 3 days or overdue, at most once per 3 days per assignment, so nobody is nagged daily.

From 0.80, when someone crosses a week overdue, the deck’s creator gets an in-app notification (once per assignment) so stalled training doesn’t go unnoticed.

0.82 adds two more editable templates: training_report (the monthly summary for chosen recipients) and training_team_digest (the weekly per-lead team summary). Both send only when SMTP is configured, and the weekly digest goes out once per ISO week however many app instances run. From 1.14.0 training_team_digest is labelled Team digest (leads), carries a {{policy_summary}} tag and defaults to the subject “[{{org_name}}] Your team this week”; an override saved before 1.14.0 keeps rendering as it did and must add the tag to show the Policies section (see email templates).

Admins always can. To delegate — an HR or L&D manager who shouldn’t need full admin rights — grant the person or a group the Training section under Settings → Section access: “Create training decks, assign them, and track completion (everyone always sees their own assignments).” As that description says, learners always see their own assignments — the grant is only about creating, assigning, and tracking.