03 · Learner — Account & Platform

The learner's "You"-space, personal records, and every platform-wide behaviour · Requires: a learner account (tester-learner-1..5); some cases need staff (tester-staff-1), the denied or lapsed accounts, or a signed-out browser · Related docs: 01 · Practice, 02 · Tests & Workspace, 06 · End-to-End Journeys

0 · How this document is laid out

Sections 1–12 walk the learner's own pages: Home, Skills, Annual Recap, Profile, all eight Settings addresses, Certificates (including the public verification page), the Inbox and the bell, Achievements, XP history, Topic Requests, Quick Notes and WizBit. Sections 13–19 cover what the shell and platform do everywhere: navigation, themes, motion, toasts, live updates, the deliberately absent Credits, sessions and access pages, and offline/performance/responsive/accessibility. Section 20 is the platform-wide matrix — a checklist of honesty rules with the best place to see each one.

Read this before reporting wording bugs

The expected strings in these cases were taken from the product's own wording files. Quote the exact text you see, not a paraphrase — a changed label is a finding only when it breaks a rule in index §8 (internal state names, "Labs", spec sentences, missing IST labels) or contradicts the domain document.

1 · Home — the way back in HOM

Home is the learner's landing page: a greeting by the product's own clock (IST, whatever the device says), the way back into unfinished work, and small true views of the record. It is built of regions — the opening, then Today, Your record, Notes and news and Around your learning. Every widget reads and fails on its own; a part that cannot be read says so in its own place ("This could not be read just now." + Try again) while the rest stay. Home never invents a competing value — it shows what the owning domain says, or says it could not read it.

AddressPageWho
/Home — greeting, continue, launch, Today, Your record, Notes and news, Around your learninglearner (+ staff, who see no Focus card or Explore)
Region: opening
Greeting ("Good morning/afternoon/evening, name" by IST), today's date, lead "Pick up where you left off, or start something new.", facts (level, streak, when today's Daily closes), the Continue card, quick-launch tiles (Challenges, Daily Challenges, Debug Detective, Code Lab) and — only while an earned certificate waits for a name — a "Set certificate name" action.
Region: Today
The Daily Challenge card, the activity chart card, and the curated Suggestion; when nothing is suggested, "Tests to take" stands in its place.
Region: Your record
Level card, the seasonal Recap (Year) card, latest achievements; eyebrow "Since <month year>" when membership start is known.
Region: Notes and news
My Notes, Announcements (newest four, read-only), Recent activity (recent solutions).
Region: Around your learning
"Short and current": Tests to take (when not already in Today), Tracks in progress, Recent projects, Topic requests, Your certificate — and, only while generated assistance is on, a Credits card (absent on this deployment).
Learner-only extras
A Focus Mode question card for a learner never asked, and "Explore more of Wizly" at the foot listing what the focus hides. Staff see neither.
TC-HOM-001Greeting, date and lead open the pageP1

Preconditions

Signed in as a learner with a display name on the main site.

Steps

  1. Open /.
  2. Read the header area: greeting, eyebrow date, lead sentence.
  3. Open / again after 17:00 IST (or compare morning vs evening).

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-HOM-002Continue picks the most recently active resumable workP1

Preconditions

A learner with at least two unfinished items (e.g. a started challenge with a saved draft and a part-read lesson).

Steps

  1. Work on item A (type a draft, let it save), then work on item B.
  2. Return to / and read the Continue card.
  3. Finish item B (solve/complete it). Reload Home.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-HOM-003Quick launch tiles lead somewhere newP1

Preconditions

Signed in as a learner.

Steps

  1. Find the launch tiles beside the Continue card.
  2. Follow each tile.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-HOM-004Today holds the Daily card, activity and a suggestionP1

Preconditions

A learner who has solved at least one thing recently; today's Daily Challenge published (showcase seed covers today±).

Steps

  1. Read the Today region's three cards.
  2. Follow the Daily Challenge card, then the Suggestion card.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-HOM-005Your record: level, recap teaser, latest achievementsP2

Preconditions

A learner with XP and at least one earned achievement.

Steps

  1. Read Your record: eyebrow, Level card, Year card, achievements card.
  2. Compare the level and XP figures with /xp-history's standing.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-HOM-006My Notes opens the Quick Notes panel on its Notes tabP2

Preconditions

A learner with some text saved in Quick Notes → Notes.

Steps

  1. Read the My Notes card in Notes and news.
  2. Press "Open Quick Notes".

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-HOM-007Announcements show the newest four and mark nothing readP2

Preconditions

A learner with ≥5 unread announcements/notices (or stage by having staff send a broadcast — see doc 05 broadcasts; coordinate in team channel).

Steps

  1. Note the bell's unread count.
  2. Read the Announcements card on Home; count the rows.
  3. Reload Home and re-check the bell count.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-HOM-008Around your learning: tracks, projects, requests, certificate — and no Credits cardP1

Preconditions

A learner with a started track, a saved project, a sent topic request, and (ideally) one issued certificate.

Steps

  1. Read Around your learning (eyebrow "Short and current").
  2. Follow each widget's "see more" link (All tracks / My Projects / Your requests / Certificates).
  3. Look for any Credits widget anywhere on Home.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-HOM-009A failing region fails alone and says so honestlyP1

Preconditions

Browser dev tools open; signed in as a learner.

Steps

  1. On Home, open dev tools → Network. Block one page-part request (e.g. add /api/v1/analytics/around or the notifications read to the request blocking list) and reload.
  2. Observe the affected region versus the rest.
  3. Press the region's "Try again" after unblocking.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-HOM-010"Set certificate name" appears only while a certificate waits for oneP2

Preconditions

Needs staging: an account that earned a certificate before setting a certificate name (see §6 for how certificates are earned; staff can verify in the certificates admin).

Steps

  1. With no certificate awaiting a name, open Home and inspect the header actions.
  2. On an account whose certificate awaits a name, open Home.
  3. Follow "Set certificate name".

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-HOM-011Focus Mode trims Home instead of breaking itP2

Preconditions

A fresh learner who has never answered the focus question (or reset via Settings → Your learning).

Steps

  1. Open Home → the Focus card asks what to concentrate on.
  2. Choose a focus that hides an area (e.g. hide Assessments), save, return to Home.
  3. Open "Explore more of Wizly" at the foot.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-HOM-012Home at every width, both themesP3

Preconditions

Signed in as a learner.

Steps

  1. Open Home at 390 px, 768 px, 1280 px and 1440 px.
  2. Repeat in the other theme (Settings → Appearance) and other mode.

Expected

Also try

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

2 · Skills — evidence, not numbers on a wall SKL

Skills (/skills) reads what the learner's work shows, skill by skill, for a chosen period — an estimate, never a score to chase. Periods offered: 7, 30, 90 and 365 days (30 is the default; the choice is kept on this browser). Each skill's reading is a band — Needs practice · Developing · Strong — or an honest non-figure: "Not enough evidence yet", "Studied for N in this period, with no practice or test evidence yet", "Nothing recorded yet." Trends come from dated evidence, not volume: "Improving: up N points", "Declining: down N points", "Stable", or "Not enough recent practice to read a trend". The page also carries: Your numbers, Practice patterns, the assessment-owned summary (Mock month-on-month change; the most recently tested company's readiness and recent form), a "How your stats work" panel, and a per-skill "Why this result?" evidence panel — panels on the page, never routes.

AddressPageWho
/skillsSkills — readings, trends, evidence, assessment summarylearner (+ staff)
TC-SKL-001Every skill reads as a band or an honest non-figureP1

Preconditions

A learner with mixed history: some skills with test evidence, some with only practice, some untouched.

Steps

  1. Open /skills.
  2. Scan the skill list end to end.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SKL-002The period switch re-reads, and is remembered on this browserP2

Preconditions

Same learner as TC-SKL-001.

Steps

  1. Switch the period 7 → 90 → 365 days.
  2. Watch the figures and the "The last N days" line.
  3. Leave Skills, come back (same browser).

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SKL-003"Why this result?" opens an evidence panel, not a routeP1

Preconditions

A skill with a band.

Steps

  1. Press "Why this result?" on a skill.
  2. Read the panel; follow a piece of evidence; close the panel.
  3. Check the address bar throughout.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SKL-004Trends reflect dated evidence, not volumeP2

Preconditions

A skill whose older results were weak and newer results stronger (e.g. fails then passes).

Steps

  1. Read the trend line on that skill.
  2. Compare with a skill having one result only.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SKL-005Assessment summary: Mock change and company recent formP2

Preconditions

A learner who has finished ≥2 Mock Tests in different months and ≥2 Company Tests in the last 180 days (otherwise stage or mark N/A honestly).

Steps

  1. Read the assessment-owned region on Skills.
  2. Check the recent-form band and its caption.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SKL-006"How your stats work" explains the page in learner wordsP3

Preconditions

Any learner.

Steps

  1. Open the "How your stats work" panel on Skills.
  2. Read it as a learner would.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SKL-007Your numbers and practice patterns stay honest at zeroP2

Preconditions

A nearly-new account (one solve) and your regular account.

Steps

  1. Read Your numbers and Practice patterns on both accounts for the same period.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SKL-008A failed skills read says so; nothing degrades silentlyP2

Preconditions

Dev tools request blocking.

Steps

  1. Block the skills read (/api/v1/analytics/skills*) and open /skills.
  2. Unblock and retry.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SKL-009Skills for staff and for a focused learnerP3

Preconditions

tester-staff-1; a learner with a focus that hides an area.

Steps

  1. Open /skills as staff.
  2. Open it as the focused learner.

Expected

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

3 · Annual Recap — the private year in review RCP

Recap (/recap) is the learner's private year-in-review — theirs alone, never a public page. A learner picks an eligible year and reads what they solved, when, and what they earned. Home's Year card links to it.

AddressPageWho
/recapAnnual Recap — one eligible year at a timelearner (+ staff)
TC-RCP-001Recap opens for an eligible year and tells the truthP1

Preconditions

A learner whose activity spans an eligible year.

Steps

  1. Open /recap.
  2. Choose an eligible year if a chooser is offered.
  3. Read the figures against your own history (XP history, achievements, calendar).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-RCP-002Year selection offers only eligible yearsP2

Preconditions

Any learner.

Steps

  1. Open the year chooser.
  2. Look for the current year (if mid-year) and years before membership.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-RCP-003Recap is private — no public or cross-account viewP2

Preconditions

Two learner accounts.

Steps

  1. Open /recap on account A.
  2. Try to reach A's recap from account B (address manipulation) and signed out.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-RCP-004A failed recap read fails honestlyP3

Preconditions

Dev tools request blocking.

Steps

  1. Block the recap read, open /recap, unblock, retry.

Expected

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

4 · Profile — the private identity summary PRF

Profile (/profile) is the owner's own page: identity as the main site holds it, their stats and activity, a certificate summary that leads to the collection, and recent solutions. It is reached from the account menu — it is not a public profile; nobody else can open yours.

AddressPageWho
/profileProfile — identity, stats, activity, certificates, recent solutionsowner only
TC-PRF-001Profile shows the owner's own identity and recordP1

Preconditions

Signed in as a learner with history.

Steps

  1. Open /profile from the account menu.
  2. Compare identity, stats and activity against Account settings and XP history.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PRF-002Certificate summary leads to the collectionP2

Preconditions

A learner with ≥1 certificate (any state).

Steps

  1. Read the certificate summary on Profile.
  2. Follow it.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PRF-003Recent solutions open the learner's own My Solutions entriesP2

Preconditions

A learner with kept solutions.

Steps

  1. Read the recent solutions list on Profile.
  2. Follow one.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PRF-004No public or other-person profile existsP1

Preconditions

Two learner accounts.

Steps

  1. On account B, try /profile, /profile/anything, and guessed identifiers for account A.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PRF-005Profile reads fail regionally and honestlyP3

Preconditions

Dev tools request blocking.

Steps

  1. Block one profile-part read; open /profile; unblock and retry.

Expected

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

5 · Settings — one page at eight addresses SET

Settings is one page reached at eight addresses. Every address renders the same page with h1 "Settings", opened at the section the address names; the section index scrolls to a section and never changes the address. Each setting saves on its own with its own save state — there is no global Save. Sections in order: Appearance ("Mostly on this device"), Your learning (Focus Mode — learners only, no address of its own), Notifications, Dailies, Companion, Certificates ("Follows your account"), Account ("From the main site"), Data and privacy ("This browser and your account"). The header's lead: "What you can change, and where each choice applies. Every change saves on its own."

AddressOpens at sectionNotes
/profile/settingstop of the pagethe index address
/profile/settings/appearanceAppearancetheme, mode, navigation, palettes, reduced motion, pins reset
/profile/settings/notificationsNotificationsthe seven category switches
/profile/settings/dailiesDailiesper-daily streak switches (learners only)
/profile/settings/companionCompanionWizBit presence, presentation, name, dress-up, orientation replay
/profile/settings/certificatesCertificatescertificate display name + collection visibility
/profile/settings/accountAccountmain-site identity/role/membership/session facts
/profile/settings/data-privacyData and privacylocal-state disclosures, policy links, erasure

Read-on-reach

Account and Data and privacy read their content only once you reach them (scrolled near or opened at their address) — a blank panel above the fold is them waiting, not a bug. Everything else reads with the page.

5.1 The page itself

TC-SET-001All eight addresses open the same Settings pageP1

Preconditions

Signed in as a learner.

Steps

  1. Open each of the eight addresses in turn (table above).
  2. Compare the h1, the section list and the index.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SET-002The index scrolls to a section and never changes the addressP1

Preconditions

Open /profile/settings.

Steps

  1. Press "Notifications" in the Settings index.
  2. Watch the address bar and the scroll position.
  3. Press "Dailies", then Back.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SET-003Every setting saves on its own — no global SaveP1

Preconditions

Open /profile/settings.

Steps

  1. Flip one switch; immediately flip another in a different section.
  2. Look for any page-wide Save/Apply button.

Expected

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

5.2 Notifications

TC-SET-004Seven category switches, each named and explainedP1

Preconditions

Open /profile/settings/notifications.

Steps

  1. Read the switches and their captions.
  2. Flip one off, then on.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SET-005Course-change notices still arrive with System offP2

Preconditions

A learner enrolled in a course's progress, with System notifications off; a staff account to publish a course change (coordinate; may be N/A if unstagable).

Steps

  1. Switch System off.
  2. Have staff change the course's published content.
  3. Watch the learner's inbox.

Expected

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

5.3 Dailies

TC-SET-006Turning a daily off with a live streak asks first — and ends it at onceP1

Preconditions

A learner with an active Daily Challenge streak (solve today's first if needed).

Steps

  1. Open /profile/settings/dailies.
  2. Switch the Daily Challenges daily off.
  3. Read the ask, confirm.
  4. Check the streak on /daily-challenges.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SET-007Staff see no daily switches and no Your-learning sectionP2

Preconditions

Signed in as tester-staff-1.

Steps

  1. Open /profile/settings and /profile/settings/dailies.
  2. Compare the section index with a learner's.

Expected

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

5.4 Appearance

TC-SET-008Theme (Prism/Halo) and mode (light/dark) apply at onceP1

Preconditions

Open /profile/settings/appearance.

Steps

  1. Switch theme Prism → Halo; switch mode light → dark.
  2. Watch the page and header change.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SET-009Navigation style: Sidebar vs DockP1

Preconditions

Open /profile/settings/appearance at ≥1024 px.

Steps

  1. Switch navigation Sidebar → Dock and back.
  2. Navigate between spaces in each.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SET-010Theme-specific options and the pins resetP3

Preconditions

Open /profile/settings/appearance; pins changed in the sidebar.

Steps

  1. In Prism: change section colours; in Halo: change the accent.
  2. Check the editor/terminal palette choice.
  3. Reset the sidebar pins.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SET-011Reduced motion stills everything decorativeP2

Preconditions

Open /profile/settings/appearance.

Steps

  1. Turn reduced motion on.
  2. Walk Home, Skills, a challenge page; watch Halo's sky / WizBit's idle / transitions.
  3. Also set the OS-level reduced-motion preference and reload with the setting off.

Expected

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

5.5 Companion

TC-SET-012WizBit presence: Present vs QuietP2

Preconditions

Open /profile/settings/companion.

Steps

  1. Switch Present → Quiet.
  2. Walk several pages including Home.
  3. Switch back.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SET-013Presentation, name and reset: Companion vs Plain, rename/resetP2

Preconditions

Open /profile/settings/companion.

Steps

  1. Switch presentation Companion → Plain and back.
  2. Rename WizBit to a custom name; open the help panel from the corner.
  3. Reset the name.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SET-014Dress-up is level-gated and honest; orientation replaysP3

Preconditions

Open /profile/settings/companion; a low-level and a higher-level account if possible.

Steps

  1. Open the dress-up choices (skin, decals, chest, lights).
  2. Equip an unlocked look; try a level-locked one.
  3. Replay the first-run orientation.

Expected

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

5.6 Certificates (settings)

TC-SET-015Certificate name rules are enforced with a live print previewP1

Preconditions

Open /profile/settings/certificates on an account whose name is not yet locked (no certificate made).

Steps

  1. Try names that break each rule: test lowercase is fine; try A alone (too short), digits/symbols (Name123!), a web address (name.com), a name with no letters, and a 101-character name.
  2. Watch the "Printed as" preview and error text.
  3. Save a valid name.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SET-016Saving the name with waiting certificates asks, then locks itP1

Preconditions

An account with ≥1 certificate awaiting a name (staff may need to award one — coordinate; otherwise N/A).

Steps

  1. Enter a valid name and press "Save name".
  2. Read the confirm: "Print your certificates with this name?" → confirm "Save and prepare".
  3. Return to the section after certificates generate.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SET-017Collection visibility controls who can see the certificates pageP2

Preconditions

Open /profile/settings/certificates.

Steps

  1. Find the collection-visibility setting; change it; save.
  2. Check its effect where it claims one (e.g. what the collection shows).

Expected

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

5.7 Account

TC-SET-018Account shows main-site facts and owns nothing it shouldn'tP1

Preconditions

Open /profile/settings/account (scroll to it — it reads when reached).

Steps

  1. Read every fact shown: identity, email, role, membership, session.
  2. Look for any edit field, password form, or billing control.

Expected

Also try

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

5.8 Data and privacy

TC-SET-019Local-state disclosures are true, and policy links leave for the main siteP2

Preconditions

Open /profile/settings/data-privacy; have device data present (a saved note, Code Lab draft, chosen filters).

Steps

  1. Read what the page says this browser keeps.
  2. Follow each policy link.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SET-020Erasure: request, 7-day cancel window, live statusP1

Preconditions

A throwaway learner account if you intend to let it run — otherwise request then CANCEL within the window (safe, leaves no erasure). Requires a fresh main-site check (≤15 min): if your sign-in is old, expect the "Confirm on the main site" trip first.

Steps

  1. Open /profile/settings/data-privacy → the erasure part.
  2. Read what erasure removes (it names the record it deletes — on this deployment "XP and preferences" style wording, since Credits are off).
  3. Type the required confirmation and send the request.
  4. Read the status; cancel within the seven-day window.
  5. Check status again.

Expected

Also try

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

6 · Certificates — earned, verified, hidden, corrected CRT

Certificates mark completed subjects (a completed video subject may award one automatically when the domain's switch is on). Every certificate travels one pipeline:

StateWord on the pageMeaning
awaiting-name"Waiting for your name"Earned, but no certificate name set — "Set the name to print on it, and it will be prepared."
generating"Being prepared""Your certificate is being prepared. This can take a few minutes."
failed"Not made yet"Generation failed — "a problem on our side, not anything you did, and the certificate is not lost: staff can make it again."
issued"Issued"Ready: downloadable, publicly verifiable unless hidden.
revoked"Revoked""This certificate has been revoked and is no longer valid." Verification must say so — old PDFs cannot be recalled.
AddressPageWho
/profile/certificatesThe collection — every certificate, any stateowner
/profile/certificates/:idA certificate's entry — what it is and anything it still needsowner
/profile/certificates/:id/detailDetail — the document, its facts, sharing controlsowner (issued/revoked only; other states redirect to the entry)
/certificates/verify"Check a certificate" — type a codeanyone, signed in or not
/certificates/verify/:identifierThe check's answeranyone

Staging help

Earning a certificate means completing a subject for real. If your account has none, complete a short subject (doc 01 covers lessons) or coordinate with staff, who can see certificate administration. Duplicates are not created: completing again returns the existing certificate.

6.1 The collection and its states

TC-CRT-001The collection lists every certificate with its true stateP1

Preconditions

A learner with certificates in ≥2 states (e.g. one issued, one awaiting name).

Steps

  1. Open /profile/certificates.
  2. Read each row's name, state word and what it offers.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRT-002Awaiting-name → name saved → generation startsP1

Preconditions

A certificate in "Waiting for your name" state (name not yet locked).

Steps

  1. Open the certificate's entry; it says what it needs.
  2. Set the certificate name (Settings → Certificates) and confirm.
  3. Return to the collection and watch the state.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRT-003A failed generation is named honestly and loses nothingP2

Preconditions

Hard to stage deliberately — mark N/A unless a generation genuinely fails. Staff can confirm in certificates admin.

Steps

  1. If a certificate shows "Not made yet", open its entry.

Expected

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

6.2 The detail page

TC-CRT-004Detail shows the document, its facts and the downloadP1

Preconditions

An issued certificate.

Steps

  1. Open /profile/certificates/:id/detail from the collection.
  2. Read "The certificate", "Its details", and "Sharing it".
  3. Press Download.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRT-005Hide it → verification answers unknown → show againP1

Preconditions

An issued certificate; a second browser or device signed OUT for the public check.

Steps

  1. In "Sharing it", press "Hide it from the public check"; read the confirm ("Hide this certificate from verification?") and confirm "Hide it".
  2. In the signed-out browser, open the certificate's verify address.
  3. Back on the owner's detail page: confirm "Sharing it" now says hidden; press "Show it again".
  4. Check the public verify address again.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRT-006Copy verification link and Open the verification pageP2

Preconditions

An issued, unhidden certificate.

Steps

  1. In "Sharing it", press "Copy the verification link" — paste it somewhere.
  2. Press "Open the verification page".

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRT-007Revoked: named on the page, not valid in public, not downloadableP2

Preconditions

A revoked certificate (staff-side revoke — coordinate in team channel; otherwise N/A).

Steps

  1. Open the revoked certificate's detail.
  2. Try its public verify address signed out.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRT-008Completing twice never makes two certificatesP2

Preconditions

A completed subject whose certificate already exists (or re-completing after archive/re-publish — coordinate).

Steps

  1. Re-complete the awarding action for a subject you already hold a certificate for.
  2. Check the collection.

Expected

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

6.3 Name corrections

TC-CRT-009Propose a correction: one at a time, with a reasonP2

Preconditions

An account whose certificate name is locked (any issued certificate).

Steps

  1. Settings → Certificates → "Propose a correction".
  2. Send a corrected name with a reason.
  3. While it waits: replace it, then cancel it.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRT-010🖥🖥 Approve/reject decides — and a failed reissue never reversesP2

Preconditions

Two browsers: learner with a pending correction; a Super Admin (coordinate — owner accounts only) who can approve/reject and reissue.

Steps

  1. Learner sends a correction.
  2. Super Admin rejects it with a reason → learner sees "Your correction to “<name>” was not approved, on <date>: <reason>".
  3. Send another; Super Admin approves → learner sees the approval note.
  4. Super Admin explicitly reissues the certificate; learner checks the collection and public verify.

Expected

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

6.4 Public verification — anyone, no sign-in

TC-CRT-011The verify page works signed out, standalone, no chromeP1

Preconditions

A signed-out (or private) browser.

Steps

  1. Open https://app.sprinklejelly.com/certificates/verify signed out.
  2. Note the page furniture.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRT-012A valid code answers valid with the public fields onlyP1

Preconditions

A real unhidden certificate code (copy it from TC-CRT-006).

Steps

  1. Signed out, open /certificates/verify/<code> (or type it and press Check).
  2. Read the answer panel.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRT-013Unknown, hidden and malformed all read alikeP1

Preconditions

A hidden certificate's code (TC-CRT-005) plus invented codes.

Steps

  1. Check: (a) the hidden code, (b) WZ-AAAA-BBBB-CCCC invented, (c) a malformed string, (d) an address with an over-long identifier.
  2. Compare every answer word for word.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRT-014Field rules: ≤40 chars, uppercased, empty asks, lowercase worksP2

Preconditions

The verify page, signed out.

Steps

  1. Type a valid code in lowercase → Check.
  2. Type past 40 characters (the field caps); try an empty Check.
  3. Note the placeholder.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRT-015Failure and throttle say so — never read as invalidP2

Preconditions

Dev tools request blocking, or genuinely hit the pace limit by checking repeatedly fast.

Steps

  1. Block the verification api, check a valid code.
  2. Unblock; hammer Check repeatedly to trigger throttling (or accept an organic failure).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRT-016Each Check is a fresh check; the result is announcedP3

Preconditions

A valid code; a screen reader if available.

Steps

  1. Check the same code twice in a row.
  2. Have the answer region read out.

Expected

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

7 · Inbox & the bell — in-app notices, honestly counted NTF

Notifications exist in-app only: the bell in the header and the Inbox page. No email, SMS or push — their absence is correct. The bell badge counts unread up to 99 ("99+" beyond); a confirmed zero hides the badge; an unreadable count shows a small hollow mark — an unknown count must never look like zero. The panel previews the newest six, marks nothing read by opening, and offers "Mark whole inbox read" (undoable while its toast shows). The Inbox groups notices under Today / This week / Earlier, twenty at a time with "Load more", per category or All; a row's ⋯ marks read/unread, deletes, or reads a notice in full; Delete and Mark all read act at once and send when their Undo ends; Clear asks first. Notices age out at 90 days; deleting a notice never deletes what it told you about.

Address / surfaceWhat it is
bell (header)Unread count + newest-six preview panel; "Open inbox" link; "Mark whole inbox read"
/inboxThe whole inbox: grouped, filtered, paginated
/profile/settings/notificationsThe seven category switches (§5.2)

Easy ways to earn real notices

Earn an achievement (finish a first Mock), level up, keep a Daily streak to a milestone, or ask staff to send a broadcast. Each event creates one notice, once — duplicates are a bug.

7.1 The bell

TC-NTF-001Badge counts unread, caps at 99+, hides at zeroP1

Preconditions

Accounts with 0, some, and (if stageable) >99 unread notices.

Steps

  1. Read the bell on each account.
  2. Mark all read; watch the badge.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-NTF-002An unreadable count is a hollow mark, never a fake zeroP2

Preconditions

Dev tools: block the unread-count read.

Steps

  1. Block the unread read and reload any page.
  2. Look at the bell.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-NTF-003The panel previews six, filters by category, marks nothing by openingP1

Preconditions

≥7 unread notices across ≥2 categories.

Steps

  1. Open the bell. Count the rows.
  2. Note the unread count, close the panel, check the badge again.
  3. Switch the panel's All/category filter.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-NTF-004"Mark whole inbox read" is undoable while its toast showsP1

Preconditions

Several unread notices.

Steps

  1. Open the bell → "Mark whole inbox read".
  2. While the toast shows, press Undo.
  3. Repeat and let the toast expire instead.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-NTF-005Following a notice marks it read and lands on its destinationP1

Preconditions

An unread notice that has a destination (e.g. an achievement → /achievements).

Steps

  1. Open it from the bell panel.
  2. Check the badge and the row's read standing.

Expected

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

7.2 The Inbox

TC-NTF-006Groups, order and pagination: Today / This week / Earlier, 20 + Load moreP1

Preconditions

>20 notices (use an older account or staff-seeded broadcast; N/A honestly if impossible).

Steps

  1. Open /inbox; read the group headings and first rows.
  2. Press "Load more".

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-NTF-007A row's ⋯ marks read/unread and deletes with UndoP1

Preconditions

Several notices, mixed read standing.

Steps

  1. Row ⋯ → mark a read notice unread; verify the badge rises.
  2. Mark it read again.
  3. ⋯ → Delete; press Undo on the toast; delete again and let it send.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-NTF-008Category filter + "Mark all <category> read" scopes correctlyP2

Preconditions

Unread notices in ≥2 categories.

Steps

  1. Filter the inbox to one category (e.g. Achievements).
  2. "Mark all Achievements read" → let the toast send.
  3. Check other categories and the address bar.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-NTF-009Clear asks first, reports honestly, keeps protected noticesP2

Preconditions

A populated inbox (a relief-grant notice would be staff-staged — N/A if none).

Steps

  1. Inbox → Clear (all, or within a filtered category).
  2. Read the confirm: "Delete every notice?" / "Delete every <category> notice?"
  3. Confirm; read the outcome toast.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-NTF-010Once-only delivery: one event, one notice, everP1

Preconditions

Trigger a repeatable event (e.g. re-open the same achievement's moment, or a staff re-send of a broadcast — coordinate).

Steps

  1. Trigger the same logical event twice (reload the earning page, re-finish the action).
  2. Count the inbox items for it.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-NTF-011A notice created while offline lands on the next visitP2

Preconditions

Two conditions you can stage: keep the learner's browser closed/offline while an event happens (e.g. staff broadcasts to all learners — coordinate in team channel).

Steps

  1. Sign out / close the learner's tab.
  2. Have the event fire.
  3. Sign back in and open the inbox.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-NTF-012Deleting a notice never deletes the thing it announcedP2

Preconditions

A notice announcing something real (achievement unlocked, result corrected).

Steps

  1. Delete the notice.
  2. Open the thing it announced (achievements page, test result).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-NTF-013Empty and failing states are honestP2

Preconditions

A fresh account; dev tools to block the inbox read.

Steps

  1. Open /inbox on the fresh account.
  2. Block the inbox read on yours and open it.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-NTF-014Staff do not browse learner inboxesP2

Preconditions

tester-staff-1.

Steps

  1. As staff, look for any console screen listing a learner's inbox/notices.
  2. Check staff's own inbox — they hold one only for their own events.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-NTF-015In-app only: no email, SMS or push anywhereP3

Preconditions

Any learner.

Steps

  1. Trigger a notice; check the account's real mailbox and the OS for push prompts.
  2. Look for notification-channel settings beyond the seven switches.

Expected

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

8 · Achievements — earned, never claimed ACH

Achievements (/achievements) are milestones that unlock by themselves — "there is nothing to claim, they unlock no content, and nobody is ranked against anybody." Views: All · Earned · Not earned yet, plus Closest to unlocking (the three you are nearest to, by how much of each requirement is done — "a view of your progress, not a goal you have set"). The chosen view is remembered on this browser. Families: Mock Tests (5 badges), Daily streak (100/200/365 days), Projects (first), completion badges per written subject, per video subject and per Track (a subject or Track gets its badge into the catalogue once you start it), Typing Quest (13).

AddressPage
/achievementsThe badge catalogue with your standings
TC-ACH-001Views filter honestly and the choice is rememberedP1

Preconditions

A learner with ≥1 earned and ≥1 unearned badge.

Steps

  1. Open /achievements; switch All → Earned → Not earned yet.
  2. Leave and return (same browser); try a second browser.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ACH-002Badges unlock on their own — once each, no claim buttonP1

Preconditions

A learner one step from a badge (e.g. first Mock completion pending).

Steps

  1. Note the badge unearned; complete the requirement (finish the Mock).
  2. Watch for the unlock; re-do the action.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ACH-003Closest to unlocking shows exact progress, up to threeP2

Preconditions

A learner part-way to ≥3 badges (e.g. 12-day streak toward 100, lessons toward a subject badge, a best Mock score).

Steps

  1. Open the Closest to unlocking view.
  2. Read each card's progress line against your real record.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ACH-004Badges stay earned; invalidation corrects visiblyP2

Preconditions

An earned badge; (for the second half) a staff-invalidated test that had paid a badge — coordinate, else N/A.

Steps

  1. Have staff reset some unrelated progress (or just observe over time).
  2. Check the badge stays.
  3. For invalidation: check the badge's card and XP history after a test is invalidated.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ACH-005Families are named as learners know themP3

Preconditions

Any learner.

Steps

  1. Scan the catalogue's family groupings and the "Completion badges" group.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ACH-006Starting a subject or Track brings its badge into the catalogueP2

Preconditions

A learner who has not started a particular published subject/track; another who has.

Steps

  1. Compare the completion-badge lists of both accounts.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-ACH-007Company Tests earn no achievements — and the page does not pretend otherwiseP2

Preconditions

A learner about to finish a first Company Test.

Steps

  1. Finish a Company Test.
  2. Check achievements and inbox.

Expected

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

9 · XP history — every award, in order XPC

XP history (/xp-history) lists every award, reversal and correction, newest first — "Every award you have earned, with what it was for. XP recognises activity; it is not a skill score and it unlocks nothing." Rates in force: challenge/track first-accept by difficulty — easy 30, medium 60, hard 100, extreme 150 (a challenge and its track twin pay independently; re-solving in any language never repays); Daily bonus 0–200 by difficulty (hard=40); completing a written subject 250; first Mock completed 200, first Mock passed 300; Typing Daily 20 per date; Company Tests pay nothing. Levels: threshold 250×(L−1)², display cap 100 — "Levels are shown up to 100; XP keeps counting."

AddressPage
/xp-historyStanding + the full award ledger
TC-XPC-001The ledger lists awards newest-first with signed valuesP1

Preconditions

A learner with several awards of different kinds.

Steps

  1. Open /xp-history.
  2. Read the top entries: sign, area, what it was for, when.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-XPC-002A known solve pays exactly the documented rate — onceP1

Preconditions

An unsolved easy challenge ("Running Total of Marks") and an unsolved medium.

Steps

  1. Solve the easy challenge → check the ledger's new entry.
  2. Solve the medium.
  3. Re-solve the easy challenge in another language.
  4. Solve a challenge that also sits in a track, then solve it via the track.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-XPC-003Total, level and "what pays XP" reconcile and stay honestP1

Preconditions

A learner with awards.

Steps

  1. Read the standing (Total XP, level, progress to next).
  2. Sum the ledger entries and compare.
  3. Read the "What pays XP" part.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-XPC-004Mock, subject and typing awards pay their documented figuresP2

Preconditions

A learner who has not yet finished a Mock, completed a written subject, or done a Typing Daily.

Steps

  1. Finish a first Mock (fail or pass) → check entries.
  2. Pass a first Mock → check.
  3. Complete a written subject; do today's Typing Daily.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-XPC-005Reversals and corrections show their reason, not a silent rewriteP2

Preconditions

A staff-invalidated test that had paid XP, or a staff correction — coordinate, else N/A.

Steps

  1. After the invalidation/correction, read the ledger.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-XPC-006Focus-hid areas are excluded from the list, and say soP3

Preconditions

A learner with a focus that hides an XP-earning area.

Steps

  1. Open /xp-history under that focus.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-XPC-007Indian grouping and honest failure on the ledgerP3

Preconditions

An account with a large XP total (or note as a review point); dev tools.

Steps

  1. Read any figure ≥1,00,000 (or the largest available) — check grouping.
  2. Block the ledger read; open the page.

Expected

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

10 · Topic Requests — ask where it is missing TRQ

Topic Requests are how a learner asks the content team for missing material. Creation happens in a contextual dialog on the page it's missing from — a catalogue whose search found nothing offers it (the search may prefill the title, ≤120 chars), as do eligible course/challenge/track/daily/debug/template pages ("Request a topic" / "Request a course" / "Request a template"). Title ≤120 chars, description ≤2000, up to five linked items, a daily send cap. Standings: Pending → Approved/Rejected → Implemented; Archived means the learner retracted. "Requests are suggestions, not promises."

Address / surfaceWhat it is
/requestsYour requests, newest first — 20 at a time + Load more; decided rows show when
request dialogOpens from eligible pages, carrying that page's context
TC-TRQ-001/requests lists your own requests, newest first, with standingsP1

Preconditions

A learner with ≥1 request; another with none.

Steps

  1. Open /requests on both.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRQ-002The dialog opens from eligible pages, carrying real contextP1

Preconditions

Open the challenge catalogue; search for something absent (e.g. "quantum flux").

Steps

  1. Search the catalogue for a term with no results → press the request offer.
  2. Read the dialog: title, description, "Sent with your request" context rows.
  3. Cancel; then open the dialog from a course subject page instead.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRQ-003Field limits are counted live and enforcedP1

Preconditions

The request dialog open.

Steps

  1. Type a 121+ char title — watch the counter turn danger.
  2. Paste a >2000-char description.
  3. Try to send empty fields.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRQ-004Sending lands as Pending; a duplicate is refused distinctlyP1

Preconditions

The dialog open.

Steps

  1. Send a real request ("QA-<initials> <date> — <topic>").
  2. Send the same titled request again from the same place.
  3. Send several quickly to find the daily cap (if reachable).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRQ-005Retract asks beside the button and archives the requestP1

Preconditions

A Pending request of yours.

Steps

  1. On /requests, press Retract on the pending row.
  2. Read the ask: "Retract this request? Retracting is final. You can send a new request later."
  3. Confirm Retract (or "Keep it" first to verify cancel works).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRQ-006Decided requests show when; implemented ones open their contentP2

Preconditions

Requests staff have approved/rejected/implemented (coordinate via doc 05 review page, or N/A).

Steps

  1. Read the rows: decided ones show when the decision landed.
  2. On an Implemented row, follow "Open content".
  3. Check the inbox for the implemented notice.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRQ-007Submitted text is immutable — no edit surface existsP2

Preconditions

A sent request.

Steps

  1. Look for any way to edit the title/description of a sent request (row, dialog, address probing).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRQ-008Pagination and Home's requests widget agreeP3

Preconditions

>20 requests (unlikely — N/A honestly) plus Home.

Steps

  1. Open /requests; Load more.
  2. Compare Home's "Topic requests" widget rows.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-TRQ-009Linked items: up to five, learner-openable onlyP3

Preconditions

A request flow where linked content applies (staff link content during review; the learner side reads them).

Steps

  1. On an implemented/approved request, read the linked items.
  2. Try opening each.

Expected

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

11 · Quick Notes — the header panel, no route QN

Quick Notes is a panel opened from the header button (or Ctrl+Alt+N / ⌥⌘N), never a page. Two modes: Notes — one persistent private note saved to the account — and Scratchpad — temporary text kept in the tab until it closes or you sign out, never saved to the account. Its save states are literal: "Saving…", "Saved just now / N minutes ago", "Not saved, tap to retry", "Saved locally", "Work at risk…", "Read only while maintenance is under way.", "Signed out, so nothing more is saved here." During a live test it is closed entirely: "Quick Notes is closed while your test is running."

SurfaceWhat it is
Header button "Quick Notes"Opens the one panel (also via Home's My Notes → Notes mode)
No addressThere is deliberately no route — the panel travels with you
TC-QN-001The panel opens from the header and travels between pagesP1

Preconditions

Signed in as a learner.

Steps

  1. Press the Quick Notes header button (or Ctrl+Alt+N).
  2. Type in Notes; navigate to another page with the panel open.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-QN-002Scratchpad is per-tab temporary; Notes persistsP1

Preconditions

Two tabs on the same account/browser.

Steps

  1. Type "scratch-123" in Scratchpad in tab A; open the panel in tab B.
  2. Type "note-456" in Notes in tab A; wait for its save state; check tab B.
  3. Close tab A entirely; reopen the product in a new tab.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-QN-003Save states are literal, including "Saved locally"P1

Preconditions

Panel open in Notes; dev tools for going offline.

Steps

  1. Type and pause: watch "Saving…" → "Saved just now".
  2. Go offline (dev tools → Network → Offline), type more.
  3. Come back online; watch the recovery.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-QN-004Live test closes it; maintenance makes it read-only; signed-out statesP2

Preconditions

A live test in progress (see doc 02) or N/A; a maintenance window if scheduled; a second browser to end the session.

Steps

  1. During a live test, look for the Quick Notes button/panel.
  2. During a maintenance window, check the panel's state.
  3. End the session from another browser; return to this tab's panel.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-QN-005Privacy: only the owner can ever read a noteP1

Preconditions

Learner A with a saved note; staff account B.

Steps

  1. As staff B, hunt the console for any way to read A's note.
  2. Read the panel's own words about privacy.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-QN-006Character limits and conflicts are said in wordsP2

Preconditions

Panel open; a second tab/device for conflicts.

Steps

  1. Paste a text far past the note's character limit.
  2. In tab B edit the note while tab A holds an older copy, then type in A.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-QN-007Load failures fail as themselves, and the panel stays out where it mustP2

Preconditions

Dev tools to block the note read; pages where the panel is suppressed.

Steps

  1. Block the note read, open the panel → "Couldn't load your notes." + Retry.
  2. Look for the button on suppressed pages (sign-in pages, live-test room, staff console).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-QN-008Sign-out clears the Scratchpad but keeps what the spec keepsP2

Preconditions

A tab with Scratchpad text and a saved Note; a way to end the session (main-site sign-out or second browser).

Steps

  1. End the session; reopen the product signed in again on this browser.
  2. Open the panel.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-QN-009Keyboard reach and focus behaviourP3

Preconditions

Keyboard only.

Steps

  1. Ctrl+Alt+N opens; tab through the panel's controls (mode switch, textarea, minimise, move, close).
  2. Close it and check where focus lands.

Expected

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

12 · WizBit — the companion in the corner WZB

WizBit is the product's companion: a small character in the bottom-right corner (64 px on a computer, 48 px on a phone, 44 px on quiet pages — solving pages, Code Lab, Workspace, paper practice) which opens the help panel when asked. It never opens on its own, never covers content, is suppressed during live tests, in the staff console and on sign-in pages, sleeps after a long idle, and creates no inbox items. Its help panel offers a "Guide to this page" (ordered steps that reset when you navigate), suggested chips, and a product-question field answered from an authored knowledge base — which works fully with generated assistance off (as on this deployment). Settings → Companion controls its presence (Present/Quiet), presentation (Companion/Plain), name and dress-up.

SurfaceWhat it is
corner (bottom-right)The character; opens the help panel; never self-opens
help panelGuide to this page, suggested chips, question field; bottom-sheet on phone
/profile/settings/companionPresence, presentation, name, dress-up, orientation replay (§5.5)
TC-WZB-001The corner is present, sized for the page, and opens only on askP1

Preconditions

Learner with WizBit Present.

Steps

  1. Open Home, a challenge page, Code Lab, the catalogue.
  2. Watch the corner on load and while scrolling — does anything open itself?
  3. Measure its footprint roughly; check it never covers a control or content.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZB-002Suppressed where it must be: live test, staff console, sign-inP1

Preconditions

A live test (doc 02), tester-staff-1, a signed-out view of /handoff and /certificates/verify.

Steps

  1. Look for the corner in the test room; in the staff console; on standalone pages.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZB-003Guide to this page: ordered steps that reset on navigationP1

Preconditions

On a page with an authored guide (most pages have one).

Steps

  1. Press the corner → "Guide to this page".
  2. Step through; navigate to another page mid-guide; reopen; press Done then restart.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZB-004Suggested chips and the question field answer from authored knowledgeP1

Preconditions

The help panel open on a content page.

Steps

  1. Press a suggested chip; read the answer.
  2. Type a product question ("how do mock tests work?", "what is a streak?").
  3. Ask something the KB cannot know.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZB-005WizBit creates no inbox items — everP2

Preconditions

A learner; note the inbox count.

Steps

  1. Use the panel: guides, questions, chips — every interaction.
  2. Check the bell and inbox afterwards.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZB-006Quiet and Plain honour the settings without breaking helpP2

Preconditions

Settings → Companion.

Steps

  1. Set Quiet: walk pages — the corner is gone; help entry points that the page itself offers still work where spec'd.
  2. Set Plain: compare the panel's content with Companion mode on the same page.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZB-007First-run orientation shows once on Home and replays from SettingsP3

Preconditions

A fresh learner (never seen orientation) and your account.

Steps

  1. Fresh account: open Home → orientation introduces WizBit.
  2. Dismiss it; reload — it does not nag again.
  3. Your account: Settings → Companion → replay orientation.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZB-008Panel behaviour: bottom-sheet on phone, focus and dismissalP3

Preconditions

Phone viewport (390 px) and computer.

Steps

  1. Open the panel at 390 px — it presents as a bottom sheet; dismiss by drag or close control.
  2. On computer: keyboard-open the panel, escape, check focus return.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZB-009Idle sleep and expressions never interfereP3

Preconditions

The corner visible; time to watch.

Steps

  1. Leave a page untouched for several minutes — the corner sleeps.
  2. Use it again — it wakes.
  3. During a live test it must not animate at all (verify with doc 02's test).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZB-010Renamed WizBit speaks under its nameP3

Preconditions

Rename the companion (Settings → Companion).

Steps

  1. Open the panel and any place the companion is named.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-WZB-011Decoration holds still while a dialog is openP3

Preconditions

Any page with animated decoration (Halo sky, WizBit idle) and a modal dialog open.

Steps

  1. Open a modal (e.g. the retract confirm or a menu dialog) over an animated page.

Expected

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

13 · Shell & navigation — the way the product is walked PLT

The learner shell gives every page its frame: the wordmark (leads Home), header tools (Quick Notes, bell, light/dark switch on computer, level/XP pill, account menu), and navigation in one of two presentations — Sidebar (collapsible space groups, a draggable Pinned group) or Dock (bottom bar; a space with more than one page opens a mini popover). The learner's spaces, in order: Home · Learn · Practice · Assessments · Build · You, plus the standalone Bounties page in no space. Staff also see a Console link and a staff console↔learner view switch. Pages beneath the shell mark their own active link; a nested address lights the longest-matching nav link.

SpacePages
HomeHome
LearnCourses, Video courses
PracticeDaily Challenges, Challenges, Tracks, Debug Detective, Aptitude, Typing Quest, My Solutions
AssessmentsAssessments dashboard, Mock Tests, Company Tests, Test results
BuildCode Lab, My Projects, Course Workspaces, Tools
YouSkills, Achievements, Certificates, XP history, Annual Recap, Topic Requests, Inbox (+ Credits, only while generated assistance is on)
—Bounties (own standalone entry, no space)
TC-PLT-001Every space and link in You is present and leads somewhere realP1

Preconditions

Signed in as a learner, Sidebar presentation.

Steps

  1. Open the You group; follow every link: Skills, Achievements, Certificates, XP history, Annual Recap, Topic Requests, Inbox.
  2. Look specifically for a Credits link.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-002Sidebar: collapsible groups and a draggable Pinned groupP2

Preconditions

Sidebar presentation.

Steps

  1. Collapse and expand space groups — state persists across pages.
  2. Drag links into/out of Pinned; reload.
  3. Reset pins (Settings → Appearance) and confirm the default returns.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-003Dock: bottom bar, popovers for multi-page spaces, phone behaviourP2

Preconditions

Dock presentation; 390 px and computer widths.

Steps

  1. Press You (multi-page) → the mini popover lists its pages; pick Inbox.
  2. Press Home (one page) → goes straight there.
  3. Repeat at phone width.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-004Header tools and the account menu contain exactly what they shouldP1

Preconditions

Signed in as a learner, computer width; then phone width.

Steps

  1. Read the header end: Quick Notes, bell, mode switch, level/XP pill, account menu.
  2. Open the account menu; on phone, check the mode switch moves into it.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-005Staff see the console link and the learner↔console way backP2

Preconditions

tester-staff-1.

Steps

  1. In the learner shell, open the account menu → "Staff console".
  2. In the console, account menu → "Learner view".

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-006Wordmark leads Home; space chips name where a page livesP3

Preconditions

Any learner page.

Steps

  1. Press the wordmark.
  2. On a nested page, read the space chip/header context.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-007Learners opening /admin get the same nothing as any unknown addressP1

Preconditions

A learner account.

Steps

  1. Open /admin, /admin/people, /admin/anything as a learner.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-008Deep links, Back/Forward and refresh keep their honestyP2

Preconditions

Any learner.

Steps

  1. Deep-link into /profile/settings/dailies in a fresh tab.
  2. Navigate around, then Back through several pages.
  3. Refresh mid-page.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-009The header veil and sticky chrome behave on scrollP3

Preconditions

A long page (Skills or Inbox), both themes.

Steps

  1. Scroll slowly past the top; keep scrolling.
  2. Watch the header for jank, jump or content clipping.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-010Focus order and skip affordances across the shellP2

Preconditions

Keyboard only.

Steps

  1. Tab from the browser chrome: wordmark → header tools → navigation → main content.
  2. Look for a skip-to-content affordance and a main landmark.

Expected

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

14 · Bounties & Aptitude — the two small pages PLT

Two pages exist deliberately at the edges of finished. Bounties (/bounties) is a text-only page explaining the programme — no eligibility check, entry point or progress UI exists yet. Aptitude (/aptitude) is the product's only unbuilt page — the model case for coming-soon: it renders "This page is coming soon." inside the shell with same-domain links, never a blank page or error.

TC-PLT-011Bounties reads as an honest programme page with working linksP3

Preconditions

Signed in as a learner.

Steps

  1. Open /bounties; read it end to end; follow every link.
  2. Hunt for any interaction — form, button, progress bar.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-012Aptitude is coming-soon done right — the model caseP2

Preconditions

Signed in as a learner.

Steps

  1. Open /aptitude from the Practice navigation.
  2. Check it at phone width and for staff.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-013Coming-soon honesty elsewhere: runtimes and Code Lab ReactP3

Preconditions

Code Lab open.

Steps

  1. Read the runtime list (TypeScript, Kotlin, Swift, Scala, React for Code Lab).

Expected

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

15 · Themes, motion & the lite switch PLT

Two themes draw the whole product: Prism (daylight; dock default; spring motion; section colours) and Halo (night-first; sidebar default; glide motion; accent). Each has light and dark mode via the header switch — one shared preference with Settings. Appearance is a device preference: it survives sign-out and is not account data. Motion is kept, never removed: it stills only under reduced motion (setting or OS), during a live test, while the learner types or runs code, and while a modal is open. Lite mode — device-driven, and forcible for testing via dev tools (document.documentElement.setAttribute("data-lite","")) — removes blur, looping decoration and layout glides.

TC-PLT-014Prism × light/dark draws every surface of this doc's pagesP1

Preconditions

Theme Prism.

Steps

  1. Walk Home, Skills, Settings, Inbox, Achievements, XP history, Requests, a certificate detail in light mode.
  2. Flip to dark mode (header switch); repeat.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-015Halo × light/dark draws every surface likewiseP2

Preconditions

Theme Halo.

Steps

  1. Repeat the TC-PLT-014 walk in Halo, both modes, including decorative areas (sky, glows).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-016Appearance is the device's: it survives sign-out and account switchesP1

Preconditions

One browser; two learner accounts.

Steps

  1. Set Halo dark on account A; sign out (main site); sign in as account B in the same browser.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-017Motion stills automatically where spec demandsP2

Preconditions

A live test (doc 02) or N/A; a code editor; a modal.

Steps

  1. Watch decoration while: a live test runs; you type in an editor; a program runs; a modal is open.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-018Lite mode: no blur, no looping decoration, no layout glidesP2

Preconditions

Dev tools console.

Steps

  1. Run document.documentElement.setAttribute("data-lite","").
  2. Walk Home, Skills, Inbox: watch the header veil, background decoration, toast entrances, list reordering.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-019Animations stay on transform/opacity and pause off-screenP3

Preconditions

Dev tools (Performance/Rendering) if available.

Steps

  1. Scroll fast through long lists; watch for layout jank.
  2. Check decoration below the fold does not burn cycles (Rendering → frame stats, or just CPU feel).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-020Nothing essential is conveyed by colour aloneP2

Preconditions

Any status-heavy page (Skills bands, request standings, certificate states).

Steps

  1. Squint / desaturate (dev tools → Rendering → emulate vision deficiencies if available).

Expected

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

16 · Toasts — the passing word PLT

Toasts are brief on-screen messages, top-right under the header. Rules (Interface): info/success/earned pass in ~5 s; warning and danger persist until dismissed; a toast may carry one action (Undo waits ~6 s, and the change is sent only when the toast ends — dismissed, timed out, or the page hidden/left); at most three show at once and the rest queue, never dropped; an identical passing toast does not double; a toast never takes focus (F8 reaches them); while a live test runs, every toast is held and shown once it ends. A toast is a passing word — the page itself shows the outcome.

TC-PLT-021Passing toasts leave in ~5s and pause under pointer or focusP2

Preconditions

Any toast-raising action (e.g. "Copy the verification link", mark a notice read).

Steps

  1. Raise one; time it.
  2. Raise another; hover it; move focus into it.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-022Warning/danger persist; max three show; identical passing dedupesP2

Preconditions

Ways to raise several toasts quickly (repeated mark-read, copy actions, a forced failure for a warning).

Steps

  1. Raise 4–5 toasts fast; watch the stack.
  2. Raise the identical passing toast twice.
  3. Trigger a warning toast — does it stay?

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-023An Undo waits ~6s and sends its change only when the toast endsP1

Preconditions

An undoable action (delete a notice, mark all read).

Steps

  1. Delete a notice; on another tab/device (or after reload) verify the delete has not yet been sent while the toast shows.
  2. Let the toast expire; verify the delete lands.
  3. Repeat: press Undo — it is never sent.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-024F8 reaches toasts; toasts are held entirely during a live testP2

Preconditions

A raised toast; a live test (doc 02) or N/A.

Steps

  1. Raise a toast, press F8 — focus lands on it; Esc/dismiss returns focus to your place.
  2. During a live test, cause a toast (e.g. an earned achievement on another tab — or observe whether none can arrive).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-025The page owns the outcome — a toast is never the only recordP1

Preconditions

Any outcome that toasts (save, delete, award).

Steps

  1. Raise the outcome; let the toast pass; re-check where the outcome lives on the page.

Expected

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

17 · Live updates, polling & the api PLT

Live updates ride one server-sent stream per browser — shared across tabs via Web Locks/BroadcastChannel, so ten tabs cost one stream. A hidden tab releases its hold (~60 s); a dropped stream reconnects within ~60 s; stream states are opening · live · paused · reload · over, and there is no silent fallback — a stream that cannot run says so rather than pretending to poll. Polling pages stop polling while hidden or signed out and back off to ≤5 min. Api reads time out at ~30 s, writes at ~60 s — a timeout surfaces as an honest failure, never a hang.

TC-PLT-026One stream per browser, whichever tabs are openP2

Preconditions

Dev tools → Network filtered on the live-channel request.

Steps

  1. Open the product in one tab; find the stream request.
  2. Open two more tabs on live-updated pages; count the stream connections.
  3. Close the tab that owns the stream; watch another take over.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-027Hidden tabs release the stream (~60s); reconnects happen within ~60sP3

Preconditions

Dev tools Network; a second device/profile to trigger a notice.

Steps

  1. Hide the tab for >60 s; check the stream state.
  2. Throttle the network to drop the connection; time the reconnect.
  3. Trigger a notice while reconnected — it still arrives.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-028Polling sleeps when hidden or signed out and backs off ≤5 minP3

Preconditions

Dev tools Network on a polling page (e.g. certificate "Being prepared" watch, unread count).

Steps

  1. Watch poll cadence while visible; hide the tab — polls stop.
  2. End the session in another browser; this tab stops polling entirely.
  3. Force failures; watch the interval back off.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-029Api timeouts surface as honest failures (~30s reads / ~60s writes)P2

Preconditions

Dev tools network throttling + request blocking to simulate a hung api.

Steps

  1. Delay a read past its timeout (block it ~35 s); watch the page.
  2. Delay a write similarly.

Expected

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

18 · Credits — expected ABSENT on this deployment PLT

GENERATED_ASSISTANCE=false on this deployment. That makes the whole Credits surface absent by design: no header balance, no /credits link in You, /credits and /credits/history answering as unknown addresses, no paid "Analyse my code"/"Explain" actions, no generated help in Workspace, no Credit lines in Data-and-privacy wording. Verifying the absence is the test.

What would exist when it is on (do not test for presence)

A header/balance affordance and a /credits page: "Credits pay for generated assistance and nothing else…"; a monthly cycle with a base grant, a one-time continuation grant, a "Clears on <date>" line ("Nothing rolls over"), a hold-then-capture charge flow shown before confirming a request, a /credits/history ledger, warning toasts at high use, and the "Held for a request in progress" figure. None of this may appear while the switch is off.

TC-PLT-030/credits and /credits/history answer as not-foundP1

Preconditions

Signed in as a learner.

Steps

  1. Open /credits and /credits/history.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-031No Credit surface anywhere: header, You nav, Home, SettingsP1

Preconditions

Signed in as a learner.

Steps

  1. Inspect the header end for a balance/credits pill.
  2. Open the You nav group, Home's regions, Settings' sections, the Data-and-privacy wording, the XP page's "what pays" note.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-032No paid-assistance entry points exist in any featureP1

Preconditions

Walk the likely places.

Steps

  1. On a challenge page, lesson, Workspace, Code Lab and test review: hunt for "Analyse my code", "Explain", "Ask AI", priced buttons, or Credit confirmations.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-033Staff surfaces likewise hide the switch's world correctlyP2

Preconditions

tester-staff-1.

Steps

  1. Open the console's Economy area and Settings-like pages; look for Credit configuration surfaces that make sense while off.

Expected

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

19 · Sessions, sign-in & the access pages SES

WordPress owns identity, sign-in and sign-out — the product has no forms of its own. A web session lives 12 h from the last handoff with a 2 h inactivity allowance; one web session per person, newest wins — a newer sign-in ends the older, which is told why on its next request. The standalone access pages: /handoff (signing-in trip), /restricted (confirmed refusals only), /unavailable (platform down), /not-found (missing, hidden, or not yours — all alike).

Signed-out notice readsRecorded ending
"You are signed out."own sign-out / main-site sign-out
"Your account was opened on another browser or device, so it is signed out here."a newer web sign-in
"Your password was changed, so you are signed out here."password change
"Your account was deleted, so you are signed out."account deleted
"Your sign-in reached the end of its time, so you are signed out."past its 12 h life
"You were away for a while, so you are signed out."idle past 2 h
"Your access changed, so you are signed out."restriction / standing / reversal / erasure begun
"You were signed out to keep your account safe."cookie-key change / operator command
"Someone else signed in on this browser after this page opened." (+ "Reload the page")page held by a different account

Each notice keeps its second sentence: "What is on this page stays until you leave it, but nothing more is saved until you sign in again." + "Sign in here" (or "Reload the page" for the someone-else variant). Nothing ever signs itself back in.

TC-SES-001Signed-out → /handoff → main site → back to the page wantedP1

Preconditions

A signed-out browser.

Steps

  1. Open https://app.sprinklejelly.com/skills signed out.
  2. Let the handoff run; sign in on the main site.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SES-002A failed handoff explains itself and offers Try again — never a loopP2

Preconditions

Stage a failed handoff (abandon the main-site step, or block it).

Steps

  1. Come back from the main site without a session (or let the handoff stall/fail).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SES-003🖥🖥 Newest sign-in ends the older, which is told whyP1

Preconditions

Two browsers (or normal + private window) — same account.

Steps

  1. Sign in on browser A; open a page.
  2. Sign in with the same account on browser B.
  3. On A, make any request (navigate or act).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SES-004🖥🖥 Someone-else variant offers Reload, not sign-inP2

Preconditions

One browser: page open as account A; sign out at the main site; sign in as account B in the same browser.

Steps

  1. Return to A's still-open page; make a request.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SES-005An open page learns on its next request — nothing polls for it; live channel tells within ~60sP2

Preconditions

End the session elsewhere while this tab sits idle.

Steps

  1. Leave a page open with live updates; end the session from another browser.
  2. Time how long until the tab is told; then try an action.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SES-006Device data clears at sign-out — appearance and the note's kept text exceptedP2

Preconditions

Device state present: Code Lab draft, a Scratchpad text, changed filters, dark mode.

Steps

  1. Sign out at the main site; sign back in on this browser.
  2. Check Code Lab, Scratchpad, filters, theme.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SES-007denied (no membership) is refused by the gate on /restrictedP1

Preconditions

The denied account: WordPress account, no membership.

Steps

  1. Sign in on the main site as denied; arrive at the app.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SES-008lapsed gets the privacy-only sign-in — erasure controls and nothing elseP1

Preconditions

The lapsed account: membership ended, and Labs let them in before.

Steps

  1. Sign in as lapsed.
  2. Read the page; try to open /, /skills, /inbox.
  3. Use the erasure controls (request → cancel within 7 days → read status).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SES-009/restricted tells only confirmed refusals — it never guessesP2

Preconditions

Open /restricted (a) signed in and admitted, (b) with a crafted ?reason=banned address while admitted.

Steps

  1. Open the address in both states; also /restricted?reason=erased&until=never.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SES-010/unavailable and /not-found are honest and privacy-safeP1

Preconditions

Probe both; a hidden/another-person's object for not-found.

Steps

  1. Open /unavailable; (if the platform genuinely degrades, observe the real one too).
  2. Open /not-found, a gibberish address, a hidden certificate's detail as another learner, a deleted object's address.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SES-01112 h life / 2 h idle: the ending reasons read right when reachedP3

Preconditions

Hard to stage live — review item; stage by leaving a session idle >2 h if the test window allows, else N/A.

Steps

  1. Leave a session idle past its allowance; return and act.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SES-012The readiness endpoint answers before any session existsP2

Preconditions

Any browser, signed out.

Steps

  1. Open https://app.sprinklejelly.com/api/v1/readiness.

Expected

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

20 · Offline, performance, responsive & accessibility PLT

TC-PLT-034Going offline tells the truth on every surface of this docP1

Preconditions

Dev tools → Network → Offline.

Steps

  1. Go offline on Home, Inbox, Skills, Settings, a certificate detail.
  2. Try actions; come back online.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-035Performance feel: ~3s first load, ~1s in-page reads, smooth long listsP3

Preconditions

Ordinary connection (or Fast 4G throttle).

Steps

  1. Cold-load Home, Skills, Inbox; time usable content.
  2. Trigger in-page reads (filters, Load more, period switch); scroll long lists.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-036Responsive sweep across 390 / 768 / 1280 / 1440 px, both themesP2

Preconditions

Device toolbar.

Steps

  1. At each width: Home, Skills, Settings (index behaviour), Inbox, a certificate detail, Topic Requests, the help panel.
  2. Repeat the worst page in the other theme.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-037Accessibility pass: keyboard, focus, live regions, screen readerP2

Preconditions

Keyboard; a screen reader if available (NVDA/VoiceOver).

Steps

  1. Keyboard-walk Home, Inbox, Settings, the verify page: tab order, focus rings, dialogs trap+return, F8 to toasts.
  2. Screen-reader the inbox and certificate verify: headings, labels, the aria-live answer, toast announcements.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PLT-038The product speaks as "Wizly Learning" — vocabulary sweepP1

Preconditions

Any page.

Steps

  1. Scan user-facing text across this doc's pages for banned words: "Labs", "attempt", "expired", "surface", "frame", "sample" (for a visible test case), internal state names, spec sentences.
  2. Check numbers and times.

Expected

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

21 · Platform-wide matrix — where to check each honesty rule

The universal rules from index §8, mapped to the cheapest place in this document's scope to see each one kept (or broken). Any of these failing is a finding wherever it happens — this table is a spot-check map, not the whole law.

RuleBest places to check it hereWatch for
Unavailable is not emptyHome regions (TC-HOM-009), Skills read (TC-SKL-008), Inbox (TC-NTF-013), verify failures (TC-CRT-015)"could not be read/asked" + retry — never an empty list or zero
Unknown is not zeroBell badge hollow mark (TC-NTF-002), unreadable achievement progress (TC-ACH-003), unreadable XP (TC-XPC-007)hollow mark / "could not be read" — never a fabricated 0
Nothing claims it saved when it didn'tSettings independent saves (TC-SET-003), Quick Notes states (TC-QN-003/004), certificate name save (TC-SET-015/016)"saved" only after confirm; "saved locally" only on device
Platform failures never look like your failureCertificate generation failed (TC-CRT-003), verify failure vs invalid (TC-CRT-015), handoff failure (TC-SES-002)"a problem on our side" wording — never blamed on you
Hidden material stays hiddenHidden cert verify = unknown (TC-CRT-013), other people's objects (TC-PRF-004), staff no inbox browse (TC-NTF-014), staff no note read (TC-QN-005)identical not-found/unknown — zero tell
Not-found is privacy-safe/admin/* as learner (TC-PLT-007), /credits (TC-PLT-030), /not-found probes (TC-SES-010)same plain page for missing/hidden/not-yours
Once means onceNotice per event (TC-NTF-010), achievement unlock (TC-ACH-002), duplicate certificate (TC-CRT-008), duplicate request (TC-TRQ-004), XP re-solve (TC-XPC-002)double-click, second tab, retry — never two
Pending is named, not faked"Being prepared" certificate (§6 states), "Not enough evidence" skills (TC-SKL-001), "Checking…" verify, request "Pending" (TC-TRQ-001)real state words, never provisional results
"Wizly Learning", Indian grouping, ISTWhole pages (TC-PLT-038), XP figures (TC-XPC-007), notice times (TC-NTF-006), "Checked <datetime>" on verifyno "Labs", 12,34,567 grouping, IST labels
Motion only where allowedReduced motion (TC-SET-011), auto-still (TC-PLT-017), modal-open still (TC-WZB-011), live testdecoration stills; functional feedback survives
Lite switch drops heavy effectsdata-lite sweep (TC-PLT-018), header veil (TC-PLT-009)no blur / loops / layout glides
Toast disciplineAll of §16top-right, ≤3, dedupe, Undo-defers, held in test
Session honestyAll of §19right reason words, page stays, nothing auto-signs-in
Credits absent while offAll of §18not-found + zero surfaces anywhere
Coming soon, honestlyAptitude (TC-PLT-012), runtimes (TC-PLT-013)"This page is coming soon." / "Coming soon" — never faked

Wizly Learning Testing Handbook · 03 · Learner — Account & Platform · generated from the product specification (docs/) and source of Sprinkle-Jelly-V1 · November 2026