04 · Admin — Content & Studios

The staff console's content side: console orientation, the publishing lifecycle, submissions review, every authoring studio and content-admin screen · Requires: Admin + Super Admin — many cases need BOTH roles; cases only a Super Admin can run carry a Super Admin chip · related: doc 05 for operations/people, doc 06 for journeys · app under test: https://app.sprinklejelly.com

Before you start

1 · The staff console — orientation & access

One persistent shell holds every staff page. Its navigation has seven spaces — Operations, Content, People, WizBit, Messages, Insights and System — always expanded; destinations appear only when the role permits them. The console header carries a compact health light (the Operations hub's own detail is doc 05's), the breadcrumb names real pages only, and a direct address gets the same access decision as its navigation link.

RouteScreenRole
/adminOperations hub — landing pageStaff
/admin/submissionsSubmissions queueStaff (deciding is Super Admin)
/admin/submissions/:submissionIdReview a submissionSuper Admin
/admin/reportsContent reportsStaff
/admin/settings/publishingPublishing — the Allow Admins to publish switchSuper Admin
/admin/vocabularySkills and topicsSuper Admin
/admin/provenance · /admin/provenance/:kind/:idContent sources · one source recordStaff (changing defaults: Super Admin)
/admin/import/:kind/:idImport into one itemStaff
/admin/content-gapsContent gapsStaff
/admin/aptitudeManage Aptitude — coming soonStaff
/admin/auditAudit history (detail in doc 05)Staff — Admin sees content-kind entries only

1.1 The shell and its spaces

TC-CON-001The console shows seven always-expanded spaces in orderP1

Preconditions

Signed in as Admin (tester-staff-1) on a computer-width viewport.

Steps

  1. Open /admin.
  2. Read the navigation and the header, then open the Content space.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-002The breadcrumb names real pages and folds on a phoneP3

Preconditions

Signed in as Admin; at least one challenge exists to open.

Steps

  1. Open /admin/challenges, then one challenge's studio.
  2. Read the breadcrumb. Resize to 390 px and read it again.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-003Phone console: bottom dock with a More spaceP3

Preconditions

Signed in as Admin; browser at ~390 px (or a phone).

Steps

  1. Open /admin.
  2. Look at the bottom of the screen; open More.

Expected

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

1.2 Who sees what

TC-CON-004A learner opening /admin sees the same not-found as any unknown addressP1

Preconditions

Signed in as a learner (tester-learner-1).

Steps

  1. Open /admin.
  2. Open /admin/submissions, then a nonsense address such as /admin/banana and /no-such-page.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-005An Admin opening a Super Admin page reads "Only a Super Admin can open this page."P1

Preconditions

Signed in as Admin.

Steps

  1. Open /admin/settings/publishing.
  2. Open /admin/vocabulary.
  3. Open a submission's review address /admin/submissions/<id> if one exists.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-006An Admin's navigation omits Super Admin destinationsP2

Preconditions

Two browsers or two sessions available: one Admin, one Super Admin. 🖥🖥

Steps

  1. As Admin, read the full console navigation.
  2. As Super Admin, read it again.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-007Direct address and unknown console addressesP2

Preconditions

Signed in as Super Admin.

Steps

  1. Type /admin/submissions into the address bar directly (not via nav).
  2. Type /admin/definitely-not-a-page.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-008Staff keep the learner view — and earn nothing by itP2

Preconditions

Signed in as Admin.

Steps

  1. From the account menu or address bar, open a learner page: /challenges, then a published challenge.
  2. Run and Submit a solution as the staff account.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-009One web session per person — the newer sign-in ends the olderP2

Preconditions

The same staff account signed in from two browsers. 🖥🖥

Steps

  1. Sign in as tester-staff-1 in browser A.
  2. Sign in as the same account in browser B.
  3. Return to browser A and navigate or act.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-010The health light shows one hub state and opens OperationsP2

Preconditions

Signed in as staff.

Steps

  1. Find the health light in the console header on /admin.
  2. Press it.
  3. Watch it over a couple of minutes with the tab visible, then hidden.

Expected

Also try

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-011Aptitude renders Coming soon inside the console shellP3

Preconditions

Signed in as staff.

Steps

  1. Open /admin/aptitude.

Expected

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

2 · The publishing lifecycle & submissions review

Every authored item in this document follows the shared lifecycle: draft → submitted → published → archived, with Daily adding scheduled and voided. "Return to Draft" is an action, not a state. The single global switch Allow Admins to publish (/admin/settings/publishing, Super Admin) decides what an Admin's studio offers: ON → Publish/Update directly; OFF → Submit for approval, and a Super Admin approves the exact submitted revision or sends it back with a reason. Publishing, approving, archiving and deleting are protected writes — each needs a main-site check no older than 15 minutes.

TransitionWho may do itNotes
draft → publishedSuper Admin, or Admin while the switch is ONThe item's check must pass first; only the checked revision goes live
draft → submittedAdmin while the switch is OFFOptional note for the reviewer, up to 500 characters
submitted → publishedSuper Admin — "Approve and publish" on the exact submitted revisionEditing the draft afterwards makes it Superseded
submitted → draftSuper Admin — "Send back…" with a reason (3–300 characters)The draft is preserved; the submitter reads the reason
published → publishedSame authority as first publishEdits show "changes not live" until republished; same checks
published → draftSuper Admin — Unpublish / Return to Draft, where the area supports itLearner records preserved; republish re-checks, never re-arms rewards
any → archivedSuper Admin — finalEarned learner records survive; not a Trash state
deletePer area: drafts any staff; live content Super Admin; only where safeNames the item; typed confirmation; refuses where learner work would be lost — offers Archive instead

2.1 The publishing switch Super Admin

TC-PUB-001The switch page shows one global on/off and changes it with confirmationP1

Preconditions

Signed in as Super Admin; note the current state first and tell the team you are changing it.

Steps

  1. Open /admin/settings/publishing.
  2. Read the current state, then flip Allow Admins to publish.
  3. Confirm — the main-site check must be fresh — then reload the page.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PUB-002A failed switch change leaves the persisted value untouchedP3

Preconditions

Signed in as Super Admin; dev tools open.

Steps

  1. Block the write request (devtools network blocking or offline).
  2. Try to flip the switch and confirm.
  3. Unblock and reload.

Expected

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

2.2 The switch decides the studio's action

TC-PUB-003Switch ON: an Admin publishes directly, no approvalP1

Preconditions

Switch ON. Signed in as Admin; a checked challenge draft ready ("QA-VK 15 Nov — publish me").

Steps

  1. In the challenge studio, press Check and publish.
  2. Confirm through the main-site check if asked.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PUB-004Switch OFF: an Admin submits for approval with an optional noteP1

Preconditions

Switch OFF. Signed in as Admin; a checked draft ready.

Steps

  1. Press Check and submit for approval.
  2. Where the studio offers a reviewer note (course builder, typing studio), write one up to 500 characters; submit.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PUB-005Switch flipped mid-session: a refused Publish becomes Submit for approvalP2

Preconditions

🖥🖥 Admin has a studio open; Super Admin in a second browser.

Steps

  1. With the switch ON, the Admin leaves a checked draft open.
  2. Super Admin turns the switch OFF.
  3. The Admin presses Check and publish.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PUB-006A published item edited afterwards is marked "changes not live"P2

Preconditions

Any published item you can edit (a draft copy of a challenge is safest).

Steps

  1. Publish the item; open it as a learner in a second tab.
  2. Edit its statement and let the save land.
  3. Look at the item's status in the studio and the staff list; refresh the learner tab.

Expected

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

2.3 The submissions queue

TC-PUB-007The queue orders Waiting oldest-first and Decided newest-firstP2

Preconditions

Switch OFF; at least two Admin submissions exist (create them if needed).

Steps

  1. Open /admin/submissions.
  2. Read the Waiting view; switch to Decided.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PUB-008An Admin reads the queue but decides nothingP1

Preconditions

Switch OFF; at least one waiting submission exists. Signed in as Admin.

Steps

  1. Open /admin/submissions.
  2. Open a waiting row.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PUB-009A Super Admin's review shows what was submitted, wholeP1

Preconditions

Switch OFF; a waiting submission exists. Signed in as Super Admin.

Steps

  1. Open /admin/submissions, then the waiting submission.
  2. Read the review pane.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PUB-010Approve and publish takes the exact submitted revision live — then the next waiting opensP1

Preconditions

Switch OFF; a waiting submission; Super Admin; note what the submitted revision contains.

Steps

  1. Open the submission's review.
  2. Approve and publish, confirming through the main-site check.
  3. Check the queue, the item's learner page, and the submitter's inbox (submit as Admin first if needed). 🖥🖥 helps.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PUB-011Send back requires a reason and returns the draftP1

Preconditions

Switch OFF; a waiting submission; Super Admin.

Steps

  1. Open the review and press Send back… with no reason.
  2. Type a reason under 3 or over 300 characters and try again.
  3. Send back with a proper reason (3–300 characters).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PUB-012A draft edited after submission is Superseded and cannot be approvedP1

Preconditions

🖥🖥 Switch OFF; Admin submits an item; Super Admin has the review open.

Steps

  1. Admin submits the item.
  2. Admin edits the same draft again and saves.
  3. Super Admin opens/reads the submission.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PUB-013Decisions are idempotent and auditedP2

Preconditions

A waiting submission; Super Admin.

Steps

  1. Open the review; double-click Approve and publish fast.
  2. Re-open the same submission's address and try to decide again.
  3. Check /admin/audit.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PUB-014A decision needs a fresh main-site check, and held input survives the tripP1

Preconditions

Super Admin whose last main-site check is over 15 minutes old (wait, or sign in elsewhere earlier); a waiting submission.

Steps

  1. Open the review and press Send back…; type a reason.
  2. Confirm — the button should read "Confirm on the main site".
  3. Take the trip and return.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PUB-015Course approvals opens the waiting view — the whole queue stays on SubmissionsP3

Preconditions

Signed in as staff.

Steps

  1. Open /admin/courses/approvals.
  2. Open /admin/submissions.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-PUB-016A course submitted with lessons is decided togetherP2

Preconditions

Switch OFF; Admin has a course with details and at least one lesson changed; Super Admin for the decision.

Steps

  1. Admin: submit the course's choice together from the one Publish dialog with a reviewer note.
  2. Super Admin: review from the builder ("Review {n} waiting…") — each item's check, changes, preview and source record.
  3. Approve together, then repeat with a send-back on another submission.

Expected

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

3 · Challenge studio — the shared practice studio

Challenges, Tracks, Daily Challenges and Debug Detective share one problem-authoring studio: a page whose sections sit beside it (Details → Statement → Languages & Code → Test cases → Hints → Editorials → the area's own part → Limits). It saves itself about two seconds after typing stops; "Check and publish" (Check and submit / Check and schedule where applicable) saves first, validates the saved revision, then acts — stopping at the first failure and never resuming by itself. The challenge studio is the fullest expression, so the shared behaviours are exercised here and re-checked once per other studio.

RouteScreenRole
/admin/challengesChallenges list — search, views, ordersStaff
/admin/challenges/:idChallenge studioStaff write · publish per switch · Unpublish/Archive/Delete: Super Admin or safe-draft staff
/admin/challenges/:id/editorialChallenge editorial studioStaff write · publish per switch
/admin/challenges-reviewChallenge review — solve rates & signalsStaff

3.1 The staff list

TC-STC-001The list searches, filters by view and orders — all kept in the addressP2

Preconditions

Signed in as staff; showcase challenges exist plus one archived (create+archive one if needed).

Steps

  1. Open /admin/challenges.
  2. Type a title search; switch views: All, Waiting for approval, Archived.
  3. Change the order: Saved, newest first vs Title, A to Z.

Expected

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

3.2 Saving honestly — autosave, states, limits, conflicts

TC-STC-002Create an incomplete draft and watch it save itselfP1

Preconditions

Signed in as Admin.

Steps

  1. From Challenges, create a draft titled "QA-VK 15 Nov — studio check".
  2. Fill only the title and part of the statement; stop typing.
  3. Watch the save bar; then leave and re-open the draft.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STC-003Save states never claim a save that did not happenP1

Preconditions

A draft open; dev tools for going offline.

Steps

  1. Go offline (devtools), type a change; wait.
  2. Try the bar's retry; come back online; wait again.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STC-004Text over a field's limit is typed but not saved — and blocks Check and publishP1

Preconditions

A draft open; a way to paste more than a field's limit.

Steps

  1. Paste over-limit text into a bounded field (e.g. a hint or the statement).
  2. Wait for the autosave; press Check and publish; try to leave the page.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STC-005A second author's save offers Keep mine / Load theirs — never a silent mergeP1

Preconditions

🖥🖥 The same draft open by Admin in browser A and Super Admin (or another staff account) in browser B.

Steps

  1. A edits the title and lets it save.
  2. B — whose page read the older version — edits the statement and waits for its save.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STC-006Removing a hint or test case acts at once with a six-second UndoP3

Preconditions

A draft with at least one hint and one test case.

Steps

  1. Remove a hint. Wait, watching the toast.
  2. Remove a test case; press Undo within six seconds.

Expected

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

3.3 Sections, cases and limits

TC-STC-007The check names every blocker at its field and validates the saved revisionP1

Preconditions

A draft missing several required parts (no reference solution, no hidden case, no classification).

Steps

  1. Press Check and publish.
  2. Fix the named problems; run it again.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STC-008Fill a hidden case's expected output from a reference solutionP2

Preconditions

A draft with a reference solution written and a hidden test case with input but no expected output.

Steps

  1. Use the fill-from-reference control on the hidden case.
  2. Review each offered value: Accept, Discard, or Accept all.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STC-009Output comparison: line endings, row order, numeric toleranceP2

Preconditions

A console challenge draft; where SQL showcase content exists, a SQL item too.

Steps

  1. Inspect the comparison settings on the console challenge.
  2. On a SQL item, inspect the row-order choice and the schema/datasets it asks for.
  3. Find where a numeric tolerance is declared.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STC-010Collection and document ceilings are stated, not silently trimmedP2

Preconditions

A draft you can bulk-edit; a way to generate large content.

Steps

  1. Try to add a 101st test case and an 11th hint.
  2. Try to save a whole document past its 12 MB cap (a challenge/Daily/Debug case/template caps at 12 MB; a lesson or paper at 4 MB).

Expected

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

3.4 Preview, editorial, publish

TC-STC-011Preview shows the learner presentation — and records nothingP1

Preconditions

A draft with hints and hidden test cases.

Steps

  1. Press Preview — it opens in a side sheet.
  2. Read it as a learner would; then check the item's learner-facing stats.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STC-012The editorial has its own studio and is checked like contentP2

Preconditions

A published challenge (or a draft meant for publish).

Steps

  1. Open the Editorial section / /admin/challenges/:id/editorial.
  2. Write an editorial per language; run the check.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STC-013Publishing moves the learner cache at onceP1

Preconditions

A fully checked draft; a learner signed in elsewhere (or a second browser). 🖥🖥 helps.

Steps

  1. Publish the challenge.
  2. Immediately refresh the learner's /challenges catalogue and open the item.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STC-014Duplicate copies authored material only, as a new draftP2

Preconditions

A challenge with hints, cases and an editorial — ideally one with learner solves.

Steps

  1. From the studio's More menu (or the row's menu in the list), Duplicate.
  2. Open the copy.

Expected

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

3.5 Lifecycle: Unpublish, Archive, Delete

TC-STC-015Unpublish returns the same item to draft, keeping learner recordsP1

Preconditions

Super Admin A published challenge with at least one learner solve (use a tagged QA challenge a learner solved if possible).

Steps

  1. Super Admin: Unpublish / Return to Draft from the studio.
  2. As a learner, look for it in the catalogue and in My Solutions.
  3. Republish it.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STC-016Archive is final, Super Admin only, and keeps earned recordsP2

Preconditions

Super Admin A tagged published challenge ready to retire.

Steps

  1. Archive it; look at the staff list's Archived view and the learner catalogue.
  2. As Admin, confirm no Archive control is offered.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STC-017Delete is offered only where learner history is safe — otherwise Archive is offeredP1

Preconditions

One never-touched tagged draft; one published challenge with learner work.

Steps

  1. Delete the untouched draft — it names the item and asks for the typed title.
  2. Try Delete on the one with learner work.

Expected

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

3.6 Challenge review

TC-STC-018Challenge review shows honest solve rates, worst firstP2

Preconditions

Signed in as staff; showcase challenges have learner activity.

Steps

  1. Open /admin/challenges-review.
  2. Sort lowest solve rate first; filter by review reason if offered.
  3. Compare a challenge's rate with what learners see on its page.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STC-019The studio's lit save button is the confirming button for protected writesP2

Preconditions

Super Admin with a stale main-site check (>15 min); a published tagged challenge.

Steps

  1. Try to Archive or Delete with the stale check.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STC-020Same form, independent collections — a track/daily/debug problem is not a shared bankP2

Preconditions

Create near-identical tagged exercises in Challenges and in a track (or note existing ones).

Steps

  1. Edit one meaningfully; save and publish.
  2. Check the other.

Expected

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

4 · Track studio

A track is a named, ordered set of its own single-language challenges. Its language is chosen at creation from the runtimes the grading service offers and becomes fixed once the track holds challenges. Track challenges are written in the same challenge studio, fixed to the track's language, each published on its own; the track itself has no code to check and goes live on its summary and description once it holds published problems.

RouteScreenRole
/admin/tracksTracks list — search, views, ordersStaff
/admin/tracks/:idTrack studio — details, challenges, orderStaff write · publish per switch · Unpublish/Archive/Delete: Super Admin

4.1 Language and challenges

TC-STT-001A track's language is chosen at creation and fixed once it holds challengesP1

Preconditions

Signed in as staff.

Steps

  1. Create a track "QA-VK 15 Nov — track", choosing Python.
  2. Add a challenge inside it; look for a language control afterwards.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STT-002A track challenge is the track's own — single language, placed last, independentP1

Preconditions

A tagged track exists.

Steps

  1. Create a challenge inside the track.
  2. Check its studio's language section and its place in the track's order.
  3. Duplicate it; delete the copy.

Expected

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

4.2 Order, publish and lifecycle

TC-STT-003Reordering is deliberate and goes live with the trackP2

Preconditions

A track with at least two challenges.

Steps

  1. Move a challenge up and down with the order controls.
  2. Publish the track; check the learner-facing order.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STT-004A track without published problems cannot start for learnersP2

Preconditions

A tagged track whose challenges are all drafts.

Steps

  1. Publish the track itself.
  2. Open it as a learner.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STT-005Unpublishing a Track blocks access through it without touching its childrenP2

Preconditions

Super Admin A published track with published challenges and learner progress (use a tagged one if staging).

Steps

  1. Super Admin: Unpublish the track.
  2. As a learner, try to open the track and one of its challenges through it.
  3. Republish.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STT-006Delete is offered only while nobody has worked the track — then ArchiveP2

Preconditions

Super Admin One untouched tagged track; one with learner work.

Steps

  1. Look for Delete on each.
  2. Delete the untouched one — confirm its children are named.

Expected

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

5 · Daily studio, schedule & review

Daily Challenges publishes one staff-selected challenge per product date — the product day runs 09:00 → 09:00 IST. The studio is the shared practice studio plus the Daily's own parts (date, 0–200 XP bonus). Scheduling a date is publishing: it obeys the Allow Admins to publish switch and the main-site check. Once a date's 09:00 passes, its grading fields lock; after that only Void Daily (Super Admin, reason, irreversible) can intervene, making the date neutral for everyone's streak while preserving solves, runs and hints.

RouteScreenRole
/admin/daily-challenges · ?item=Daily list + studio (open item is a state of the page)Staff write · schedule per switch · unschedule/void: Super Admin
/admin/daily-challenges/scheduleDaily schedule — six weeks from todayStaff
/admin/daily-challenges/schedule-healthSchedule health — next seven datesStaff
/admin/daily-challenges/reviewDaily review — last 120 datesStaff

5.1 Drafting and scheduling

TC-STD-001The list and the studio: shared sections plus date and bonusP1

Preconditions

Signed in as staff.

Steps

  1. Open /admin/daily-challenges; create "QA-VK 15 Nov — daily".
  2. Read its sections and the Daily-specific fields.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STD-002A checked draft schedules onto a free future date — one per dateP1

Preconditions

A checked tagged draft; a free future date (check the schedule).

Steps

  1. Press Check and schedule.
  2. Choose the free future date; confirm (main-site check).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STD-003A date conflict names the occupant and changes nothingP1

Preconditions

Two checked tagged drafts; a date already taken.

Steps

  1. Try to schedule the second draft onto the taken date.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STD-004Move or free an untouched future dateP2

Preconditions

Super Admin for freeing; a tagged Daily scheduled on a future date no learner has touched.

Steps

  1. Move it to another free future date.
  2. Then "Free the date" on it.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STD-005Scheduling counts as publishing under the switchP1

Preconditions

Switch OFF; Admin; a checked draft.

Steps

  1. As Admin, schedule the draft onto a free future date.
  2. Check /admin/submissions; then have the date's 09:00 pass before approval if stagable.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STD-006The schedule shows six weeks and offers only checked free draftsP2

Preconditions

Signed in as staff; a mix of checked and unchecked drafts.

Steps

  1. Open /admin/daily-challenges/schedule.
  2. Open the fill offer for a free date.

Expected

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

5.2 Begun dates: locks and void

TC-STD-007Once a date begins, its grading fields lockP1

Preconditions

A Daily whose product date has begun (today's, after 09:00 IST).

Steps

  1. Open it in the studio; try to edit the date, difficulty, bonus, classification, offered languages, test cases, reference solutions and comparison rule.
  2. Edit statement wording instead and save.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STD-008A date that began with no Daily stays neutral — no late first publishP2

Preconditions

A begun date with nothing scheduled (or a past empty date to inspect).

Steps

  1. Try to schedule a checked draft onto the begun date.
  2. Check the learner's calendar for that date.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STD-009Void Daily: Super Admin only, reasoned, irreversible — neutral but preservedP1

Preconditions

Super Admin A tagged Daily on a begun date — ideally with a learner solve already recorded.

Steps

  1. From the studio's More menu choose Void Daily.
  2. Confirm the date and give the reason learners will read; complete the main-site check.
  3. Check: the learner page for the date, a solver's record and streak, and try a new submission as a learner.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STD-010Learners read schedule changes at once through the cacheP2

Preconditions

🖥🖥 A learner's Daily page open; a tagged checked draft ready.

Steps

  1. Schedule the draft onto a free future date.
  2. On the learner side, open that date's future cell / past list where visible.

Expected

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

5.3 Schedule health and review

TC-STD-011Schedule health flags the next seven dates — and unknown is not scheduledP2

Preconditions

Signed in as staff.

Steps

  1. Open /admin/daily-challenges/schedule-health.
  2. Read each of the next seven dates.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STD-012Daily review lists 120 dates with honest figures and a scoped CSVP3

Preconditions

Signed in as staff; showcase Dailies have history.

Steps

  1. Open /admin/daily-challenges/review.
  2. Download the CSV and read its first line.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STD-013Delete and Archive on Daily keep the begun-date safeguardsP2

Preconditions

Super Admin A tagged draft Daily (untouched) and a begun/past Daily.

Steps

  1. Delete the untouched draft.
  2. On the begun one, look for Delete/Archive and weigh what is offered.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STD-014A submission received just before 09:00 still counts for its dateP2

Preconditions

🖥🖥 A learner able to submit near the boundary (or review records around a past 09:00).

Steps

  1. As a learner, submit a correct solution shortly before 09:00 IST on a Daily's date.
  2. Let grading finish after 09:00; check the date's standing and the streak.

Expected

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

6 · Debug studio — broken code, bugs & debriefs

Debug cases use the shared studio plus the case's own parts: The bug (1–10 planted bugs, 1–3 curated bug types, an optional "This is the bug" text) and a debrief per offered language (broken code, reference fix, validation). Publishing requires visibly different broken and fixed code, a broken starter that fails at least one test case, a fix that passes all, at least one visible and one hidden case, and a checked debrief for every offered language. Material changes to a live case (test cases, languages, limits, comparison, timed settings) must state their active-window impact first: affected windows end as platform-caused with allowances restored — an unavailable count blocks the action.

RouteScreenRole
/admin/debug-detectiveDebug cases listStaff
/admin/debug-detective/:idDebug studioStaff write · publish per switch · Unpublish/Archive/Delete: Super Admin
/admin/debug-detective-bug-typesBug typesStaff read · add/correct label: Super Admin · never deleted
/admin/debug-detective-reviewDebug review — fix ratesStaff

6.1 Authoring a case

TC-STG-001The bug part holds planted bugs, bug types and the optional cueP1

Preconditions

Signed in as staff; create a tagged draft case.

Steps

  1. Open "The bug" part of the studio.
  2. Set planted bugs and bug types; add a "This is the bug" text.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STG-002Every offered language needs broken code, a fix and a checked debriefP1

Preconditions

A tagged case draft offered in two languages; only one debrief written.

Steps

  1. Run the check.
  2. Complete the missing debrief; run it again.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STG-003Identical broken and fixed code refuses publish; so does a passing broken starterP1

Preconditions

A tagged case draft.

Steps

  1. Set the broken starter equal to the reference fix; run the check.
  2. Then make the broken starter pass every test case; run it again.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STG-004Case addresses are generated, normalised and uniqueP2

Preconditions

Two tagged case drafts.

Steps

  1. Title one normally and let its address generate.
  2. Give the second the same address by hand; try an invalid address too.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STG-005Timed mode settings: minutes and windows inside their boundsP2

Preconditions

A tagged case draft.

Steps

  1. Set the case to Timed then practice.
  2. Try durations outside 5–120 minutes and windows outside 1–10.

Expected

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

6.2 Live-case protection: active windows

TC-STG-006A material change to a live case asks first and shows the windows it endsP1

Preconditions

🖥🖥 A published tagged case; a learner with a timed window open on it (or stage one if possible).

Steps

  1. Change test cases (or offered languages, limits, comparison, minutes/windows) on the live case.
  2. Publish the change.
  3. Check the learner's window and allowance.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STG-007A cosmetic edit never touches live windowsP2

Preconditions

🖥🖥 A published case with a timed window open.

Steps

  1. Edit only statement/hint text on the live case and publish.
  2. Check the open window.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STG-008Unpublish applies the same active-window protectionP1

Preconditions

Super Admin A published case — ideally with an open timed window.

Steps

  1. Super Admin: Unpublish / Return to Draft the case.
  2. Read the impact shown; confirm; check the learner side.
  3. Republish afterwards.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STG-009Archive/Delete on a live case protects windows and keeps records readableP2

Preconditions

Super Admin A tagged live case to retire.

Steps

  1. Archive it (or Delete a safe one).
  2. Check learner records that referenced it.

Expected

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

6.3 Bug types and review

TC-STG-010Bug types: staff read them, Super Admin adds or relabels — nothing is deletedP1

Preconditions

Both roles available. 🖥🖥 helps.

Steps

  1. As Admin: open /admin/debug-detective-bug-types — read the list, look for an add/correct control.
  2. As Super Admin: add a bug type "QA-VK-test"; correct its label. Look for a delete.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STG-011Debug review keeps timed and practice apart, worst firstP2

Preconditions

Signed in as staff; published cases have learner activity.

Steps

  1. Open /admin/debug-detective-review.
  2. Read the columns; export the CSV if offered.

Expected

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

7 · Course builder — subjects, chapters & lessons

Written Lessons and Video Courses share one hierarchy — Subject → Chapter → Lesson — and one builder: the outline (chapters and lessons, each with where it stands) beside the open item (course details, a chapter or a lesson) with its checklist and panels. Details and lessons save themselves two seconds after typing stops; a live course holds structure moves under "Order changed" until "Apply for learners" makes them one recorded change. Lesson kinds: reading, video, quiz, assigned project, integration reference — a kind is fixed once the lesson is live; changing it names what is lost. A subject that was ever published is archived, never deleted.

RouteScreenRole
/admin/coursesWritten courses listStaff
/admin/video-coursesVideo courses listStaff
/admin/courses/approvalsCourses on Waiting for approvalStaff
/admin/courses/transferCourse import and exportStaff
/admin/courses/:content (+ /settings)Subject details / How it runsStaff write · publish per switch · archive/delete: SA or safe rules
/admin/courses/:content/chapters/:chChapter (title + delete; lessons live in the outline)Staff
/admin/courses/lessons/:l (+ /revisions)Lesson editor / earlier savesStaff
/admin/courses/:content/order-previewLearner orderStaff
/admin/courses/:content/publishCheck and publish — the one PublishPublish per switch
/admin/courses/:content/retirementArchive or delete a subjectSuper Admin (delete: never-published subjects)
/admin/courses/:content/reviewHow it's goingStaff

7.1 Lists and the outline

TC-SCB-001Courses and Video courses are two lists of the same shapeP2

Preconditions

Signed in as staff; showcase written subjects exist.

Steps

  1. Open /admin/courses and /admin/video-courses.
  2. Use search, views (All, the format's, Waiting for approval, Archived) and orders; press New on each.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SCB-002The builder is one page: outline beside the open itemP1

Preconditions

Signed in as staff; a showcase subject ("Python Fundamentals") to read.

Steps

  1. Open /admin/courses/:content for a subject.
  2. Open a chapter, then a lesson, from the outline.
  3. Check the older addresses resolve: /settings, /order-preview, /publish, /retirement, /review.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SCB-003Outline moves: drag, menus, Alt+↑↓ — held on a live courseP1

Preconditions

A tagged never-published course; a showcase live course.

Steps

  1. On the never-published course, move a lesson by dragging, by its menu, and with Alt+↑/↓.
  2. On the live course, move two lessons; read what the outline says before applying.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SCB-004Applying an order needs the publish right and a fresh main-site checkP1

Preconditions

A live course with held order moves; test both: Super Admin, and Admin with the switch OFF.

Steps

  1. As Admin (switch OFF): open the live course and try to apply.
  2. As Super Admin: Apply for learners; then check the learner-facing order and the change record.

Expected

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

7.2 Lessons: kinds, blocks, quiz, video

TC-SCB-005Lesson kinds and the block editorP1

Preconditions

A tagged draft course; create lessons.

Steps

  1. Create a reading lesson: add headings, text, a callout, a display-only code block, an image block and a runnable example.
  2. Create a quiz lesson and an assigned-project lesson; note the integration reference kind.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SCB-006Changing a lesson's kind names exactly what is lost — and only thenP2

Preconditions

A draft lesson with content; another empty draft lesson.

Steps

  1. Change the written lesson's kind; read the warning.
  2. Change the empty one's kind.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SCB-007Content bounds refuse honestly — nothing silently truncatedP2

Preconditions

A draft reading lesson.

Steps

  1. Paste a formatted-text section over 50,000 characters; a code block over 64 KiB; an outcome over 240 characters.
  2. Try a picture over its limit.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SCB-008Quiz authoring: four types, keys, marks, timer, shuffle, thresholdP2

Preconditions

A draft quiz lesson.

Steps

  1. Add questions of each type; set whole marks, an optional numerical tolerance, a timer, shuffle and a pass threshold.
  2. Add review-lesson links; remove a question's options and a prerequisite with Undo.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SCB-009A video lesson cannot publish unready or required without captions/transcriptP2

Preconditions

A video-subject draft; a video upload to stage (or an existing Processing/Failed one).

Steps

  1. Watch the upload's state; try to publish the lesson while the video is Processing/Failed or while a required video lacks captions/transcript.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SCB-010Publish checks: blockers named, all-or-nothingP1

Preconditions

A tagged draft course missing pieces (e.g. a chapter holding lessons none of which is going live).

Steps

  1. Open the one Publish (/publish).
  2. Read the blockers; fix them; publish.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SCB-011The one Publish dialog: changed items ticked, nothing fake offeredP2

Preconditions

A live course; edit two lessons and the details; leave a third untouched.

Steps

  1. Open Publish.
  2. Read what it offers; untick one and publish; then reopen.

Expected

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

7.3 Saving, revisions, preview and settings

TC-SCB-012Saved locally means this browser only — and is offered back honestlyP1

Preconditions

A draft lesson open; dev tools for going offline.

Steps

  1. Go offline; edit the lesson; wait for the autosave.
  2. Leave and reopen the item at the same version.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SCB-013Revisions are bounded author undo, named by the save that replaced themP2

Preconditions

A lesson with several saved edits.

Steps

  1. Open the lesson's /revisions.
  2. Read an entry's name; Put this back on one.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SCB-014Preview and order-preview record no learningP2

Preconditions

A course with required/optional lessons and sequential navigation.

Steps

  1. Open the lesson preview and the learner order (/order-preview).
  2. Check for created progress.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SCB-015A shared draft link reads for a day, can be revoked, and says so afterwardsP3

Preconditions

A draft lesson; a second signed-in account for the recipient view. 🖥🖥

Steps

  1. From the lesson editor, make the read-only preview link; open it as the other person (/course-previews/:previewId).
  2. Revoke it; open the link again.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SCB-016Subject settings: navigation, prerequisites, classification, certificate switchP2

Preconditions

A tagged video course and a written one.

Steps

  1. Open /settings: set navigation, prerequisites, classification and tags.
  2. On the video subject find the certificate switch; on the written one confirm its absence.

Expected

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

7.4 Retirement, transfer, review

TC-SCB-017Retirement shows consequences first: archive keeps, delete is for never-publishedP1

Preconditions

Super Admin A showcase (or tagged) published subject with enrolled learners; a tagged never-published subject.

Steps

  1. Open /retirement on each and read the consequence preview.
  2. Archive the published one; delete the never-published one (typed title).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SCB-018Import/export is whole-file, all-or-nothing, and never publishesP2

Preconditions

Signed in as staff; a subject to export; a deliberately broken file to import.

Steps

  1. Export a subject from its page.
  2. Import it back at /admin/courses/transfer; then import a corrupted/edited file and an oversized one (>10 MiB or >500 lessons).

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SCB-019How it's going: reach and completion, named as of when — never zerosP3

Preconditions

A showcase subject with learner activity.

Steps

  1. Open /admin/courses/:content/review.
  2. Read the per-lesson figures.

Expected

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

8 · Typing studio — texts, templates, lessons & the Daily pool

/admin/typing-quest holds every text in one in-page editor: English passages (with their level), code snippets (with their language), templates (language + target time) and lessons (order + steps). The body is a plain monospace field — the code editor would fight writing a text exactly as learners type it — with the checks listed under it as they run. Publish/Submit saves what is unsaved first, then acts on the saved revision through the content engine and the main-site check. Return to Draft and Archive are a Super Admin's; Delete is not offered.

RouteScreenRole
/admin/typing-quest · ?text= · ?dailyManage Typing Quest — list, editor, Typing DailyStaff write · publish per switch · Return to Draft/Archive: Super Admin

8.1 The list and the editor

TC-STY-001The list filters by kind, level, language and stateP2

Preconditions

Signed in as staff; showcase texts exist.

Steps

  1. Open /admin/typing-quest.
  2. Filter by kind (English, Code, Template, Lesson), then level, language and state.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STY-002The checks run under the body as it is typed — a problem text cannot publishP1

Preconditions

A new text draft open.

Steps

  1. Paste a body with a curly quote (é, —), a tab, a trailing space and an unbalanced bracket in a code text.
  2. Read the check list; fix them; watch the list clear.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STY-003Each kind carries its own fields; converting keeps only what the new kind needsP2

Preconditions

A draft text.

Steps

  1. Set it to English — read the level field; to code — the language; to template — language + target time; to lesson — order + steps.
  2. Convert a filled English draft to code and back.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STY-004Publish and Submit save first, then act on the saved revisionP1

Preconditions

A valid tagged text; try under the current switch state and note which path ran.

Steps

  1. Type a last change; without waiting, press Publish (or Submit for approval with the switch OFF).
  2. Complete the main-site check.

Expected

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

8.2 Templates and lessons

TC-STY-005Templates: learnable length, balance, and a target time to publishP2

Preconditions

A draft template.

Steps

  1. Write a template outside 80–2,000 characters or over 60 lines/100-per-line; leave the target time empty; try to publish.
  2. Fix and publish.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STY-006Lessons: step bounds and a unique place in the orderP2

Preconditions

A draft lesson; a published lesson already holding order place 1.

Steps

  1. Give the draft the same place; run the check.
  2. Break a step's bounds (<10 or >400 chars, >8 lines, tabs, new keys with spaces).

Expected

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

8.3 The Typing Daily and copying our content

TC-STY-007The Daily pool switch applies at once to poolable kinds onlyP2

Preconditions

A published simple/complex English passage or code snippet; a common-words list and a level-check passage.

Steps

  1. Toggle "In the Typing Daily pool" on the poolable text.
  2. Look for the switch on the other two kinds.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STY-008The Typing Daily tab replaces future slots only — begun dates are lockedP2

Preconditions

Signed in as staff; texts in the pool.

Steps

  1. Open the studio's Typing Daily (?daily).
  2. Replace a future date's English slot; confirm; try a begun date.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-STY-009Add from our content copies lesson examples and challenge starters — never secretsP1

Preconditions

Published showcase content: a reading lesson with a code example, a challenge with a hand-written starter.

Steps

  1. Press "Add from our content" beside New text.
  2. Pick a language; search; inspect what is offered; copy one into a new draft.

Expected

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

9 · Paper studio — Mock & Company assessments

One studio serves Mock and Company papers: Mock Tests (/admin/mock-tests) and Company Tests (/admin/company-tests) are two card lists; a paper's parts keep their own addresses inside the studio — Details & Sections → Questions → Import → Checklist → Live paper → Settings → Extra time → Tests → Figures. Parts save by themselves against the revision they were opened from; a conflict offers keep-mine/load-theirs and never merges. Publishing freezes a copy for tests to begin on; a live paper is corrected in place — there is no Unpublish. Questions' kinds are fixed once written; a saved update reaches only future starts.

RouteScreenRole
/admin/mock-tests · /admin/company-testsPaper card lists / company cardsStaff (new company: Super Admin)
/admin/company-tests/:companyOne company: details, roles, papersStaff read · changes: Super Admin
/admin/papersRedirect to the right listStaff
/admin/papers/:paper (+ /questions, /import, /checklist, /published, /settings, /accommodations, /tests, /analytics)The paper studio's partsStaff write · publish per switch · settings/Extra time/invalidation/archive: Super Admin
/admin/tests/:test/recorded-eventsRecorded events of one testStaff
/admin/tests/:test/invalidateInvalidate a resultSuper Admin
/admin/companies/:company/analyticsCompany figuresStaff

9.1 Lists, companies and a paper's shape

TC-SPA-001The two card lists count their views and keep state in the addressP2

Preconditions

Signed in as staff; showcase papers exist.

Steps

  1. Open /admin/mock-tests and /admin/company-tests.
  2. Open /admin/papers; use the status views, search and orders.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-002A new Mock paper starts with Standard strictness and needs category + difficultyP1

Preconditions

Signed in as staff.

Steps

  1. Create a Mock paper "QA-VK 15 Nov — paper".
  2. Read its defaults: strictness, review settings, duration, passing percentage, grace.
  3. Try to publish without category/difficulty.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-003A company holds its details, roles and papers — changes are Super Admin'sP1

Preconditions

Both roles. 🖥🖥 helps.

Steps

  1. As Admin, open /admin/company-tests/:company (e.g. Northvale Systems) — read details, roles, papers.
  2. As Super Admin, change a company detail or role (main-site check), then look for Delete/Deactivate.
  3. Try a javascript: address as the company's website.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-004Sections carry briefing, suggested duration and run allowanceP2

Preconditions

A tagged draft paper.

Steps

  1. Add, name, order and remove sections; give one a suggested duration and a visible-case run allowance; exclude one from the paper.

Expected

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

9.2 Questions and import

TC-SPA-005Five question kinds — kind fixed once written, penalty never above marksP1

Preconditions

A tagged draft paper with a section.

Steps

  1. Add a question of each kind: single-choice, multiple-choice, numerical, true/false, coding.
  2. Give one a penalty above its marks; try to change a written question's kind.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-006A coding question reuses the practice machinery — references checked on the grading serviceP1

Preconditions

A draft paper; a coding question part-written (reference missing or failing).

Steps

  1. Finish the coding question: languages, starter, reference, visible + hidden cases, limits.
  2. Run the checklist.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-007The paper saves as one document — conflicts never mergeP1

Preconditions

🖥🖥 The same paper open by two staff members.

Steps

  1. A edits details and lets the part save.
  2. B, on the older revision, edits questions and waits for its save.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-008Question import validates every row and adds all or noneP1

Preconditions

A draft paper; the CSV template downloaded; a batch with deliberate bad rows.

Steps

  1. Open /admin/papers/:paper/import; get the template.
  2. Paste rows: one with a bad kind, one a coding row, one naming a new section, one valid; Check.
  3. Fix and import; then try a batch over 200 questions.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-009The shared import address leads to the paper's own importer — and nowhere elseP2

Preconditions

Signed in as staff.

Steps

  1. From the paper studio, follow "Import questions".
  2. Open /admin/import/assessment-paper/:paper directly; then /admin/import/<some-other-kind>/:id.

Expected

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

9.3 Checklist, publish, the live paper

TC-SPA-010The checklist reports every failure together, each pointing at its viewP1

Preconditions

A draft paper with several problems (no included section, no questions, missing key).

Steps

  1. Open /checklist.
  2. Fix the named failures; re-check.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-011Publishing freezes a copy — ongoing and completed tests keep what they began withP1

Preconditions

🖥🖥 helps. A published paper with a test in progress or completed; edits staged.

Steps

  1. Edit a question and a setting; publish through the main-site check.
  2. Compare a test taken before with a new one started after.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-012The Live paper view draws the frozen copy as learners read itP2

Preconditions

A published paper.

Steps

  1. Open /admin/papers/:paper/published.
  2. Read its questions, options and keys.

Expected

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

9.4 Settings, notices and relief grants

TC-SPA-013Live settings changes reach learners only when a Super Admin publishes themP1

Preconditions

Super Admin A published paper whose settings are changed.

Steps

  1. As Admin, change a live paper's setting and submit (switch OFF) — or try to publish it (switch ON means direct publish is for content; live timing/scoring settings stay SA's — note which).
  2. As Super Admin, publish the settings change: read each old → new value, the optional notice and its recipient count; confirm.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-014A relief grant rides only with a notice — one more test for already-finished learnersP2

Preconditions

Super Admin A live paper with finalized learner results; a settings change ready to publish.

Steps

  1. Publish with the notice on and the relief grant chosen.
  2. Check who was told and who got the grant; try to grant without the notice.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-015Downgrade to Pattern relabels a live Actual paper everywhere — never the reverseP2

Preconditions

Super Admin A Company paper whose live copy is Actual (or stage one).

Steps

  1. Super Admin: More → Downgrade to Pattern, give a reason, main-site check.
  2. Read the draft, the live copy, a frozen copy's result and the audit trail.
  3. Look for a way to make a Pattern paper Actual.

Expected

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

9.5 Extra time, tests and invalidation

TC-SPA-016Extra time: staff read the list; only a Super Admin gives or removes itP1

Preconditions

Both roles; a learner who has signed in (tester-learner-1); a published paper.

Steps

  1. As Admin, open /admin/papers/:paper/accommodations.
  2. As Super Admin, find the learner by name and give 1.5×; then remove it.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-017The tests list shows standing, never a score — and bulk-invalidate is Super Admin'sP1

Preconditions

Super Admin A paper with learner tests (showcase papers have some).

Steps

  1. Open /admin/papers/:paper/tests.
  2. As Super Admin, choose two ended tests and invalidate together — one reason, one note, one main-site check.
  3. As Admin, read the same list.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-018Recorded events show the ordered timeline — Off says nothing was recordedP2

Preconditions

A paper with tests at different strictness levels (Off included if possible).

Steps

  1. Open /admin/tests/:test/recorded-events for a Standard/Strict test, then an Off one.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-019Single invalidation: reason + note + check — learner reads the reason's sentenceP1

Preconditions

Super Admin An ended learner test (ideally a relief-grant test and a replaced result somewhere to observe consequences).

Steps

  1. Open /admin/tests/:test/invalidate; choose a reason, write a note, confirm through the main-site check.
  2. Check the learner's history, XP and Skills; try invalidating again.

Expected

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

9.6 Archive, duplicate, figures

TC-SPA-020Archive is final and says how many relief grants it endsP1

Preconditions

Super Admin A tagged live paper — ideally one holding unused relief grants.

Steps

  1. Archive the paper; read the confirmation first.
  2. Check the catalogue, a running test, and a grant holder's paper page.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-021Delete keeps frozen copies; Duplicate to… copies a Company paper across companiesP2

Preconditions

Super Admin A tagged paper with tests taken; a Company paper.

Steps

  1. Delete the paper — read what the confirm says.
  2. On a Company paper, More → Duplicate to… another active company; try it on a Mock paper.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SPA-022Paper figures and company figures: learner-only, dated, pass rate for Mock onlyP3

Preconditions

Papers and a company with learner tests.

Steps

  1. Open /admin/papers/:paper/analytics on a Mock and a Company paper.
  2. Open /admin/companies/:company/analytics; read the question review prompts.

Expected

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

10 · Workspace templates

Templates are staff-authored starting projects — a name, description and technology; a topic (whose skill is the primary); a language from the project's runtime list; text/code files with a start file; and an optional ordered checklist of up to 12 tasks. A template saves whole against its read revision (≤12 MiB with files); the check runs on the worker — a terminal starter must exit 0 or still be running (waiting for input), a web starter must contain every file its start page names, a SQL starter's statements are run on a fresh database, a Flask app's files and compiles are proven without running it. Only a revision that passed goes live; Return to Draft and Archive are a Super Admin's.

RouteScreenRole
/admin/workspace/templatesTemplate cards — views, search, orderStaff
/admin/workspace/templates/:templateIdThe template studio — Details, Files, Checklist, checkStaff write · publish per switch · Return to Draft/Archive: Super Admin · Delete: staff on never-published, SA otherwise

10.1 The list and the studio

TC-SWT-001The card list shows views, counts and projects-made — never whoP2

Preconditions

Signed in as staff; the showcase template set exists.

Steps

  1. Open /admin/workspace/templates.
  2. Use the status views, search and orders; load more.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SWT-002A template drafts whole — over-limit text stays typed and unsavedP1

Preconditions

Signed in as staff.

Steps

  1. Create "QA-VK 15 Nov — template": name, description, technology, topic, language, two files, a start file, three checklist tasks.
  2. Paste over-limit text into a bounded field and try to save.

Expected

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

10.2 Check, publish and lifecycle

TC-SWT-003The check runs on the worker like a learner's project — per starter kindP1

Preconditions

Drafts of a terminal starter (e.g. Python) and a web starter; a deliberately broken one.

Steps

  1. Run the check on the good starter and on the broken one.
  2. Read the failure output.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SWT-004Only a passed revision goes live — under the same switchP1

Preconditions

A checked tagged template; try under the current switch state.

Steps

  1. Publish as the role you're on; where the switch is OFF and you are Admin, submit instead.
  2. Check the learner's New project picker.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SWT-005Return to Draft, Archive and Delete protect existing learner projectsP1

Preconditions

Super Admin A published template learners have created projects from (a showcase one); a never-published tagged draft.

Steps

  1. Read the projects-made count on the published one, then Return to Draft it — or Archive it.
  2. Delete the never-published draft; try Delete on a published template as Admin.
  3. Check a project made earlier still opens.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SWT-006Duplicate makes "Copy of" with draft files and checklist onlyP2

Preconditions

A template — published or draft.

Steps

  1. Duplicate it from the More menu; open the copy.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SWT-007The studio never opens a learner's project — there is no inspection pathP2

Preconditions

A learner project exists (a tagged template instantiated by tester-learner-1).

Steps

  1. As either staff role, hunt for any way to open that project's files — the template's page, the learner's support view, any link.

Expected

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

11 · Vocabulary — skills & topics

The content engine owns the shared classification — skills and their topics — and Administration hosts its page at /admin/vocabulary, a Super Admin's page: the skills stand beside the chosen one's topics (?skill=) with the lifetime allowance as a meter. Every write (add a skill, add a topic, correct a label, archive a topic) goes through the main-site check at confirm and is audited; a label correction preserves identity — a meaning change needs a different classification, never a misleading rename. Bug types are the debug list's own page (§6.3).

RouteScreenRole
/admin/vocabulary · ?skill=Skills and topicsSuper Admin

11.1 The page and its roles

TC-VOC-001The page stands the skills beside one skill's topics with the allowance meterP2

Preconditions

Super Admin Signed in.

Steps

  1. Open /admin/vocabulary; choose a skill (?skill=).
  2. Read the allowance meter.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-VOC-002An Admin cannot open the vocabulary page at allP1

Preconditions

Signed in as Admin.

Steps

  1. Open /admin/vocabulary directly.
  2. Look for the destination in the Content space.

Expected

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

11.2 Adding, correcting and archiving

TC-VOC-003Adding a skill or topic: bounds, case-insensitive uniqueness, main-site checkP1

Preconditions

Super Admin

Steps

  1. Add a skill "QA-VK Skill" and a topic "QA-VK Topic" under it.
  2. Try a 1-character and a 61-character label; try "qa-vk skill" again; go stale on the check once.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-VOC-004A label correction preserves identity and history — and records old/new + reasonP1

Preconditions

Super Admin The "QA-VK Topic" from the previous case, attached to a tagged item if possible.

Steps

  1. Correct the label to "QA-VK Topic renamed" with a reason (3–300 characters).
  2. Check the item still carries it, the audit entry, and a historical record that showed the old label.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-VOC-005Archiving a topic reads what carries it first — and is never undoneP1

Preconditions

Super Admin A topic attached to tagged items across a couple of areas (tag a challenge and a course first).

Steps

  1. Archive the topic from its row.
  2. Read the affected-content dialog; confirm with a reason through the main-site check.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-VOC-006The vocabulary feeds every studio picker as one shared readP2

Preconditions

Super Admin Just added/renamed a topic.

Steps

  1. Open a challenge studio's topic picker and a course's classification.
  2. Confirm the new label reads the same in both at once.

Expected

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

12 · Content sources & the import address

Each area keeps source defaults — author, owner, source, permission to use, permitted uses, cited-as-of date, company-name/logo basis, third-party/generated contributions — and each item can carry its own values. /admin/provenance lists the items whose own values differ from their area's defaults (newest first, twenty a page), with each area's defaults folded behind its name. Every publication keeps the record in force with that revision; a Super Admin changes defaults in place through the main-site check, and a provenance downgrade is audited. /admin/import/:kind/:id opens the owning area's importer for one item — today that is only the assessment paper's.

RouteScreenRole
/admin/provenanceContent sourcesStaff read · changing defaults: Super Admin
/admin/provenance/:kind/:idOne item's source recordStaff write own values
/admin/import/:kind/:idImport into one itemStaff

12.1 The sources list and a record

TC-SRC-001The sources list leads with the items that differ from their defaultsP2

Preconditions

Signed in as staff.

Steps

  1. Open /admin/provenance.
  2. Open an item; unfold an area's defaults.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SRC-002Changing an area's defaults is a Super Admin's audited, checked writeP1

Preconditions

Super Admin

Steps

  1. Unfold an area's defaults; change one in place (main-site check).
  2. As Admin, confirm the same change is not offered.
  3. Check the audit entry.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SRC-003A source record marks each field's origin and keeps its historyP2

Preconditions

An item with its own values (or a submission review linking to one).

Steps

  1. Open /admin/provenance/:kind/:id.
  2. Edit one own value from the bar at the foot; read the history.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SRC-004A later default change never rewrites what a publication stood onP2

Preconditions

Super Admin An item published under today's defaults.

Steps

  1. Publish the item; change its area's defaults.
  2. Re-open its source record's history.

Expected

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

12.2 Publication requirements and the import address

TC-SRC-005A Company paper's dated source and permission are publication requirementsP2

Preconditions

A Company paper draft labelled Actual without source/permission.

Steps

  1. Try to publish it as Actual.
  2. Change to Pattern and publish.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-SRC-006The import address is contextual — papers import, everything else is told soP3

Preconditions

Signed in as staff.

Steps

  1. Open /admin/import/assessment-paper/<a paper id>.
  2. Open /admin/import/<any other kind>/<id>.

Expected

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

13 · Content reports

Learners report existing content (a lesson, a challenge — a track challenge reports its track — a track, a Debug case) as Spam, Incorrect, Inappropriate or Other, with a note up to 500 characters that Other requires. /admin/reports is one queue both staff roles work: one row per reported item, items with an open report first, the longest waiting first; each row carries its reasons and how many of each, how many reports, the oldest and its most pressing state. Staff never see who reported. States: Open → Investigating → Resolved / Dismissed; reopen only with a reason.

RouteScreenRole
/admin/reportsContent reports — the queueStaff

13.1 The queue and its moves

TC-CRP-001The queue's rows, filters and counts are realP1

Preconditions

Reports exist on a few items (file some as learners first if the queue is empty).

Steps

  1. Open /admin/reports.
  2. Filter by area and by state; compare counts to rows; page through.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRP-002An item's panel shows every report, its history and the way to its editorP2

Preconditions

An item with several reports (one with a renamed title if possible).

Steps

  1. Open the item beside the queue at its own address.
  2. Read each report's note, state and moves.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRP-003Moves: Open↔Investigating, resolve with an outcome, dismiss with a reasonP1

Preconditions

An open report.

Steps

  1. Mark it Investigating, then back to Open.
  2. Resolve it — try each outcome (Corrected / No action / Escalated / Duplicate) with and without the optional note.
  3. Dismiss another without a reason, then with one.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRP-004A closed report reopens only with a reason — then a new outcome is allowedP2

Preconditions

A resolved and a dismissed report.

Steps

  1. Try to resolve a resolved report again — then reopen it without a reason, then with one.
  2. Give it a different outcome.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRP-005Bulk moves apply per report — the page says how many moved and why notP2

Preconditions

Several items selected.

Steps

  1. Choose several items; mark investigating / resolve / dismiss together.
  2. Read the result message.

Expected

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

13.2 Removal, filing and history

TC-CRP-006Removed or unreachable content keeps its reports — and says soP2

Preconditions

A report exists on a tagged item; then archive/delete that item (or use one learners can no longer open).

Steps

  1. Remove the content learners-side.
  2. Re-open the report row.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRP-007Filing a report as a learner: reasons, Other's required note, no repeatsP1

Preconditions

A learner account; a published challenge and a lesson.

Steps

  1. As the learner, "Report a problem" on a challenge and a lesson — each reason, Other with and without a note (≤500).
  2. Report the same item again while the first is open; look for Report on a Daily and during a live test.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CRP-008Report work leaves no audit entries — each report's own history carries its movesP3

Preconditions

Just moved some reports.

Steps

  1. Open /admin/audit and look for the report moves.
  2. Re-open a report and read its own history.

Expected

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

14 · Content gaps

/admin/content-gaps (under Insights) shows demand in two separate panels: "Asked for" — the topic requests learners filed — beside "Searched for and not found" — WizBit's recurring safe product-help search misses. The two are never summed into one figure; neither panel exposes requester identity or raw queries; one unavailable source does not blank the other, and search outages are not counted as demand.

RouteScreenRole
/admin/content-gapsContent gapsStaff
TC-CGP-001Two separate panels — never one summed figureP2

Preconditions

Signed in as staff; topic requests exist (file one as a learner if needed).

Steps

  1. Open /admin/content-gaps.
  2. Read both panels.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CGP-002One source failing does not blank the other panelP2

Preconditions

Dev tools to block one panel's read.

Steps

  1. Block the requests/WizBit search-miss read in dev tools; reload.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CGP-003Content gaps lives under Insights, not ContentP3

Preconditions

Signed in as staff.

Steps

  1. Find Content gaps in the console navigation.

Expected

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

15 · Cross-cutting staff checks

These hold across every screen in this document — run them wherever a case lands, and once deliberately here. They are the staff-side half of the handbook's universal rules (index §8).

TC-CON-012The stale main-site check turns every protected write into "Confirm on the main site"P1

Preconditions

A session whose check is over 15 minutes old (idle past it, or re-verify only at sign-in).

Steps

  1. Try each protected write with the stale check: publish, archive, delete, a submission decision, a vocabulary add, a company change, an invalidation.
  2. Type a reason/note first, then take the trip and return.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-013Protected writes are idempotent — once means onceP1

Preconditions

Any protected action ready to confirm.

Steps

  1. Double-click the confirming button; retry the request from a duplicated tab; re-open the address and repeat.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-014Two-author conflicts resolve as Keep mine / Load theirs everywhereP2

Preconditions

🖥🖥 Two staff sessions; the same item open in several studios across the day (practice studio, paper, template, lesson, company details).

Steps

  1. In each, let one author save, then have the other save over the stale read.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-015The audit trail shows an Admin content-kind entries onlyP1

Preconditions

Both roles; some writes from today's session exist (publishes, vocabulary changes, an invalidation, an accommodation). 🖥🖥 helps.

Steps

  1. As Admin, open /admin/audit; filter by action, who, item and day.
  2. As Super Admin, read the same trail; open an action-on-people entry (e.g. an invalidation) and then try it as Admin.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-016Unavailable is never zero or empty on staff pagesP1

Preconditions

Dev tools to fail selected reads.

Steps

  1. Block one read at a time on: a staff list's counts, a review page's figures, schedule health, the submissions queue, content reports.
  2. Reload and read each failed panel beside the working ones.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-017Over-limit input is held and named — never silently cutP2

Preconditions

Any bounded field in any studio.

Steps

  1. Paste text past a field's limit; paste a CSV row past a bound; drop an oversized file on an upload.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-018Staff pages read as Wizly Learning — no spec sentences, raw errors or leaked internalsP3

Preconditions

Any session.

Steps

  1. Walk today's screens reading the words: headings, empty states, refusals, confirm dialogs.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-019Console and studios stay usable at phone and tablet widthsP3

Preconditions

Browser at 390 and 768 px.

Steps

  1. Walk the queue, a practice studio, the paper studio's index, the course builder's outline and the reports queue at both widths.

Expected

Result: ☐ Pass  ☐ Fail  ☐ N/A   ·  Notes: ____________________
TC-CON-020Keyboard and focus on staff screensP3

Preconditions

Unplug the mouse for a pass.

Steps

  1. Tab through the console nav, a staff list's filters, a studio's sections and a confirm dialog.

Expected

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

Wizly Learning Testing Handbook · generated from the product specification (docs/) and source of Sprinkle-Jelly-V1 · November 2026