BoreReady Troubleshooting

I ran out of seats — what now?

You'll see the seats card turn red on /trainer with "Out of seats — contact support", and the Start a training form will block submission.

What to do: email jordandamhof@gmail.com with your provider name (PROV-XXXX) and the number of seats you need. We'll process the top-up within one business day.

What NOT to do: don't try to work around the block by creating users directly in the desk or sharing one trainee account across multiple people — the audit log catches this, and each trainee needs their own Certification Record to get a real card.

Trainee didn't receive the welcome email

  1. Ask the trainee to check their spam folder — Gmail, Outlook, and most corporate filters flag system-generated "welcome" emails.
  2. If still missing, use /trainer/start-training to re-enroll the same trainee — the system is idempotent, won't double-charge a seat, but will re-send the welcome email.
  3. If the trainee's email is wrong on their row, ask them to sign up manually at https://boreready.v.frappe.cloud/login using the Sign up link, then send BoreReady support a note so we can link their new account to your cohort.

Trainee says the course wants $1,000 before they can view lessons

This was a bug in the pilot's early build and should be fully fixed as of April 2026. If a trainee sees "You need to complete the payment for this course before enrolling":

  1. Confirm you enrolled them through /trainer/start-training and that your seat count dropped by one.
  2. If the seat dropped but the trainee still hits the wall, they're missing their LMS Enrollment record — email BoreReady support with the trainee's email and we'll reconstruct it (takes about 30 seconds on our end).
  3. If the seat didn't drop, the enrollment didn't complete at all — re-run Start a training with just that trainee's row.

I enrolled a trainee but my seat count didn't drop

The seat accounting updates on every successful enrollment. If it didn't drop:

  • Trainee was already enrolled — re-enrolling someone who's already in your cohort doesn't consume a seat (that would double-charge you). This is expected, not a bug.
  • Something threw mid-enrollment — the per-trainee savepoint rolled back. Check the results panel after submit; any row with a ✗ didn't actually enroll.
  • Page was stale — refresh /trainer; the seat card reads live from the database.

A trainee forgot their password

Direct the trainee to https://boreready.v.frappe.cloud/login and click Forgot Password? They enter their email and receive a password-reset link. The reset link is valid for 24 hours.

If they don't receive the reset email, same playbook as missing welcome email: check spam, then email BoreReady support.

I can't sign off a hands-on session — it's greyed out

Sign-off requires that the hands-on session record exists first — created automatically when the trainee advances through the module. If the button is greyed out or the session is missing:

  • The trainee hasn't reached that module yet (classroom portion pending).
  • You're logged in as a user not linked to a Squti Instructor for that trainee's provider. Check the top-right of /trainer — it should show your name.
  • The session already got signed by another instructor. Check /trainer/sign-off for the trainee; completed signatures are dated and unsigned ones show as pending.

Trainee doesn't see the exam after completing all modules

The exam only unlocks when every module is marked complete on both the classroom and hands-on side. If a trainee doesn't see it:

  • Check /trainer/exam — it lists who's ready, who's not, and why.
  • The most common reason: one hands-on session is missing an instructor signature. Sign it off, then the exam unlocks within a minute.
  • If every module shows complete but the exam still doesn't load, email BoreReady support with the trainee email.

Trainee passed the exam but no card was issued

Card issuance is gated on three things: (1) the trainee passed the exam, (2) your provider's DLI approval is finalized, and (3) your provider_abbr is set (per AC-CARD-03 certification ID format requires {ABBR}-{YYYY}-{SEQUENTIAL}).

Check /trainer/provider — if Provider Abbreviation is blank, set it to your 2–4-letter code (e.g. "MUG" for Midwest Underground). Cards for all passed trainees regenerate the next time card issuance runs.

If your provider is approved and the abbreviation is set but no card issued, contact support.

My DLI approval status says 'Pending' but I submitted weeks ago

Self-service status: BoreReady updates approval_status when DLI sends us their decision. If you submitted your packet more than two weeks ago and your status is still "Pending":

  1. Double-check /trainer/approval — the status strip at the top reflects whatever DLI last told us. If it says "Under Review", they have it and are working through it.
  2. DLI's point of contact for training-provider approvals is Don Sivigny (don.sivigny@state.mn.us). Email him directly for a status update — BoreReady doesn't receive progress pings, only final approvals.
  3. Once DLI sends you an approval letter, forward it to BoreReady support — we update the record and cards unlock.

My trainees page is empty after I enrolled some

/trainer/trainees filters by your provider. If it's empty:

  • No one has been enrolled yet. Go to /trainer/start-training.
  • Your account isn't linked to a Squti Instructor record. Check /trainer — if the top strip says "Account not linked", email support.
  • You're viewing a stale cached version. Hard-refresh (Cmd-Shift-R / Ctrl-Shift-R).

My company info is wrong on the card preview

Update company name, DLI license number, website, and contact info via /trainer/provider. Provider abbreviation is updatable but triggers a re-validation of all card formats, so pick it carefully.

What you cannot change directly: approval status, approval date, DLI course number. Those come from DLI. If DLI sent you a corrected approval letter with a different course number, forward it to BoreReady support.

Settings page doesn't save my changes

/trainer/settings saves to a per-user Squti User Preferences record. If your changes don't stick:

  • Check the top-right for your login — you may be logged in as the wrong user.
  • Your session cookie may have expired. Log out and log back in.
  • Browser cache sometimes returns stale data — hard-refresh (Cmd-Shift-R / Ctrl-Shift-R).

If none of those help, the per-user preferences record may be missing. Email BoreReady support with your email address; we'll initialize it.

Some CSV rows were skipped — what went wrong?

If the Add from CSV button on /trainer/start-training reports rows skipped:

  • "missing email" — the email column was blank for that line. Fill it in and re-paste.
  • "bad email '...'" — the email didn't match the basic shape name@domain.tld. Check for typos.
  • "missing name for ..." — both first and last name were blank. At least one of them must be set.
  • "duplicate skipped" — the same email appeared twice in your CSV. Only the first row was added.
  • "already in form above" — the email matched a row you already added manually. The CSV row was skipped to avoid duplicate enrollment.

You see the parse summary BEFORE you submit, so you can fix the rows and re-paste. Bad rows do NOT get sent to the server.

My audit CSV download is missing rows I expected

If a download from /trainer/audit is missing rows you expected:

  • REPORT-EXAM filters by administered_at date range. Too narrow → attempts outside the window won't appear. Try expanding the range.
  • REPORT-ROSTER only includes installers with an issued card (a certification_number). In-progress trainees are intentionally excluded — see the trainer dashboard "in progress" tile for that view.
  • REPORT-SESSION unions classroom + hands-on sessions. If passed_count is empty, that's by design — the session-to-exam linkage isn't in the shipped data model yet.
  • REPORT-CARD only includes certs that went through the issuance flow (have a card number). Pre-issuance certs are not in this report.

If a column reads empty (last_refresher_completion, delivery_method, revocation_reason, revoked_at), that's because the underlying data model for that field doesn't exist yet — those columns are emitted with the spec's expected header but won't populate until the corresponding feature ships.

A cert went from Active to Suspended overnight without me doing anything

If a cert went from "Certified (Active)" to "Suspended" overnight without you doing anything:

  • The lifecycle cron does NOT auto-suspend at end-of-grace. Suspension only happens via your DLI provider-approval status flipping to Suspended (which cascades to all your provider's certs) OR via direct operator action.
  • Check /trainer/provider — if your DLI approval was suspended, all your active certs flipped with it. Resolve the approval issue and the certs will restore.
  • If your DLI approval is fine but a single cert is Suspended, email BoreReady support — that's a manual write that shouldn't have happened automatically.

I didn't get an email when a trainee passed the exam

If you didn't get the "X passed the exam — ready for their card" email when a trainee passed:

  • Check spam — the sender shows as "Frappe" today (rebrand pending Jordan's manual SMTP setup).
  • Check your /trainer/settings — if you toggled Email notifications off, the system respects that and skips you.
  • Verify your account is the linked user on a Squti Instructor record at your provider. Email-only instructor rows (no User link) don't get notifications.

If none of those: the sendmail is fail-soft on purpose so a mail-server hiccup doesn't break the exam-attempt insert. Look for the trainee on /trainer/exam — if they're showing "Passed — ready for card" there, you can issue from that page directly without needing the email.

The /cards/<number> page shows 'Card not found'

If /cards/<NUMBER> shows "Card not found" when you know the trainee has a card:

  • Check the cert's status. Only Certified (Active) and Expiring render. Suspended / Expired / Grace Period / pre-issuance return 404 by design.
  • Check the URL — the number is case-sensitive (e.g. NUTC-2026-00001, all caps).
  • If you're a different trainer than the one who issued the card, you'll get 404 (not 403) — cross-business access is hidden, not denied with a leak.
  • The trainee viewing their own card always works regardless of who issued it.
Can't find what you need? Email jordandamhof@gmail.com.