QuizWizz UX Atlas execution ledger

Historical record β€” 2026-07-28

Preserved as observed. Current truth: Program Masterplan.

This ledger now has two layers: the 2026-07-28 capture remains the visual baseline, while the 2026-07-29 reconciliation below records the implemented source and runtime evidence. A remap names the required destination and state; implementation evidence does not imply that a replacement screenshot was captured unless the reconciliation explicitly says browser-verified. reproduce-as-is retains the integration/surface while addressing its listed findings.

Evidence basis and disposition vocabulary

  • Source atlas: QuizWizz Admin UI Atlas, captured at 1600 Γ— 1000, scale 1, cache disabled, with animations suppressed. Image dimensions below may be crops or tall full-page captures; the viewport remains 1600 Γ— 1000 unless the atlas says otherwise.
  • reproduce-as-is: retain the named destination at the displayed URL and reproduce its relevant state for comparison.
  • remap: replace the legacy surface with the exact target URL, fragment, and stated control state below.
  • retired-by-design: remove the legacy surface; the target is the required redirect or replacement evidence location.
  • Target navigation is exactly Dashboard, Quizzes, Questions, Subjects, Settings. Legacy qw-get-started GET navigation targets admin.php?page=qw-dashboard#help; legacy qw-import GET navigation targets admin.php?page=qw-settings#advanced-portability. Settings legacy fragments map to #general, #builder, #player, #appearance, #pdf-print, #ai, and #advanced as specified in the approved plan.
  • β€œRole/capability” reports the capture gate first and, where it differs, the planned target gate in parentheses. It is not evidence of a future role grant.

Surface ledger

#Named surfaceCapture URL Β· role/capabilityViewport / selected or expanded stateSource image / captionDisposition and exact evidence targetFindings
01QuizWizz menuadmin.php?page=qw-dashboard Β· edit_qw_quizzes1600Γ—1000; stored navigationmenu-quizwizz.png β€” top-level menu and all QuizWizz submenusremap β†’ admin.php?page=qw-dashboard; native Qwizz submenu is exactly Dashboard, Quizzes, Questions, Subjects, Settings, Dashboard selectedU-12, U-13
02Dashboardadmin.php?page=qw-dashboard Β· edit_qw_quizzes1600Γ—1000; stored dashboard; details openeddashboard-full.png β€” status cards, quick links and Tools & statusreproduce-as-is β†’ admin.php?page=qw-dashboard; Dashboard selected, operational rail and ordered document visibleU-14, U-15
03Dashboard β€” tools & statusadmin.php?page=qw-dashboard Β· edit_qw_quizzes1600Γ—1000; <details> opened, not saveddashboard-tools.png β€” Tools & status contentsremap β†’ admin.php?page=qw-dashboard#help; Help/system <details> openedU-16
04Dashboard β€” compact densityadmin.php?page=qw-dashboard Β· edit_qw_quizzes1600Γ—1000; density toggle, not saveddashboard-density-compact.png β€” compact density renderingretired-by-design β†’ Dashboard’s normal responsive native layout at admin.php?page=qw-dashboard; no admin density control or storageU-07, U-08
05Get Startedadmin.php?page=qw-get-started Β· publish_qw_questions1600Γ—1000; stored pageget-started-full.png β€” starter-library explanation and install actionretired-by-design β†’ GET redirect to admin.php?page=qw-dashboard#help; Help onboarding Content step is expandedU-17, U-18
06Importadmin.php?page=qw-import Β· publish_qw_questions1600Γ—1000; stored pageimport-full.png β€” quiz import and bundled-pack workflowsretired-by-design β†’ GET redirect to admin.php?page=qw-settings#advanced-portability; Import mode selectedU-19, U-20
07Import β€” question packadmin.php?page=qw-import Β· publish_qw_questions1600Γ—1000; no file selected; preflight conditionalimport-question-pack.png β€” Question Pack drop zone and preflight arearetired-by-design β†’ admin.php?page=qw-settings#advanced-portability; Import mode selected, Select/Upload state before file selectionU-21, U-22
08Settings chromeadmin.php?page=qw-settings Β· manage_options (target access_quizwizz_settings)1600Γ—1000; stored pagesettings-chrome.png β€” search, workspace navigation and save-status chromeremap β†’ admin.php?page=qw-settings; single-document toolbar, no search query, clean stateU-04, U-23
09Settings β€” Generaladmin.php?page=qw-settings#qw-essential Β· manage_options (target access_quizwizz_settings)1600Γ—1000; stored; initial workspacesettings-general.png β€” experiences, quiz size, languages, interface, difficultiesremap β†’ admin.php?page=qw-settings#general; General heading focused and visibleU-04, U-24
10Settings β€” Builderadmin.php?page=qw-settings#qw-builder Β· manage_options (target access_quizwizz_settings)1600Γ—1000; stored; category list JS-populatedsettings-builder.png β€” Builder matrix, formats, category availabilityremap β†’ admin.php?page=qw-settings#builder; Builder heading focused and pool controls visibleU-05, U-25
11Settings β€” Playeradmin.php?page=qw-settings#qw-player Β· manage_options (target access_quizwizz_settings)1600Γ—1000; automatic advance enabled, not savedsettings-player.png β€” feedback, completion actions, automatic-delay fieldremap β†’ admin.php?page=qw-settings#player; automatic advance enabled and delay field visibleU-26, U-27
12Settings β€” Appearanceadmin.php?page=qw-settings#qw-presentation Β· manage_options (target access_quizwizz_settings)1600Γ—1000; storedsettings-appearance.png β€” presentation controls and six PDF theme cardsremap β†’ admin.php?page=qw-settings#appearance; Appearance heading focused, enabled-theme/default controls visibleU-28, U-29
13Settings β€” PDF & Printadmin.php?page=qw-settings#qw-pdf Β· manage_options (target access_quizwizz_settings)1600Γ—1000; banner forced on / Built-in icon selected, not savedsettings-print.png β€” paper, footer, matrix rows, built-in icon choicesremap β†’ admin.php?page=qw-settings#pdf-print; banner enabled and Built-in source selectedU-05, U-30
14Settings β€” banner: site identityadmin.php?page=qw-settings#qw-pdf Β· manage_options (target access_quizwizz_settings)1600Γ—1000; Site identity selected, not savedsettings-print-banner-site.png β€” site-identity banner panelremap β†’ admin.php?page=qw-settings#pdf-print; banner enabled, Site identity source selectedU-31, U-75
15Settings β€” banner: uploadadmin.php?page=qw-settings#qw-pdf Β· manage_options (target access_quizwizz_settings)1600Γ—1000; Upload selected, no file selectedsettings-print-banner-upload.png β€” upload banner panel and validation affordanceremap β†’ admin.php?page=qw-settings#pdf-print; banner enabled, Upload source selected, no upload in progressU-02, U-32
16Settings β€” AIadmin.php?page=qw-settings#qw-ai Β· manage_options (target access_quizwizz_settings)1600Γ—1000; AI enabled, not savedsettings-ai.png β€” privacy, budget, hard-limit, provider-price detailsremap β†’ admin.php?page=qw-settings#ai; AI enabled and consequence details expandedU-33, U-34
17Settings β€” Advancedadmin.php?page=qw-settings#qw-data Β· manage_options (target access_quizwizz_settings)1600Γ—1000; stored; older backups opened where presentsettings-advanced.png β€” retention, portability, imports, backups, hierarchy, diagnosticsremap β†’ admin.php?page=qw-settings#advanced; Advanced heading focused, controls collapsed except stated detailU-02, U-35
18Settings β€” exposure matrixadmin.php?page=qw-settings#qw-data Β· manage_options (target access_quizwizz_settings)1600Γ—1000; stored; local-until-save matrixsettings-exposure-matrix.png β€” hidden / always applied / visitor choicesremap β†’ admin.php?page=qw-settings#advanced; exposure controls visible with their current selected statesU-36, U-37
19Settings β€” searchadmin.php?page=qw-settings Β· manage_options (target access_quizwizz_settings)1600Γ—1000; query theme, not savedsettings-search.png β€” search-result list and workspace breadcrumbsremap β†’ admin.php?page=qw-settings; search query theme, result list openU-38, U-39
20Settings β€” previewadmin.php?page=qw-settings Β· manage_options (target access_quizwizz_settings)1600Γ—1000; Preview opened, not savedsettings-preview.png β€” modal and Builder / Player / PDF tabsremap β†’ admin.php?page=qw-settings#appearance; production preview open in Player mode (Sheet and Key are alternate modes)U-40, U-41
21Settings β€” no-script fallbackadmin.php?page=qw-settings Β· manage_options (target access_quizwizz_settings)1600Γ—1000; JavaScript disabled in separate tabsettings-noscript-fallback.png β€” server-rendered fallback formreproduce-as-is β†’ admin.php?page=qw-settings; JavaScript disabled, server fallback visibleU-42, U-43
22Quizzes listedit.php?post_type=qw_quiz Β· edit_qw_quizzes1600Γ—1000; stored listlist-quizzes.png β€” Details, Questions, readiness, Source columnsreproduce-as-is β†’ edit.php?post_type=qw_quiz; Quizzes child selectedU-44, U-45
23Quizzes list β€” filtersedit.php?post_type=qw_quiz Β· edit_qw_quizzes1600Γ—1000; stored listlist-quizzes-filters.png β€” saved-view and top filter controlsreproduce-as-is β†’ edit.php?post_type=qw_quiz; native filters visible, no active filterU-46, U-47
24Questions listedit.php?post_type=qw_question Β· edit_qw_questions1600Γ—1000; stored listlist-questions.png β€” question columns, saved views, taxonomy filtersreproduce-as-is β†’ edit.php?post_type=qw_question; Questions child selectedU-48, U-49
25Questions list β€” active filteredit.php?post_type=qw_question&qw_lang=de Β· edit_qw_questions1600Γ—1000; German selectedlist-questions-active-filters.png β€” Active filters badge and Clear allreproduce-as-is β†’ edit.php?post_type=qw_question&qw_lang=de; German filter activeU-50, U-51
26Quiz editorpost.php?post=413&action=edit Β· edit_qw_quizzes1600Γ—1000; existing draft 413editor-quiz.png β€” Quiz questions meta box and linked rowsreproduce-as-is β†’ object-specific quiz edit URL; question manager visibleU-52, U-53
27Quiz editor β€” question searchpost.php?post=413&action=edit Β· edit_qw_quizzes1600Γ—1000; two-character query, not savededitor-quiz-search.png β€” question-search combobox resultsreproduce-as-is β†’ object-specific quiz edit URL; question-search results openU-54, U-55
28New quiz editorpost-new.php?post_type=qw_quiz Β· edit_qw_quizzes1600Γ—1000; new editoreditor-quiz-new.png β€” empty Quiz questions meta boxreproduce-as-is β†’ post-new.php?post_type=qw_quiz; empty manager stateU-56, U-57
29Question editorpost.php?post=583&action=edit Β· edit_qw_questions1600Γ—1000; existing question 583editor-question.png β€” Question details and subject sidebarreproduce-as-is β†’ object-specific question edit URL; selected type visibleU-06, U-58
30New question editorpost-new.php?post_type=qw_question Β· edit_qw_questions1600Γ—1000; new editoreditor-question-new.png β€” empty Question details meta boxreproduce-as-is β†’ post-new.php?post_type=qw_question; blank formU-06, U-59
31Subjects listedit-tags.php?taxonomy=qw_subject&post_type=qw_question Β· manage_categories (target manage_qw_taxonomies)1600Γ—1000; stored listsubjects-list.png β€” subject rows and qwizz_icon columnreproduce-as-is β†’ edit-tags.php?taxonomy=qw_subject&post_type=qw_question; Subjects child selectedU-60, U-61
32Subjects β€” add formedit-tags.php?taxonomy=qw_subject&post_type=qw_question Β· manage_categories (target manage_qw_taxonomies)1600Γ—1000; Add Subject expanded, not savedsubjects-create-form.png β€” expanded create formreproduce-as-is β†’ edit-tags.php?taxonomy=qw_subject&post_type=qw_question; add form expandedU-62, U-63
33Subjects β€” icon pickerterm.php?taxonomy=qw_subject&tag_ID=380 Β· manage_categories (target manage_qw_taxonomies)1600Γ—1000; picker opened, not savedsubjects-icon-picker.png β€” icon choices and advanced detailsremap β†’ object-specific subject edit URL; native icon modal open, current selection shownU-64, U-65
34Block inserterpost-new.php?post_type=post Β· edit_posts1600Γ—1000; unsaved scratch postblock-inserter.png β€” four QuizWizz blocks under Widgetsremap β†’ post-new.php?post_type=post; Qwizz category open, onboarding dismissed, four blocks visibleU-03, U-66
35Quiz block inspectorpost-new.php?post_type=post Β· edit_posts1600Γ—1000; unsaved scratch postblock-quiz-inspector.png β€” Quiz settings panel and quiz comboboxreproduce-as-is β†’ post-new.php?post_type=post; Quiz block selected, Block inspector open, inserter closedU-01, U-03
36Quiz Library block inspectorpost.php?post=600&action=edit Β· edit_posts1600Γ—1000; scratch postblock-library-inspector.png β€” library settingsreproduce-as-is β†’ disposable post edit URL; Library block selected, Block inspector openU-01
37Subjects block inspectorpost.php?post=600&action=edit Β· edit_posts1600Γ—1000; scratch postblock-subjects-inspector.png β€” Subject explorer settingsreproduce-as-is β†’ disposable post edit URL; Subjects block selected, Block inspector openU-09
38Builder block placeholderpost.php?post=600&action=edit Β· edit_posts1600Γ—1000; scratch postblock-craft-placeholder.png β€” Builder canvas placeholderreproduce-as-is β†’ disposable post edit URL; Builder block selected, placeholder and inspector state visibleU-10, U-11
39Site Health testssite-health.php Β· view_site_health_checks1600Γ—1000; accordions expandedsite-health-tests.png β€” database-schema and PDF-runtime testsreproduce-as-is β†’ site-health.php; QuizWizz test group/result expandedU-67, U-68
40Site Health debugsite-health.php?tab=debug Β· view_site_health_checks1600Γ—1000; accordion openedsite-health-debug.png β€” QuizWizz debug-information panelreproduce-as-is β†’ site-health.php?tab=debug; QuizWizz debug panel expandedU-69, U-70
41Plugins rowplugins.php Β· activate_plugins1600Γ—1000; stored plugins pageplugins-row.png β€” QuizWizz row action Get Startedremap β†’ plugins.php; QuizWizz row exposes Dashboard action to admin.php?page=qw-dashboardU-71, U-72
42Privacy policy guideoptions-privacy.php?tab=policyguide Β· manage_privacy_options1600Γ—1000; accordion openedprivacy-policy-guide.png β€” QuizWizz suggested privacy textreproduce-as-is β†’ options-privacy.php?tab=policyguide; QuizWizz policy panel expandedU-73, U-74

2026-07-29 implementation reconciliation

The 42 atlas rows remain the exhaustive visual recapture checklist. The implementation is reconciled below by subsystem rather than by replacing the source images. browser-verified means the changed live state was exercised in cache-disabled Chromium. probe-verified means the standing harness exercised the contract. source-verified means the implementation and registration path were inspected and linted, but this ledger does not claim a new screenshot.

Atlas rowsImplemented targetEvidenceVerification status
01–07Native five-item Qwizz navigation; Dashboard document; Help onboarding; legacy Get Started and Import redirectsincludes/Admin/AdminMenu.php, DashboardPage.php, Onboarding.php, StarterPage.php, ImportPage.php, includes/PostTypes.phpsource-verified; Dashboard/onboarding browser-verified
08–21One semantic Settings document with workspace fragments, search, dependencies, no-script fallback, production Player preview, private resumable portability jobs, owner-scoped backups, and import-only capability splitincludes/Admin/SettingsPage.php, includes/Admin/views/settings-page.php, includes/Admin/PortabilityJob.php, assets/js/qwizz-admin-settings.js, assets/css/qwizz-admin-settings-visual.cssbrowser-verified for workspace navigation, Player preview, export progress, nonce-authenticated download, and 5 MiB client limit; REST contracts verified for strict bodies, deduplication, cancellation, ownership, round-trip import, and size rejection
22–30Native quiz/question list filters and editors with scoped controls and shared SVG icon renderingincludes/Admin/ListTables.php, MetaBoxes.php, assets/js/qwizz-admin-editor.js, assets/css/qwizz-admin-shell.csssource-verified; question editor and filter states browser-verified
31–33Native Subjects list/add flow and body-level accessible icon-picker dialogincludes/Taxonomies.php, assets/js/qwizz-admin-subjects.js, assets/css/qwizz-admin-subjects.cssbrowser-verified for 62-icon dialog, inert background, focus entry, Escape close, and focus restoration
34–38Four existing dynamic blocks retained under the Qwizz category without hand-editing compiled block assetsincludes/Plugin.php; existing build/quiz/block.json registrationssource-verified; runtime registration returned quizwizz/{quiz,craft,library,subjects} in category qwizz
39–42Site Health/debug integrations retained; plugin-row destination follows Dashboard; privacy policy and exporter/eraser include portability jobs and private artifactsincludes/Plugin.php, includes/Admin/Privacy.php, uninstall.phpsource-verified; privacy export/erasure runtime-verified with six jobs removed and all referenced artifacts deleted
allCumulative authorization, player/template, SVG, import, cleanup, and banner boundariesstanding probe harnessprobe-verified: ./scripts/quizwizz-probe.sh --wave all passed 30/30 shell assertions, including 34/34 Wave 2, 12/12 Wave 3, and 12/12 Wave 4

Portability-specific runtime evidence:

  • schema option 1.6.4 and wp_qwizz_portability_jobs with the expected 16 columns;
  • completed export artifact stored as a 36-character private-file identifier with checksum equality;
  • closed export body, query-only import, and malformed nested import rejected with 400;
  • valid sanitized-settings round trip completed; foreign-owner read rejected with 403; queued export cancellation completed;
  • authenticated browser download returned JSON format quizwizz.portability, version 1, with terms, questions, quizzes, and settings;
  • privacy erasure removed all six probe jobs and their three referenced artifacts; 195 artifacts leaked by the pre-fix failed-persistence reproduction were identified as unreferenced and removed before handoff;
  • a valid JSON request larger than 5 MiB was rejected with 413 qw_request_too_large.

No replacement atlas image set is claimed here. The original 42 images remain the before-state and exact recapture manifest for a future release-owner visual comparison.

Finding coverage ledger

Each finding has one primary surface. Repeated finding IDs in the surface ledger intentionally identify the same issue in more than one captured state; they are not duplicate findings. This compact index makes the issue-to-surface relationship mechanically auditable without claiming a fix.

FindingsPrimary surface(s)
U-01–U-0335 Quiz block inspector; 34 Block inserter
U-04–U-0508 Settings chrome; 10 Settings β€” Builder
U-06–U-0829 Question editor; 04 Dashboard β€” compact density
U-09–U-1137 Subjects block inspector; 38 Builder block placeholder
U-12–U-1601 QuizWizz menu; 02 Dashboard; 03 Dashboard β€” tools & status
U-17–U-1805 Get Started
U-19–U-2206 Import; 07 Import β€” question pack
U-23–U-2508 Settings chrome; 09 Settings β€” General; 10 Settings β€” Builder
U-26–U-2711 Settings β€” Player
U-28–U-3012 Settings β€” Appearance; 13 Settings β€” PDF & Print
U-31–U-3214 Settings β€” banner: site identity; 15 Settings β€” banner: upload
U-33–U-3516 Settings β€” AI; 17 Settings β€” Advanced
U-36–U-3718 Settings β€” exposure matrix
U-38–U-3919 Settings β€” search
U-40–U-4120 Settings β€” preview
U-42–U-4321 Settings β€” no-script fallback
U-44–U-4722 Quizzes list; 23 Quizzes list β€” filters
U-48–U-5124 Questions list; 25 Questions list β€” active filter
U-52–U-5526 Quiz editor; 27 Quiz editor β€” question search
U-56–U-5928 New quiz editor; 29 Question editor; 30 New question editor
U-60–U-6531 Subjects list; 32 Subjects β€” add form; 33 Subjects β€” icon picker
U-66–U-6834 Block inserter; 39 Site Health tests
U-69–U-7040 Site Health debug
U-71–U-7241 Plugins row
U-73–U-7542 Privacy policy guide; 14 Settings β€” banner: site identity

Mechanical accounting check

Declared counts: 42 named surface rows; 75 distinct finding identifiers, exactly U-01 through U-75; no finding identifier is absent. Surface-ledger repeats are permitted only for the documented multi-state occurrences (U-01, U-02, U-03, U-04, U-05, U-06).

The following command is the ledger’s mechanical check. It reads this file, counts only rows in ## Surface ledger, verifies the 42 unique names and required disposition vocabulary, then verifies the primary finding coverage range has no gap or duplicate. It does not build Quartz or inspect plugin code.

python3 - <<'PY'
from pathlib import Path
import re
p = Path('q5vault/audits/qwizz/ux-atlas-audit.md')
s = p.read_text()
surfaces = s.split('## Surface ledger\n', 1)[1].split('\n## Finding coverage ledger', 1)[0]
rows = [line for line in surfaces.splitlines() if re.match(r'^\| \d{2} \|', line)]
names = [line.split('|')[2].strip() for line in rows]
assert len(rows) == 42, len(rows)
assert len(set(names)) == 42, len(set(names))
assert all(len(re.findall(r'\*\*(?:reproduce-as-is|remap|retired-by-design)\*\*', line)) == 1 for line in rows)
coverage = s.split('## Finding coverage ledger\n', 1)[1].split('\n## Mechanical accounting check', 1)[0]
ids = re.findall(r'U-(\d{2})(?:–U-(\d{2}))?', coverage)
expanded = [n for a, b in ids for n in range(int(a), int(b or a) + 1)]
assert expanded == list(range(1, 76)), expanded
print('42 surfaces; U-01..U-75 exactly once in primary coverage')
PY

The mechanical check validates ledger accounting only. Runtime and implementation claims are limited to the dated reconciliation evidence above; no replacement-image or pixel-parity claim is made.