Every persona, three independent checks
The same records, read three ways. If the three numbers ever disagree, the configuration is wrong — not the widget.
1 · What the widget shows
Overall %, progress by level and What's Next computed through the widget's own code path, for that user only.
2 · The report an admin would read
Recomputed from the raw enrollment list the way the Users–Learning Plans report presents it: completed required courses ÷ required courses.
3 · API cross-check
Completed enrollments that belong to the user's plans, straight from the enrollments endpoint — and a leakage test: any course outside the user's own plans fails.
| Associate | Persona | Widget (API, as learner) | Report (API, as admin) | Completed (API, raw count) | Levels (widget) | What's Next | Upcoming ILT | Leakage | Result |
|---|---|---|---|---|---|---|---|---|---|
| Not run yet. | |||||||||
Sign-off rule used in the walkthrough: every persona passes all three checks on two consecutive days before launch; after launch, a monthly reconciliation of a random sample. Add a persona by adding a user and enrollments to the tenant — the harness picks it up automatically.