05 · Admin — Operations & People

Requires: Admin (tester-staff-1, tester-admin-1) + Super Admin (sprinklejelly, yashmini) — most writes are Super Admin + main-site-check; destructive actions are flagged · Related: doc 04 for studios & content lifecycle, doc 06 for cross-role journeys · app under test: https://app.sprinklejelly.com

How this doc is organised

Each section covers one staff-console area: a route table, what the screens must do, then test cases. Cases a Super Admin alone can perform carry a Super Admin chip in the title; everything else works signed in as Admin (and should be re-checked as Super Admin where marked). Destructive or irreversible cases carry a Destructive — coordinate first warning: the owner accounts and the learner accounts (tester-learner-1..5) are shared, so agree targets in the team channel before running them.

The gate that guards every write

Every protected write in this doc (moderation, resets, reversals, erasure, holds, certificate actions, economy writes, broadcasts, WizBit settings, maintenance, publishing) is confirmed through the main-site check ≤15 minutes old. When it has lapsed, the confirming button reads "Confirm on the main site" — click through, verify on the main site, and you return to the same address with everything you typed (reasons, notes, ids) held in the tab. A typed name is typed again. That round-trip is expected; treat it as a feature to verify, not friction.

GENERATED_ASSISTANCE is off

Generated assistance is switched off on this deployment. Credit surfaces in Economy admin may legitimately read zero, empty or "off" — the test is honesty (nothing fabricated, nothing claiming activity), not the presence of Credit activity. XP corrections and settings still work and are fully testable.

1 · Operations hub & the staff console

/admin is the console's landing page for both staff roles. It lists up to ten needs-attention rows in priority order, the kept health signals, the owner-alert conditions, background work by area, and failed work waiting for recovery. Each reading says when it was taken; a part that cannot be read says so on its own and never counts as clear. The page reads again about once a minute while open, backing off after a failed read; the console header's health light shares the readings.

RouteScreenRole
/adminOperations — needs attention, signals, owner alerts, background work, waiting for recoveryBoth staff roles

Signal states: Healthy · Degraded · Down · Unknown — unreadable is never Healthy. Needs-attention rows, in priority order: account erasure → /admin/lifecycle?stage=attention, main-site changes → /admin/identity-delivery (Super Admin only), legal-hold review → /admin/lifecycle?hold=overdue, grading waiting >15 min → #background-work, failed rewards → /admin/economy/failed-rewards, certificate documents → /admin/certificates/parked-generations, submissions → /admin/submissions, content reports → /admin/reports, topic requests → /admin/topic-requests, Daily Challenge schedule → /admin/daily-challenges/schedule-health.

1.1 Operations — the hub itself

TC-OPS-001The hub renders all five regions, each saying when it was readP1

Preconditions

Signed in as Admin (tester-staff-1).

Steps

  1. Open /admin.
  2. Read the page top to bottom.
  3. Press Read again.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-002Needs-attention rows carry what, detail, count and a way to their pageP1

Preconditions

Operations hub open as Super Admin.

Steps

  1. Read each row of Needs attention.
  2. Follow several rows' Open arrows (erasure, submissions, topic requests, Daily Challenges).

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-003A row that cannot be read says "Couldn't be read" — never counted as clearP2

Preconditions

Hub open; needs one attention part to fail its read (hard to stage — mark N/A if it never happens, or catch it during a partial outage).

Steps

  1. Observe the hub while a backend read is failing (or during deployment hiccup), then restore.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-004Admin vs Super Admin on the hub — main-site changes and the publishing factP2

Preconditions

Both staff accounts available; compare the hub in two sessions.

Steps

  1. Open /admin as Super Admin; note the Main-site changes row and the header.
  2. Open it as Admin; compare.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-005Signals — all ten named, states honest, problems firstP1

Preconditions

Hub open.

Steps

  1. Read the Signals region row by row.
  2. Note order, status chips and the per-signal line.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-006Degraded capability, not all-down — interactive failing while grading is healthyP2

Preconditions

Needs the interactive execution service down while standard grading is healthy — stage only if the team has arranged it; otherwise mark N/A.

Steps

  1. While the interactive service is unreachable, open the hub and read Grading vs Interactive programs.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-007Background work by area — waits, runs, outcomes and timing figuresP2

Preconditions

Hub open.

Steps

  1. Open the "By area, over the last 24 hours" disclosure under Background work.
  2. Read a few areas' rows.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-008Waiting for recovery — failed work in staff words, linked to its owner's pageP2

Preconditions

Hub open; ideally a real failed job exists (a paused reward notice or parked certificate works). If none exists, mark N/A — do not manufacture failures.

Steps

  1. Open the Waiting for recovery disclosure.
  2. Read each row; follow the link on one that has one.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-009Owner alerts — delivery honesty, condition order, the kept noticesP2

Preconditions

Hub open.

Steps

  1. Read the Owner alerts region: the delivery line, the condition list, and any "would have been sent" disclosure.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-010Refresh behaviour — reads about once a minute, backs off after failureP3

Preconditions

Hub open for several minutes; dev tools network panel available.

Steps

  1. Watch the network calls for ~3 minutes without touching the page.
  2. Hide the tab for a minute and return.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-011The console health light mirrors the hub — Unknown when unreadableP2

Preconditions

Any staff page open.

Steps

  1. Find the compact health indicator in the console header.
  2. Compare it to the hub's worst signal; navigate between staff pages.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-012Console navigation — seven spaces, role-permitted destinations onlyP1

Preconditions

Signed in as Admin, then Super Admin.

Steps

  1. Read the console navigation as Admin.
  2. As Super Admin, compare.
  3. Type a Super-Admin-only address directly as Admin.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-013Learner reaching /admin gets the privacy-safe not-foundP1

Preconditions

Signed in as tester-learner-1.

Steps

  1. Open /admin and /admin/people directly.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-014Phone layout — bottom dock, folded breadcrumb, side panels over listsP3

Preconditions

A phone-width viewport (~390 px) as staff.

Steps

  1. Open the console on a narrow window.
  2. Navigate into People and open a person's panel; open an audit entry.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

2 · People — the directory and the support view

/admin/people lists everyone who has signed in — most recently checked with the main site first, 25 to a page — searchable by name and narrowed by role, membership, standing and saved view, every filter kept in the address. A person opens beside the list at their own address: an audited read-only support view of identity/access facts, headline progress, standing, certificates and administrative actions — never their private code, notes, project files, terminal content or answers.

RouteScreenRole
/admin/peoplePeople — directory, saved views, filters, searchBoth staff roles
/admin/people/:identityPerson — the audited support panelBoth staff roles (actions: Super Admin)

The saved views are All people · Suspended or banned · Main-site check failing; role filter offers User, Admin, Super Admin only. Opening a person is recorded in the audit history before anything is shown — if that record cannot be written, nothing about the person appears.

2.1 The directory

TC-PPL-001Directory lists everyone signed in, most-recently-checked first, 25 a pageP1

Preconditions

Signed in as staff.

Steps

  1. Open /admin/people.
  2. Read the rows and the match count; use Load more if offered.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-002Search is by part of a name — count holds under the same filtersP1

Steps

  1. Search "tester-learner".
  2. Search part of a name ("learner-1", a fragment).
  3. Clear the search.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-003Saved views — All people · Suspended or banned · Main-site check failingP1

Steps

  1. Cycle the segmented view control through the three views.
  2. Compare each view's count.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-004Filters combine independently and live in the addressP2

Steps

  1. Set Role = User.
  2. Add Standing = In good standing.
  3. Add Membership = Has held a membership.
  4. Reload the page; remove chips one by one.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-005Sort by name or by last checked — nameless sort lastP2

Steps

  1. Click the Name column header to sort by name.
  2. Click Last checked to return to the default order.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-006Row badges — standing, "Check failing", "Erasure in progress"P2

Preconditions

A suspended/banned person and, if one exists, someone mid-erasure or with a failing check.

Steps

  1. Read the Standing column across the directory and the Suspended-or-banned view.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-007Recently opened — the last five people on this deviceP2

Steps

  1. Open five different people in turn, then return to /admin/people with no person open.
  2. Click a Recently opened chip.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

2.2 The support view — /admin/people/:identity

TC-PPL-008The panel opens beside the list at its own address, recordedP1

Steps

  1. Click a person (e.g. tester-learner-1).
  2. Note the address, the panel and the list state; close the panel.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-009Access facts — role from the main site, membership, checks, the way to the main siteP1

Steps

  1. Open a person's panel and read the Access section and the badge row.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-010Headlines — five owner figures, each honest on its ownP2

Steps

  1. Open a learner with real activity (tester-learner-1); read Headlines.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-011The privacy boundary — no code, notes, files, answers, or live factsP1

Steps

  1. Open the panel of a learner with code, notes and project files.
  2. Look for any path into their private work.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-012Standing & moderation history — who, when, reason, note, how it endedP1

Preconditions

A person with at least one past or current restriction (run TC-PPL-019 first if none exists).

Steps

  1. Open their panel; read Standing and its history list.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-013Certificates, erasure and legal holds sectionsP2

Preconditions

A person holding a certificate; a person mid-erasure if available.

Steps

  1. Read the Certificates section of a certificate holder.
  2. Read the Erasure and legal holds section on someone mid-erasure and on someone with a hold.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-014Administrative actions — Admin sees who/when; most reasons are Super-Admin-onlyP1

Preconditions

A person with several kinds of actions recorded (a suspension + a hold + a correction, e.g. after earlier cases).

Steps

  1. As Admin, open their panel and read "Administrative actions".
  2. As Super Admin, compare.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-015Admin cannot act — no moderation buttons, honest pointerP1

Steps

  1. As Admin (tester-staff-1), open another person's panel.
  2. Try a moderation address directly, e.g. /admin/people/<id>/suspend.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-016Support view of someone being erased — only the hold remainsP2

Preconditions

An account past its cancellation window being erased (after TC-LFC-011, or an existing one). Super Admin.

Steps

  1. Open the person's panel while erasure runs.
  2. Open their /suspend address directly.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

3 · Moderation — suspend, lift, ban, unban

Moderation acts live at four addresses of their own under a person. Each is Super-Admin-only, each shows a confirmation dialog naming the person, each requires what it requires (a reason, a duration, or the person's typed name), and every protected confirmation passes through the main-site check. A restricted learner meets a factual restricted page — never the reason, the private note, or the moderator's name.

RouteScreenRole
/admin/people/:identity/suspendSuspend dialogSuper Admin
/admin/people/:identity/lift-suspensionLift-suspension-early dialogSuper Admin
/admin/people/:identity/banBan dialogSuper Admin
/admin/people/:identity/unbanUnban dialogSuper Admin

Suspend asks for a reason, a duration (1, 7, 30 or 90 days, or Other 1–365) and an optional private team note. Ban asks for a reason, the typed name and an optional note. Unban asks for the typed name alone. Records and main-site membership are untouched by a suspension; a ban replaces a suspension where one stands.

Destructive — coordinate first

Every case in this section restricts a real shared account and ends its sign-ins. Agree the target learner (tester-learner-2..5 suggested; keep tester-learner-1 usable) with the Super Admin before running, and lift/undo the restriction when the case passes.

TC-PPL-017Suspend dialog — named title, presets, live "come back" line, reason required Super AdminP1

Preconditions

Signed in as Super Admin; an unrestricted learner chosen (coordinate — tester-learner-2).

Steps

  1. From their panel, choose Suspend (or open …/suspend).
  2. Pick each duration preset; choose Other and try 0 and 366 days.
  3. Type and remove the reason; watch the confirm button.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-018Confirming a suspension — outcome line, badge, audit entry Super AdminP1

Steps

  1. Complete TC-PPL-017 with a reason and a private note; confirm.
  2. Return to the person's panel; check Standing and history.
  3. Check /admin/audit (as Super Admin).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-019The restricted learner's page — factual wording, no staff detailP1

Preconditions

The learner suspended in TC-PPL-018, signed in in another browser/profile.

Steps

  1. As the suspended learner, open any app page; use Try again.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-020Lift early — "Lift <name>'s suspension early", reason, immediate release Super AdminP1

Steps

  1. Open /admin/people/<the suspended learner>/lift-suspension.
  2. Type a reason; confirm.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-021Ban — typed-name confirmation, reason, the learner's banned page Super AdminP1

Preconditions

An unrestricted learner chosen (coordinate — tester-learner-3).

Steps

  1. Open …/ban.
  2. Type the wrong name — confirm stays unavailable.
  3. Type the exact name, add reason + optional note, confirm.
  4. As the banned learner, open the app.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-022Ban replaces a live suspension — "Replaced by a ban" Super AdminP2

Steps

  1. Suspend a learner (reason + days), confirm.
  2. Immediately ban the same learner (typed name + reason), confirm.
  3. Read their Standing history.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-023Unban — typed name, no reason, immediate release Super AdminP1

Steps

  1. Open …/unban for the learner banned in TC-PPL-021/022.
  2. Type the name; confirm.
  3. As the learner, open the app.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-024Not-offered addresses say so plainly — no dead dialogsP2

Steps

  1. Open …/lift-suspension on someone not suspended.
  2. Open …/suspend on someone already suspended; …/ban on someone banned; …/unban on someone not banned.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-025Own account refuses every moderation action — no form at all Super AdminP1

Steps

  1. As Super Admin, open your own person panel.
  2. Open your own /suspend, /ban, /unban, /lift-suspension addresses directly.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-026Invalid confirms perform nothing — mistyped name, missing reasonP2

Steps

  1. Open Ban for a learner; type a near-miss name (case change, extra space).
  2. Leave the reason empty and inspect confirm.
  3. Cancel — check nothing changed.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-027Stale main-site check — "Confirm on the main site" preserves the dialog Super AdminP1

Preconditions

Super Admin session idle long enough that the main-site check is older than 15 minutes (or freshly signed in without one).

Steps

  1. Open Suspend for a learner; fill reason, note, 7 days.
  2. Press the confirm button.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-028Private note stays private — learner and audit never carry itP2

Steps

  1. Suspend a learner with a distinctive private note (e.g. "internal ref ZZ-9").
  2. As the learner, read the restricted page.
  3. As staff, read the audit entry for the suspension.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-029Repeated confirm does not double-apply — one action, one audit rowP2

Steps

  1. Open Suspend; complete the form; double-click the confirm quickly / press Enter twice.
  2. Re-open the same dialog address and try again against the already-changed standing.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-030A suspension that reaches its end frees the learner with no noticeP2

Preconditions

A 1-day suspension placed (or a short "Other" duration where staging allows).

Steps

  1. Suspend; let the end pass (or coordinate a short duration).
  2. After the end: check Standing, history, and whether the learner was told anything.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

4 · Progress reset & payment reversal

Two Super-Admin-only person actions that are irreversible by design. A reset walks three steps — choose scopes → preview exactly what would change → confirm with reason and typed name — then runs each scope independently. A reversal records that the main site already reversed a payment: it selects the certificates that invalidates, ends all sign-ins, and commits together with its audit entry.

RouteScreenRole
/admin/people/:identity/resetReset — choose scopes → counted preview → typed-name confirm → per-scope runSuper Admin
/admin/people/:identity/payment-reversalPayment reversal — reference → certificate selection → typed-name confirmSuper Admin

Nine reset scopes: Courses, Workspace Projects, Skills, Learning preferences & Continue, Challenges & Tracks, Daily Challenges, Timed Debug, Mock Tests, Company Tests. Preview counts are owner-supplied and exact; a scope that cannot be counted blocks confirmation. Reversal stores no amount, invoice or payment method — it records a reference and a reason.

Destructive — coordinate first

Both actions are irreversible, end sign-ins, and notify the learner. Run them only against a learner the team has agreed (tester-learner-4 is the suggested expendable account), never against another staff member, and record what you changed.

4.1 Progress reset

TC-PPL-031Step 1 — nine scopes grouped, each saying what resets and what stays Super AdminP1

Steps

  1. Open /admin/people/<tester-learner-4>/reset.
  2. Read every scope's description; select a subset.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-032Step 2 — counted preview, exact and owner-supplied Super AdminP1

Steps

  1. With scopes chosen, proceed to "What would change".
  2. Use Back and change the selection; return.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-033Uncountable or blocked scope stops confirmation Super AdminP1

Preconditions

A scope that cannot be counted right now, or a learner inside a running timed window / live test.

Steps

  1. Select the affected scope; try to proceed.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-034Step 3 — reason + typed name + main-site check on a danger confirm Super AdminP1

Steps

  1. Proceed to Confirm.
  2. Try confirming without the reason, then with a mistyped name.
  3. Complete correctly and confirm.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-035Per-scope run states — Waiting · Running · Done · Failed Super AdminP1

Steps

  1. Confirm a multi-scope reset and watch the run screen.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-036Failed scopes retry alone — audited, never rerunning successes Super AdminP2

Preconditions

A run with a failed scope (mark N/A if no failure occurs naturally).

Steps

  1. On a run with Failed scopes, use "Try the failed parts again".

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-037One learner notice, only when something changed Super AdminP2

Steps

  1. After a reset with changes, check the learner's notifications as that learner.
  2. Run a reset where every selected scope changes nothing.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-038Never on your own account; never on someone being erased Super AdminP1

Steps

  1. Open /admin/people/<your own identity>/reset.
  2. Open /admin/people/<a person mid-erasure>/reset.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-039What stays stays — verify the preserved facts on the learner Super AdminP2

Preconditions

A completed reset on a learner who had XP, certificates, achievements, solved challenges and paid rewards.

Steps

  1. As the learner, check level/XP, certificates, achievements, solutions, rewards and profile after the reset.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-040?scope=skills preselects the Skills scopeP3

Steps

  1. Open /admin/people/<identity>/reset?scope=skills directly.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

4.2 Payment reversal

TC-PPL-041Three steps — reference & reason, certificate selection, typed-name confirm Super AdminP1

Preconditions

A learner holding at least one certificate whose access you may end (coordinate — tester-learner-5).

Steps

  1. Open /admin/people/<the learner>/payment-reversal.
  2. Step 1: enter a main-site reference and a reason.
  3. Step 2: read the certificate list; tick a subset.
  4. Step 3: read the consequence list; try confirm without the typed name, then correctly.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-042The commit is atomic — reversal, revocations, sign-out, audit together Super AdminP1

Steps

  1. Complete TC-PPL-041 with two certificates selected.
  2. Read the outcome; check the learner's certificates, audit and the person panel.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-043Same reference, same person — returns the recorded result, does nothing twice Super AdminP1

Steps

  1. Repeat TC-PPL-041/042 entering the same main-site reference for the same person.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-044Nothing about money is stored — reference and reason only Super AdminP2

Steps

  1. Read the form and the resulting history/audit entries after a reversal.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-045Own account and being-erased accounts are refused Super AdminP1

Steps

  1. Open /admin/people/<own identity>/payment-reversal.
  2. Open it for an account being erased.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

5 · Erasure & legal holds — /admin/lifecycle

The lifecycle page is readable by both staff roles: a filterable table of erasure requests and a table of legal holds, each with a side panel. Staff never approve, reject or cancel a learner's own erasure request — the learner alone can cancel inside its window. Super Admin places, reviews and releases legal holds and retries failed erasure work; Admin sees that holds exist and their dates, never the confidential reason or authorizer.

RouteScreenRole
/admin/lifecycleErasures + legal holds tables, stage/hold filters, side panels (?erasure= / ?hold=)Both staff roles (actions: Super Admin)
/admin/people/:identity?act=eraseErase-this-account dialogSuper Admin
/admin/people/:identity?act=holdPlace-legal-hold dialogSuper Admin

Erasure stages: Learner can still cancel · Scheduled · Erasure in progress · Held · Failed · Erased · Cancelled by the learner. Holds are In force · Due for review · Released; a review date may be at most 90 days ahead and must be after today. Releasing the last applicable hold resumes an erasure from its first unfinished part; a hold never restores already-erased data.

Destructive — coordinate first

Erasure permanently deletes a real account. Use a dedicated throwaway learner or one the team has already agreed to erase; never erase a tester account still needed by other cases. Place holds on agreed accounts only.

TC-LFC-001Erasures table — person, source, stage, parts, dates, failure detailP1

Preconditions

At least one erasure exists (a learner's own request or one begun by staff).

Steps

  1. Open /admin/lifecycle; read the Erasures table rows.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-002Stage and hold filters — in the address, matching the hub's linksP1

Steps

  1. Set the stage filter to "Overdue or failed", then a single stage.
  2. Set the holds filter to "Due for review".
  3. From the Operations hub, follow the erasure and legal-hold rows.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-003Erasure side panel — part-by-part truth, due dates, stage honestyP1

Steps

  1. Click an erasure row; read the side panel (address gains ?erasure=…).
  2. Compare an early-stage erasure with a finished one.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-004Staff cannot approve, reject or cancel a learner's own requestP1

Preconditions

A learner-initiated erasure inside its cancel window ("Learner can still cancel").

Steps

  1. As both roles, open that erasure's row and panel and look for approve/reject/cancel controls.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-005Retrying failed erasure work — Super Admin only, from the failed part Super AdminP1

Preconditions

An erasure in the Failed stage (mark N/A if none exists — do not break one deliberately).

Steps

  1. Open the failed erasure's panel; use "Try again from this part".
  2. Repeat as Admin — no control.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-006Holds table — placed-by, review-by, end, state; newest hundredP1

Steps

  1. Read the Legal holds table.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-007Confidential fields are Super-Admin-only — Admin sees existence and datesP1

Preconditions

A hold in force with a reason and authorizer.

Steps

  1. As Admin, read the hold row and open its panel.
  2. As Super Admin, compare.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-008Placing a hold — exact scope, reason, authorizer, ≤90-day review date Super AdminP1

Steps

  1. On a learner's panel, open ?act=hold.
  2. Try a review date of today, of 91+ days out, then a valid one; optional end date before today.
  3. Complete with reason + named authorizer; confirm through the main-site check.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-009Reviewing a hold — renew the basis, next review within 90 days Super AdminP1

Preconditions

A hold in force.

Steps

  1. Open the hold's Review dialog.
  2. Confirm the basis, set the next review date, confirm.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-010An overdue review stays in force — "Due for review", hub counts itP2

Preconditions

A hold whose review date has passed (coordinate setting one with a near date, or use an existing overdue hold).

Steps

  1. Read the holds table and the hub's legal-hold row.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-011Releasing a hold — reason, fresh check, resumption of paused erasure Super AdminP1

Preconditions

A hold pausing an in-progress erasure.

Steps

  1. Open the hold's Release dialog; read its resumption note.
  2. Type a reason; confirm through the main-site check.
  3. Watch the erasure row.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-012Releasing an already-released hold is a no-op; concurrent releases lose nothing Super AdminP2

Steps

  1. Release a hold that is already Released.
  2. Where possible, have two staff sessions release the same hold at once.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-013"Erase this account" — typed name, reason, begins at once Super AdminP1

Destructive — coordinate first

Permanently erases a real account without the learner's seven-day window. Use only an agreed throwaway account.

Steps

  1. On the agreed learner's panel, open ?act=erase.
  2. Read the consequences; type a reason and the exact name; confirm.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-014Being-erased refusals — every person action says the same sentenceP1

Preconditions

An account mid-erasure.

Steps

  1. As Super Admin, open each person-action address: suspend, ban, unban, lift-suspension, reset, payment-reversal, correction, extra, certificate actions, invalidate.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-015Erasure is independent of age-based cleanupP2

Steps

  1. Compare an erasure's parts with any retention/age-based cleanup mentioned on the page or in audit.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

6 · Certificates administration

Certificates admin gives both staff roles the aggregate counts, the searchable certificate list, and every certificate's record and history. All writes — retrying a failed document, approving or rejecting a name correction, reissuing, revoking, making valid again — are Super-Admin-only and pass the main-site check. Revocation invalidates public verification at once but never deletes the record.

RouteScreenRole
/admin/certificatesCertificates — attention figures, per-item counts, search/filter, the listBoth staff roles
/admin/certificates/:idCertificate record — status, names, document history, actionsBoth staff roles (actions: Super Admin)
/admin/certificates/name-correctionsName-correction queue — approve / rejectSuper Admin
/admin/certificates/parked-generationsPaused document generations — retryBoth read; retry: Super Admin
/admin/certificates/:id/revokeRevocation flowSuper Admin

States: Waiting for the learner's name · Being made · Not made yet · Issued · Revoked · Hidden from verification. Staff records are labelled and kept out of learner counts. Approving a name correction affects certificates not yet made; issued documents keep the old name until an explicit reissue.

TC-CAD-001Certificates home — attention figures, per-item counts, find and filterP1

Steps

  1. Open /admin/certificates.
  2. Search by learner name and by certificate code; filter by awarded item, state and completion period where offered.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CAD-002Certificate record — chips, code, printed vs current name, attributionP1

Steps

  1. Open an issued certificate's record.
  2. Open a revoked one and one hidden from verification, if any exist.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CAD-003Admin reads everything, changes nothingP1

Steps

  1. As Admin, open a certificate record, the name-corrections queue and parked-generations.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CAD-004Revocation flow — the four permitted reasons, private note, public invalidation Super AdminP1

Destructive — coordinate first

Revokes a real certificate and notifies the learner once. Agree the target before running.

Steps

  1. On an issued certificate, open …/revoke.
  2. Read the reasons; pick one, type a private note; confirm through the main-site check.
  3. Check the public verify page for the code and the learner's notifications.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CAD-005Already-revoked says so — no second revocation Super AdminP2

Steps

  1. Open …/revoke on the certificate revoked in TC-CAD-004.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CAD-006Make it valid again — keeps code and dates, regenerates the document Super AdminP1

Steps

  1. On a revoked certificate, use "Make it valid again" with a private reason; confirm.
  2. Check public verification once the document is ready.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CAD-007Retry a failed document — certificate-specific, failure in words Super AdminP1

Preconditions

A certificate whose document failed to generate (parked-generations row).

Steps

  1. Open its record; read the document failure line.
  2. Use "Try making it again" through the check.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CAD-008Name corrections queue — approve exact current name, reject with a reason Super AdminP1

Preconditions

At least one pending name-correction request.

Steps

  1. Open /admin/certificates/name-corrections.
  2. Approve one: read the confirm text first.
  3. Reject another with a reason.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CAD-009Approval alone does not rename issued documents — reissue does Super AdminP1

Preconditions

TC-CAD-008's approved correction with issued certificates.

Steps

  1. Open an affected issued certificate — check the printed name.
  2. Use Reissue: read the preview count; confirm.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CAD-010Parked generations — readable list, per-row retry, role splitP1

Steps

  1. Open /admin/certificates/parked-generations as Admin, then Super Admin.
  2. As Super Admin, retry one row through the check.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CAD-011Retry never duplicates a credentialP2

Steps

  1. Retry a parked generation; then check the learner's certificates and the list counts.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CAD-012Public verification cross-check — revoked and erased states read honestlyP3

Steps

  1. On the public verification page, check a revoked code and an erased person's code.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

7 · Economy administration

The operations page is aggregate-only: monthly grant figures, captured Credits by action, cleared and failed amounts, paused reward notices — each saying when it was worked out, nobody ever named or ranked. Failed rewards are listed for both roles; retrying them is Super-Admin-only and never pays twice. Configuration, corrections and extra Credits are Super-Admin writes through the main-site check.

RouteScreenRole
/admin/economy/operationsEconomy operations — aggregate figures with read timesBoth staff roles
/admin/economy/failed-rewardsFailed reward notices — list, retry one or allBoth read; retry: Super Admin
/admin/economy/configurationEconomy settings — allowances, XP awards, other awardsSuper Admin
/admin/economy/correctionCorrect an account — one XP/Credit accounting errorSuper Admin
/admin/economy/extraExtra Credits — bounded addition to one learner's monthSuper Admin

Setting ranges: monthly base allowance 0–5,000 Credits; monthly continuation allowance 0–5,000; first-solve XP Easy/Medium/Hard/Extreme 0–500 each; default Daily bonus 0–200; written-subject award 0–1,000. Active-time and practice-evidence values are owned by another domain and shown as such. Changes govern later occasions only.

7.1 Operations figures & failed rewards

TC-ECO-001Operations page — aggregates only, each figure with its read timeP1

Steps

  1. Open /admin/economy/operations.
  2. Read every figure group; press Read again.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ECO-002Unreadable figures say "Could not be read just now" — never a fabricated zeroP1

Preconditions

Catch the page while a read fails, or note the behaviour wherever a figure cannot load (mark N/A if unreachable).

Steps

  1. Observe a figure whose source is unavailable.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ECO-003GENERATED_ASSISTANCE off — honest emptiness, no invented activityP2

Steps

  1. On this deployment, read the Credits figures.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ECO-004Failed rewards list — category, learner, what's owed, why, oldest-first pagesP1

Steps

  1. Open /admin/economy/failed-rewards.
  2. Read rows; Load more if offered.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ECO-005Retry one reward — same notice, never pays twice Super AdminP1

Preconditions

A row in the failed-rewards list.

Steps

  1. Retry one row through the main-site check.
  2. Check the learner's notices and balance.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ECO-006Retry all — bounded batches, stops at the first refusal Super AdminP2

Steps

  1. With several failed rows, use Retry all (with a stale main-site check, then a fresh one).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

7.2 Configuration, corrections & extra Credits

TC-ECO-007Configuration — every setting shows in-force, standard, range, last change Super AdminP1

Steps

  1. Open /admin/economy/configuration.
  2. Read all three groups and the Progress-owned values.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ECO-008Saving a change set — all-or-nothing, confirm lists old → new Super AdminP1

Steps

  1. Change two values and type a reason; inspect the save bar.
  2. Confirm through the main-site check; read the resulting entries.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ECO-009One invalid value blocks the whole set — typed work preserved Super AdminP1

Steps

  1. Enter one valid change plus one out-of-range value (e.g. base allowance 6000, or Easy XP 501).
  2. Try to save.
  3. Set a value back to its standard and save.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ECO-010Correction flow — person, account now, live preview, apply Super AdminP1

Steps

  1. Open /admin/economy/correction; pick a learner (search or ?person=).
  2. Read "Account now"; enter a direction and amount; watch the preview; apply with incident/reference + reason through the check.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ECO-011Correction bounds — ±100,000 XP, ±10,000 Credits, no silent trimming Super AdminP1

Steps

  1. Try XP −100,001 and Credits +10,001.
  2. Try a deduction taking the balance below zero.
  3. Enter a non-number.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ECO-012A correction adds its own entry — original untouched, apply once Super AdminP2

Steps

  1. Apply a correction; then apply the same form again (re-submit).
  2. Read the learner's XP history and the audit.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ECO-013Correction refusals — own account, being-erased, no open month Super AdminP1

Steps

  1. Pick your own account; pick an account being erased; where staging allows, a Credits correction on a learner with no open Credit month.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ECO-014Extra Credits — bounded by the month's headroom, reasoned, audited Super AdminP1

Steps

  1. Open /admin/economy/extra for a learner.
  2. Read the month figure and the extras added so far; try an amount over the headroom (max 5,000 a cycle).
  3. Add a valid amount with a reason.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

8 · Topic Requests — the review queue

The queue at /admin/topic-requests lists requests newest-first, searchable across title and description, filterable by status with retracted requests left out until asked for. Both staff roles review; Approve and Reject act at once behind a ~6-second Undo toast, and the learner is told only after the Undo lapses. Linking content to an implemented request is the one Super-Admin-only act.

RouteScreenRole
/admin/topic-requestsQueue + request panel (?request=) — statuses, team note, linked content, historyBoth staff roles (implemented-link replace: Super Admin)

Staff tag: requests staff file are marked QA-VK 15 Nov —. A request can be marked implemented only when at least one linked item is openable by learners; replacing links on an implemented request is Super-Admin-only, keeps at least one valid link, and is audited.

TC-TRA-001Queue — search, status filter, counts, retracted omitted until askedP1

Steps

  1. Open /admin/topic-requests.
  2. Search title and description text; cycle the status filter.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRA-002Request panel — full detail beside the queue at its own addressP1

Steps

  1. Open a request from the queue.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRA-003Approve / Reject act at once — ~6-second Undo, notice waits for the lapseP1

Steps

  1. Approve one request; within ~6 s press Undo on the toast.
  2. Approve another and let the toast lapse; check the learner's notices.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRA-004Other transitions confirm first; re-selecting the current state does nothingP1

Steps

  1. Move a request backward (e.g. approved → pending); read the confirm.
  2. Select the status the request already has.
  3. Make a transition that requires a reason, leaving it empty.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRA-005Team note — private, editable, never learner-visibleP1

Steps

  1. Edit the team note on a request (≤2000 chars); save.
  2. As the requesting learner, view the request.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRA-006Linked content — find, link up to five, implemented needs one openable itemP1

Steps

  1. On an approved request, find published learner-openable content by title and link it.
  2. Try "Mark implemented" with no links, then with one openable link.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRA-007Replacing links on an implemented request — Super Admin, fresh check, ≥1 valid link Super AdminP1

Steps

  1. As Admin, open an implemented request — look for link editing.
  2. As Super Admin, replace a link with a reason through the main-site check; try removing all links.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRA-008History — actor, movement, notes, links, reasons, undone rows mutedP2

Steps

  1. Read a request's history after several transitions and an undo.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRA-009Erasure of a requester — notes and reasons gone, statuses and links keptP2

Preconditions

A request filed by an account that has since been erased (mark N/A if none).

Steps

  1. Open that request's panel and history.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRA-010No duplicate notices — repeated decisions and moves-back stay quietP2

Steps

  1. Approve → undo → approve again; watch the requester's notices after each lapse.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

9 · Broadcasts

Broadcasts send one System notice to the whole learner audience. Composing and sending are Super-Admin-only; the history is readable by both roles. The audience estimate excludes staff and learners with System notifications disabled; delivered broadcasts cannot be edited or recalled — a running delivery can only be stopped for what has not been reached yet.

RouteScreenRole
/admin/broadcastsCompose — title, message, learner preview, audience estimate, confirmSuper Admin
/admin/broadcasts/historyHistory — aggregate states, side panel (?broadcast=), stopBoth read; stop: Super Admin

States: Delivering · Delivered · Stopped · Failed. History shows estimate, delivered count, System-off count, sender, timestamps and stop reason — never recipient identity or read tracking.

Destructive — coordinate first

Sending reaches every learner account. Use only an agreed test broadcast (e.g. title starting QA-VK), and coordinate the Stop case while a broadcast is delivering.

TC-BRC-001Compose — bounds, learner preview, audience estimate Super AdminP1

Steps

  1. Open /admin/broadcasts.
  2. Type a title >120 chars and a message >4000; then valid text.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-BRC-002Send confirmation — plain consequences, extra confirm for large audiences Super AdminP1

Steps

  1. Compose a valid broadcast; press Send; read the confirmation.
  2. With a large or unestimated audience, read the second confirm.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-BRC-003Sending — staff excluded, System-off skipped, one send per form Super AdminP1

Steps

  1. Confirm a send; re-press send / double-click during the operation.
  2. Check a staff account's bell and a learner's bell.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-BRC-004History — aggregate counts and states, no recipientsP1

Steps

  1. Open /admin/broadcasts/history as Admin.
  2. Open a broadcast's side panel (?broadcast=…).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-BRC-005Stop a delivering broadcast — reason + check, delivered stays, no resume Super AdminP1

Destructive — coordinate first

Halts a real delivery part-way. Coordinate with the sender.

Steps

  1. While a broadcast is Delivering, open its panel and choose Stop.
  2. Type a reason; confirm through the main-site check.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-BRC-006Repeat stop and repeat send stay idempotent Super AdminP2

Steps

  1. Stop the same broadcast twice; re-submit a sent form.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-BRC-007Admin reads history, cannot send or stopP1

Steps

  1. As Admin, open /admin/broadcasts and a delivering broadcast's panel.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

10 · WizBit administration

The knowledge base holds every answer — drafts included — each with its lifecycle (draft → published → archived), synonyms, tags and a learner preview. The responses page holds the approved message set in both voices. Matching thresholds, identity artwork and nudges are Super-Admin-only settings; protected lifecycle and settings writes pass the main-site check.

RouteScreenRole
/admin/wizbit/kbKB list — answers, views, review states, where-tags, try-a-questionBoth staff roles
/admin/wizbit/kb/:entryIdAnswer editor — question, answer, synonyms, tags, lifecycle, previewBoth staff roles
/admin/wizbit/responsesResponses — the message set in Companion + Plain voices, per momentBoth staff roles
/admin/wizbit/kb-administrationMatching — thresholds, private evaluation set, previewSuper Admin
/admin/wizbit/identityIdentity — approved artwork, expressions, accentSuper Admin
/admin/wizbit/nudgesNudges — producer-side reductions onlySuper Admin

Nothing here is a learner-facing control: nudges reduce what producers send, never grant permission to interrupt; the evaluation set is private and its questions never appear as learner content.

TC-WZA-001KB list — drafts included, views, review states, where-tagsP1

Steps

  1. Open /admin/wizbit/kb.
  2. Cycle the views (All / Due for review); read where-tags.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZA-002Try a question — the learner's answer, counting for nothingP1

Steps

  1. Use the find/try-a-question field; ask something a published answer covers, then something it doesn't.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZA-003Answer editor — fields, lifecycle, learner preview, Return to DraftP1

Steps

  1. Open an answer; read every field and the preview.
  2. Walk the lifecycle: Save draft → Publish (or Submit for approval under the publishing switch) → Archive → Return to Draft → Delete where offered.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZA-004Save conflict — refused, never mergedP2

Preconditions

Two staff sessions on the same answer (mark N/A if a second staff session can't be staged).

Steps

  1. Session A edits and saves; session B, which opened earlier, saves different text.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZA-005Responses — every moment in both voices, problems namedP1

Steps

  1. Open /admin/wizbit/responses.
  2. Read the message set for several moments in Companion and Plain previews.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZA-006Responses publish goes through the gate; approval under the switchP2

Steps

  1. Draft a change to a moment; publish (Admin under an On switch) or submit (switch Off / SA path as applicable).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZA-007Matching — hundredths-bounded thresholds, staff-only preview Super AdminP1

Steps

  1. Open /admin/wizbit/kb-administration.
  2. Try an out-of-range threshold; preview against test questions; save thresholds + test questions together with a reason.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZA-008Identity — approved artwork only, contrast-checked accent Super AdminP1

Steps

  1. Open /admin/wizbit/identity.
  2. Read artwork sizes and expressions; change the accent; save.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZA-009Nudges — producer reductions only, nothing arbitrary Super AdminP1

Steps

  1. Open /admin/wizbit/nudges.
  2. Read every control; save a change with a reason.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZA-010Admin gating — SA pages refuse cleanly, staff pages workP1

Steps

  1. As Admin, open /admin/wizbit/kb-administration, /admin/wizbit/identity, /admin/wizbit/nudges; then /admin/wizbit/kb and /admin/wizbit/responses.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

11 · Insights & analytics administration

Reporting is aggregate and anonymous — participation by area, flagged practice items, WizBit use — with staff activity and tools excluded and no learner ever named or ranked. Home suggestion and next-action mappings choose which published destinations learners see; skill-evidence reset is a doorway into the person's reset page. Writes are Super-Admin and audited.

RouteScreenRole
/admin/analytics/reportingReporting — Participation / Content review / WizBit use tabs, periods, CSV downloadBoth staff roles
/admin/analytics/home-suggestionHome suggestion — current card, chooser, optional learner lineBoth read; change: Super Admin
/admin/analytics/next-action-mappingsNext-action mappings — skills × stages destination tableBoth read; change: Super Admin
/admin/analytics/skill-evidence-resetSkill-evidence reset — learner lookup → redirects to the person resetSuper Admin

Periods: 7 / 30 / 90 days, kept on the browser and shared across tabs. Flags are prompts ("Few solve it"), never verdicts. Downloads are bounded, safe and audited as report-exported (readable by Super Admin only).

TC-INS-001Reporting — three tabs, address-kept, shared periodP1

Steps

  1. Open /admin/analytics/reporting; cycle Participation / Content review / WizBit use.
  2. Change the period; reload; check the address.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-INS-002Participation — learners + minutes per area, real zeros, computed timeP1

Steps

  1. Read the Participation tab for each period.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-INS-003Content review — flagged items with reason words, owner linksP1

Steps

  1. Read the Content review tab; open a flagged item.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-INS-004CSV download — recorded first, IST filename, coverage line, no personal detailP1

Steps

  1. Download a report; open the CSV; check the audit as Super Admin.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-INS-005Home suggestion — current card honest, unopenable destination warned Super AdminP1

Steps

  1. Open /admin/analytics/home-suggestion; read the current card.
  2. As Super Admin, pick a new published destination, add an optional line ≤140 + reason; confirm through the check.
  3. Try an unpublished or unopenable item.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-INS-006Next-action mappings — the skills × stages table, every change reasoned Super AdminP1

Steps

  1. Open /admin/analytics/next-action-mappings; read the table.
  2. Change one cell's destination via the chooser + reason + check.
  3. Try a destination that doesn't exist / isn't openable.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-INS-007Skill-evidence reset is a doorway — same operation, no second policy Super AdminP1

Steps

  1. Open /admin/analytics/skill-evidence-reset; find a learner (User-role list).
  2. Choose "Reset skill evidence…".

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

12 · System — runtimes, maintenance windows, main-site changes

Three operational surfaces. The language registry is a read-only table of what runs where — honest per-service lanes that distinguish "not running" from "could not be asked". Maintenance windows are a Super-Admin-only declaration with a live learner-banner preview and a lifecycle the worker ends by measurement, never by hand. Identity delivery lists the main-site changes Labs was told about and lets a Super Admin re-ask about the ones that could not be verified.

RouteScreenRole
/admin/language-registryRuntime registry — languages × service lanesBoth staff roles (read-only)
/admin/maintenance-windowsMaintenance — declare, list, cancelSuper Admin
/admin/identity-deliveryMain-site changes — waiting and verified lists, re-askSuper Admin

Window states: Scheduled · In progress · Ending · Overrunning · Ended · Cancelled. Expected end ≤7 days after start; learner explanation ≤300 chars; affected capabilities are grading, interactive programs and file storage.

12.1 Language registry

TC-SYS-001The registry reads as committed — language, version, availability, service lanesP1

Steps

  1. Open /admin/language-registry; read several languages' rows.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SYS-002"Could not be asked" is never dressed as "Not running"P1

Steps

  1. Read a coming-soon language and any lane whose service can't be reached.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

12.2 Maintenance windows

TC-SYS-003Declare a window — validation live and server-side, banner preview Super AdminP1

Steps

  1. Open /admin/maintenance-windows; start declaring.
  2. Try a past start, an end before the start, an end >7 days out, an explanation >300 chars.
  3. Complete validly; read the live banner preview; declare through the check.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SYS-004Window list states and idempotent declaration Super AdminP1

Steps

  1. Declare a window; double-press Declare; read the list.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SYS-005The learner banner — in-progress and next-day windows only Super AdminP1

Steps

  1. With a scheduled window starting within a day, and again while one is in progress, view the app as a learner.
  2. Cancel the scheduled window and watch the banner leave.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SYS-006No manual end — the worker decides Ended vs Overrunning Super AdminP1

Steps

  1. Look for a "Force healthy" / "End now" control on an in-progress window.
  2. Watch a window cross its expected end.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SYS-007Cancel — scheduled-only, confirmed, checked Super AdminP1

Steps

  1. Cancel a Scheduled window through its confirm + main-site check.
  2. Look for cancel on an In-progress window.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SYS-008The hub's Maintenance signal tracks windows honestlyP2

Steps

  1. While a window is in progress / overrunning, read the hub's Maintenance signal.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

12.3 Main-site changes — /admin/identity-delivery

TC-SYS-009Waiting and verified lists — change kinds in words, verified paged Super AdminP1

Steps

  1. Open /admin/identity-delivery.
  2. Read the waiting list and the verified list (Load more if offered).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SYS-010Ask again — only on could-not-be-verified, checked and audited Super AdminP1

Steps

  1. On a could-not-be-verified row, use "Ask the main site again" through the check.
  2. Look for the control on a verified row.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SYS-011Nothing edits, invents or discards — and Admin stays outP1

Steps

  1. Scan the page for any edit, create or delete control.
  2. Open the address as Admin.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

13 · Audit history & the publishing switch

The audit at /admin/audit is the immutable record — IST-day groups, newest first, every entry naming who (a staff member or "The platform, automatically"). Admin reads only the content-kind actions; Super Admin reads everything (~80 action types). The publishing switch is the single global Allow Admins to publish setting: Super-Admin-only, no undo, and reflected on the Operations hub.

RouteScreenRole
/admin/auditAudit — filters (action, Who, Item, From, To), day groups, entry panel (?entry=)Both staff roles (scope differs)
/admin/settings/publishingPublishing — the "Allow Admins to publish" switchSuper Admin

Retention is one year; platform cleanup entries are attributed to "The platform, automatically". Filters persist in the address; Item search debounces ~350 ms; an invalid date range keeps the other filters and says exactly: "From is after To, so the dates were not used."

TC-LFC-016Audit list — IST day groups, attribution, Load moreP1

Steps

  1. Open /admin/audit as Super Admin.
  2. Read the rows and group headers; Load more.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-017Admin scope — content-kind actions only, lead says soP1

Steps

  1. Open the audit as Admin; open the Show/action filter.
  2. Compare with Super Admin's filter.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-018Filters — action, Who, debounced Item, From/To, chips, addressP1

Steps

  1. Set an action filter; type in Who; type in Item (watch the ~350 ms debounce); set From and To.
  2. Reload; remove a chip.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-019Invalid date range — the exact sentence, other filters heldP1

Steps

  1. Set From later than To (with other filters applied); read the page.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-020Entry side panel — item, kind, who, when, change, reason; deep-link reads aloneP1

Steps

  1. Click an entry; read the ?entry= panel.
  2. Deep-link an entry not in the loaded pages.
  3. As Admin, open a Super-Admin-kind entry's deep link.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-021Immutable — no edit, no delete, honest empty/read statesP1

Steps

  1. Look for any edit or delete affordance on entries or the list.
  2. Compare "no entries", "no matches", and a failed read where catchable.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-022Publishing switch — the confirm dialogs and the no-undo warning Super AdminP1

Steps

  1. Open /admin/settings/publishing; read the switch and the last-changed stamp.
  2. Toggle it; read the confirm dialog.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-023A failed change leaves the persisted value — the switch reads what the api confirmed Super AdminP1

Preconditions

A failed save to stage (offline at confirm, or a refused check; mark N/A if not stageable).

Steps

  1. Attempt the toggle while the save cannot succeed.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-024The switch's real effect — Admin studio buttons and the hub fact Super AdminP1

Preconditions

Coordinate — flipping this changes Admin publish behaviour globally; restore it afterwards.

Steps

  1. With the switch Off, open a studio as Admin and read the publish control.
  2. Turn it On; re-check; read the Operations hub header as SA.
  3. Restore the previous state.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-025Admin opening the publishing page gets the SA-only messageP1

Steps

  1. As Admin, open /admin/settings/publishing.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

14 · Test records — recorded events & invalidation

Every Mock/Company test keeps a staff-readable events page and a Super-Admin-only invalidation flow. Recorded events show what the counter recorded in factual words — never recordings, clipboard contents, source or hidden test material. Invalidation keeps the history row, marks the result out, restores fresh-test eligibility and reverses Mock rewards exactly so they can be earned again.

RouteScreenRole
/admin/tests/:test/recorded-eventsRecorded events — test facts + the counted/not-counted event listBoth staff roles
/admin/tests/:test/invalidateInvalidate — reason → staff note → confirm → doneSuper Admin

Invalidation reasons are neutral and honest: platform input · defective content · account security · staff decision. The learner reads a neutral explanation — never blame, never the staff note.

TC-LFC-026Recorded events — test facts and the counted/not-counted event listP1

Preconditions

A completed Mock/Company test with events (run one with strictness on first if needed).

Steps

  1. Open /admin/tests/<the test>/recorded-events.
  2. Read the facts header and the event list.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-027Strictness-off and empty lists read as the setting, not missing dataP1

Steps

  1. Open recorded-events for a strictness-off test, and for a test that recorded nothing.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-028The events page never leaks hidden materialP1

Steps

  1. Read the whole events page looking for recordings, clipboard/source content, hidden cases or inferred motives.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-029Invalidate — the link's gate, the four reasons, the staff note Super AdminP1

Destructive — coordinate first

Marks a real test result out and reverses its rewards. Agree the test first.

Steps

  1. On an ended, not-yet-invalidated test, open /admin/tests/<test>/invalidate.
  2. Read the reason choices; pick one; write the staff note (≤500); confirm through the check.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-030What invalidation does — history kept, result out, rewards reversed exactly Super AdminP1

Steps

  1. After invalidating, read the test's row in history, the learner's results/readiness/skills, and the learner's notice.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-031Already-invalidated and not-yet-ended states speak plainlyP2

Steps

  1. Open …/invalidate on the test invalidated above, and on a still-running test.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-032Invalidation refuses a being-erased person's testP2

Preconditions

An ended test belonging to an account mid-erasure.

Steps

  1. Open its invalidate address.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

15 · Cross-cutting staff checks

Checks that belong to the whole console rather than one screen. Wherever this doc already covers the behaviour, these cases verify the invariant holds across areas rather than repeating steps.

TC-OPS-015Every protected write survives the main-site gate — spot-check across areasP1

Steps

  1. With a stale main-site check, attempt one protected write in each of three different areas (e.g. suspend, broadcast send, economy save).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-016A downgraded role loses access on the next privileged actionP2

Preconditions

Coordinate: an account's role changed on the main site while a staff session is open (or simulate by sign-out/sign-in).

Steps

  1. With a staff session open, remove its staff role on the main site; continue working in the console.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-017Unknown is never zero, empty, healthy or "not running" — the sweepP1

Steps

  1. Revisit each area: the hub's signals and rows, people headlines, economy figures, registry lanes, broadcast estimate, audit list.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-018Partial failures keep the rest of a panel usableP2

Steps

  1. Wherever a section failed during the run (a headline figure, a panel section), check the surrounding sections.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PPL-046Vocabulary sweep — the product's own words, never "Labs"P1

Steps

  1. Re-read every screen visited in this doc (or use a text search across them).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-LFC-033Every write in this doc lands in the audit — spot-check the trailP1

Steps

  1. After a testing session, open /admin/audit as Super Admin and find each write you performed (suspension, reset, hold, certificate action, correction, broadcast, mapping change, publishing toggle, invalidation).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-019Responsive + dark — 390 / 768 / 1280 / 1440 px in both themesP3

Steps

  1. Walk the main staff pages at 390, 768, 1280 and 1440 px in light and dark.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-OPS-020Keyboard, focus, dialogs and reduced motion across the consoleP3

Steps

  1. Operate a moderation dialog, a side panel and a table with keyboard alone; repeat with reduced motion on.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________

05 · Admin — Operations & People · Wizly Learning — Testing Handbook · Keep this doc beside the other six files in testing-docs/.