📍 Now
QuizWizz is a WordPress quiz plugin under audit on an isolated bench, and this is the one page that says what is measured true of it today. Every row states the date it holds for and how it was established: rows re-measured for this page name the query, the file or the command, and rows that rest on a dated record name that record instead. Where this page and a dated record disagree, this page is current and the dated record stays correct for its own date.
Where everything else lives
Picking the bench up: 🤝 Handover. Dated history: Changelog. Full status ledger: program masterplan. Everything still open, with owners: open-work ledger. Vocabulary and the standing-versus-dated rule: Orientation and glossary. Running the bench: Service operations. Bench only — nothing on this page authorises a release.
Gate and residue
| Gate or residue | Value | As of | Established by |
|---|---|---|---|
| Current shell gate | Reconciled Wave 9 is 1..21 and --wave all is 1..98, both with zero failures; the observed tree digest matches the reconciled frozen pin and script syntax passes. The earlier 94-assertion / 6-failure observation remains historical because its TAP was lost. Library mutation packets are mixed by design and each reports residue=0; this is a scoped shell green, not browser or human acceptance | 2026-09-08 | Sep-8 live punchlist receipt, later shell verification |
| Wave 5 residue diagnostics | Assertion 12 prints # wave5 residue jobs= files= chunks= cron= markers= option_drift= and a :: detail on failure (mutation-proved red→green). 0/6 idle, 0/6 loaded at 4× loops, 0/6 at 8× loops: not reproduced at 4×/8× loops; hypothesis remains unverified. The first all-wave on the changed harness was 98/7 because the operator’s 2026-09-09 Settings reconfiguration (play_page_id=2, politics and science-mathematics off) had outrun two pinned contracts; the harness now pins play_page_id=0 for Waves 7-9 with byte-exact restore and re-pins the tree digest to 9f4c1bbb… after proving the delta is exactly those toggles. Second all-wave 1..98/0; readback 94/10, option 89877cf6… unchanged | 2026-09-14 | Wave 5 residue diagnostics |
| UI/UX repair round (round F) | Six reviewer rows installed on the bench plus one measured regression found and repaired inside the round: the +N subject chip, made focusable by the same round, measured 28x21 and pushed L1-desktop owned small targets from the baseline 8 to 17; the 32x32 pill repair re-measured at 8. Gates on an idle bench with the disposable admin qwvisual-20260914 (1171): shell --wave 1 17/0 and --wave all 1..98/0; eight bounded browser chunks at 47/47, 9/9, 13/13, 7/7, 5/5, 5/5, 5/5 and 7/7; post-chip re-gate 13/13 and 7/7 at 04:02:10Z and 04:05:09Z, after the fix landed at 03:05:48Z. Identical-driver owned metrics improved on eleven rows, with two disclosed measurement artifacts (a tab-walk that entered the PDF iframe, and the save-status pill’s font-size: 0 label-hiding counted as tiny text) and nineteen worse single-run timings that are not benchmarks. Re-run vision critique 172 → 170 findings, 0 new P1 and 6 new P2 — model judgements over static screenshots, not measurements. Residue after every gate: 94 backup rows / 10 by user 1, option SHA-256 89877cf6… unchanged, administrators admin and qwvisual-20260914 — that administrator reading held for this round only and is superseded by the phase G row below, which records the deletion of 1171. No human acceptance, no release eligibility | 2026-09-14 | UX repair round |
| Settings premium restyle (phase G) | The Settings panel restyled to one Apple inset-grouped visual language and shipped as vision round 6 plus a CSS-only focus amendment; the loop hit its six-round cap without converging, so nothing here is a convergence claim. Six owned files, five sheets plus includes/Admin/views/settings-page.php with class attributes only (stripping every class="…" attribute from the pre-round copy and the live file leaves zero differing lines). Gates on an idle bench as the disposable admin qwvisual-20260914 (1171): shell --wave all 1..98/0 with Wave 9 at admin_tree 2q build 10q attempt_payload 5q settings page 4q / 150490 bytes, and four bounded browser chunks at 47/47, 7/7, 7/7 and 10/10 with zero console and page errors and complete restoration. The keyboard gate was then reported blocked on the mobile strip clip, the operator explicitly approved the smallest bounded JavaScript correction, and the round’s freeze on assets/js/qwizz-admin-settings.js was lifted for that one change: a focus listener per [data-workspace-tab] at :1485-1491 calling scrollIntoView({ block: 'nearest', inline: 'start', behavior: 'auto' }), live bundle SHA-256 a7b6768e… after a first inline: 'nearest' bundle was measured ineffective against scroll-snap-type: x proximity. The gate is now met: the re-run walk records 0 missing indicators and 0 clipped rings across 36 Settings-owned stops at both viewports (mobile Player at scrollLeft: 87, Advanced 2.39px clear), core chrome unchanged at 1 missing / 7 clipped mobile and 0 / 11 desktop, Preview open-Escape-return passing and search pdf at 5 matches; the walk’s own verdict stays false only on the pre-existing mis-specified visibleRowsDecreased 7 → 85 assertion. The amended bundle re-passes the same four chunks at 47/47, 7/7, 7/7 and 10/10 and shell 1..98/0, logs/debug.log 38,703 before and after. Zero Settings saves in the round or the amendment: option SHA-256 89877cf6… and 94 rows / 10 by user 1 after every round, gate and walk; disposable identity 1171 deleted, re-created as 1208 for the amendment walk and deleted again, leaving admin the only administrator. UIUX-SET-02 is now shipped; the amendment is section 11 of the receipt and both the receipt section and the ledger row are published by the build that follows this edit. No convergence, no human acceptance, no release eligibility | 2026-09-14 | Settings premium restyle |
| Web-served backup droppings | 0 filenames containing .bak under wp/wp-content/plugins/quizwizz/ (58 before: 32 .bak, 26 .bak-20260904-cutover; assets 10, config 2, includes 12, languages 34). All 58 preserved privately with per-file SHA-256 parity before deletion; manifest SHA-256 43a12f5e…. Public vhost droppings deny widened to suffixed backup names, nginx -t exit 0, reload exit 0; the two previously public suffixed PHP backups now return 404. Independent replay refuted nothing. Same day: trailing-slash and swp/swo edges closed, mutation-proved on a throwaway uploads fixture (§7). Retained nginx logs (2025-11-13 → 2026-09-13) record no third-party fetch of any backup dropping — only this host’s own probes; bounded by retention and a Host-less log format, not “never fetched”. Plugin source bytes, tracked files and the blocked Sep-8 mirror commit are unchanged; not release or acceptance | 2026-09-13 22:13–22:16 UTC; replay and log sweep the same evening | 2026-09-14 backup exposure cleanup; walk of the plugin tree, ./scripts/qwgit.sh status --short (41 M, 0 ??), ./scripts/wrdp-health.sh 7/7 |
| Current browser and PDF boundary | Footer repair has scoped 29/29 checks, four PDFs and 12/12 complete rendered pages. Final original a-d passes 7/7 and original e passes 5/5. Pre-repair f remains 4/5 and the first post-sticky lifecycle 5/6 red, but corrected response-observer f passes 5/5 with in-viewport Cancel/Preview PDF/Print and exact current-run cleanup. Corrected g passes 5/5 after awaiting initial preview capture; this fixes a harness barrier, not product behavior. Fresh-Surfaces passes 9/9 for S03-02/03/05/06. The separate policy-aware Editor lifecycle passes 8/8 for E03-08/10/11/12 across desktop/mobile after preserving the first red, policy-blind Theme oracle. Runtime acceptance is not human acceptance; original f and the separate Editor lifecycle do not substitute for each other | 2026-09-08–09 | Sep-8 live punchlist receipt, final browser and Editor receipts |
| Current source and residue boundary | The final 19-file plugin packet is offline-proved against exact dirty before images: strict apply-check, apply, recursive byte comparison and live-freeze hashes all pass. It remains noncanonical and releaseEligible:false. The sealed after-only harness/worker supplement has manifest SHA-256 a7d8d50b…, 39 source files and 39/39 copy/current parity; raw results, fixtures, capabilities, config and PDF copies are excluded, so it is source preservation rather than runtime authority. Independent archive replay proves all 94 backup rows / 10 operator rows match the pre-task dump. Corrected f, g and Editor each remove exactly their one draft, one artifact and one private file; earlier unknown capability identities remain unresolved and no global cleanup is claimed | 2026-09-08–09 | Sep-8 live punchlist receipt, final plugin and harness supplements |
| Surviving evidence | Current local manifest: 50 public-safe assets — 28 JSON and 22 PNG — independent of the 39 working IDs. All 50 match recorded digests/lengths, all JSON parses, every file is mode 0644, and all 22 PNG stored-byte and decoded-RGBA hashes are distinct. The first 47 entry objects remain unchanged and three Editor entries were appended. The two Editor frames are verified CSS paint-masked viewport geometry, not underlying content deletion or interaction proof. Three inline-only original mobile images never persisted; derivatives do not substitute for them. Scratch originals were lost. This is a local census, not production publication | 2026-09-08–09 | Sep-8 asset manifest and receipt |
| Conditional tooltip fixture | Same-HTML before/after fixture changes white-on-white hints to readable hints; desktop/touch retain native footer values ''/1/'', English/German flags and pressed states. Conditional fixture only: Hidden unchanged, no Settings save, no PDF-agreement proof or human acceptance. The final 19-file plugin packet includes the installed current bytes offline, but its runtime gate remains incomplete | 2026-09-08, before 15:25:01.936–15:25:51.994 UTC; after 15:29:03.566–15:29:48.677 UTC | Sep-8 live punchlist receipt, tooltip fixture |
| Historical Sep-2 probe gate | 94/94, TAP 1..94, failures 0 on that round’s idle-bench bytes. Wave 5 assertion 12 measured 0 failures in 6 idle runs versus 1 in 6 under concurrent HTTP load; issue #15 remains the diagnostic reference. Not the Sep-8 gate | 2026-09-02 | gate reliability |
| Historical Sep-2 browser gate | Six serial cache-disabled selectors: legacy 47/47, player 9/9, admin 13/13, and bounded UI/UX steps 8/8, 7/7, 7/7; then-reported restoration complete, no foreign backup rows or console/page errors. Not current repaired-state authority | 2026-09-02 | amended receipt |
| Historical SET-07 amendment | Original closure superseded: fix and gate reused a selector that skipped text-node labels. Widened operator probe measured 23/77 violations before repair and 0/77 after 715474f; disposable identity checked 76. Widened gate required at least 60 pairs and zero gaps below 6px, with two red→green mutations | amended 2026-09-02 | SET-07 amendment |
| Historical Sep-2 verdict and residue | ACCEPT-WITH-WAIVERS, zero blockers for that round; 16 mutation rows red→green. Then-final residue: 95 Settings-backup rows, ordered SHA 86100bbc…, Settings semantic SHA 874bb4f7…; zero disposable users, smoke posts, quiz-99 attempts and portability jobs. Not a Sep-8 restoration proof | 2026-09-02 | amended receipt; open work |
| Historical predecessor | The 2026-09-01 drive closed at clean HEAD 2da4b577, shell 94/94 and browser 60/60 with its own residual boundaries. Sep-2 superseded those figures for that later round; neither is current Sep-8 plugin/browser authority | superseded 2026-09-02 | 2026-09-01 polish-drive receipt |
| Superseded gate | 1..72 was Cluster 4’s gate and was replaced the same day by Cluster 5’s wave 10; it is not a standing figure and must not be quoted as one | superseded 2026-08-27 | Cluster 5 |
| Superseded gate | 1..76 was the standing figure from 2026-08-27 until wave 11 landed; like 1..72 it is now dated and must not be quoted as standing, while dated records remain correct for their dates. The later 94/94 result is explicitly the Historical Sep-2 probe gate row, not the pending Sep-8 gate | superseded 2026-08-31 | 2026-08-31 corpus repair, which added wave 11 and its 17 assertions |
| Quizzes | 107 — 13 published, 94 draft · pending corpus replacement | 2026-08-27 | SELECT COUNT(*) FROM wp_posts WHERE post_type='qw_quiz' grouped by post_status. Deliberately not re-measured on 2026-08-31, and one probe-only draft has been added since (next row), so the split is a dated figure rather than today’s |
| Zero-question quizzes | 1 — probe-only draft 11622, wave 8’s control | 2026-08-31 | the 2026-08-27 population was 15 and was deleted, recorded in the changelog; that deletion left wave 8 without the zero-question control it selects at scripts/quizwizz-probe.sh:2358-2384, the wave failed not ok 2 - zero-question quiz excluded but preserved, and the control was restored as a single draft. Re-measured 2026-08-31: wp_posts joined to its qw_question_count meta returns exactly 11622 draft 0. Fixture residue, not corpus |
| Attempt rows | 22 in wp_qwizz_attempts · pending corpus replacement | 2026-08-27 | SELECT COUNT(*) FROM wp_qwizz_attempts; not re-counted on 2026-08-31, for the reason in the Quizzes row |
MAX(ID) for qw_quiz | exact corpus maximum not re-measured · pending corpus replacement; it was known to be at least 11824 at the initial S10.6 sweep | 2026-09-01 qualification of the 2026-08-27 census | the 2026-08-27 cleanup moved the then-current maximum from 10989 to 10779; later probe and guest fixtures make that number historical. The five initial guest rows are preserved only as a point-in-time observation in the polish-drive receipt; the final S10 residue audit does not establish a new corpus maximum |
| Debug log | 38,594 lines; the Sep-1 drive-window tail ends at 11:18:48 UTC with routine update lines, two expected tier diagnostics, eight expected invalid-default diagnostics and no PHP fatal, warning or notice | 2026-09-01 | wc -l logs/debug.log plus direct review of logs/debug.log:38535-38594; emitters at wp/wp-content/plugins/quizwizz/includes/Admin/SettingsPage.php:163-180 and includes/Settings/SettingsSchema.php:177-178, reproduced in the amended S10.6 receipt |
| Bench files changed by the four clusters | 18, every one releaseEligible: false | 2026-08-27 | file count from the canonical handoff; the apply order cluster1, cluster2, cluster4, cluster5 verified at audits/qwizz/2026-08-27-apply-clusters.sh:56 and its six digest-enforced shared-file links at :16-21 |
| Fixture residue | 0 fixture ids, 0 fixture users, admin#1 the only administrator, all 218 settings-backup rows deleted, qw_exposure_settings md5 byte-identical to the pre-tour baseline | 2026-08-25 | 2026-08-25 UI corpus, residue section at :87-96 |
| Initial guest-quiz observation | at the first S10.6 sweep, 11756, 11757, 11775, 11801, 11824 were private, qw_ephemeral=1 and future-expiring on 2026-09-02 under lifecycle.guest_quiz_hours=24 | initial read on 2026-09-01; not current authority | exact point-in-time SQL rows in the amended receipt. The final audit’s broad S10 post query is zero; this row is retained as history rather than presented as current residue |
One figure in the 2026-08-25 fixture-residue row needs its date read carefully: that corpus disclosed 56 wp_qwizz_attempts rows kept deliberately (2026-08-25-ui-tour.md:96). The table measured 22 rows on 2026-08-27. Both are correct for their dates; 22 is the last measurement and is held there pending corpus replacement rather than re-counted today.
State today
| Thing | Value | Where it is proven |
|---|---|---|
| Plugin | QuizWizz v1.10.0, DB schema 1.6.8 | QUIZWIZZ_VERSION at wp/wp-content/plugins/quizwizz/quizwizz.php:22 and Installer::SCHEMA_VERSION at wp/wp-content/plugins/quizwizz/includes/Installer.php:20, both re-read on the installed tree 2026-08-31 |
| Published questions | 9,069 published qw_question posts, index also 9,069, drift 0 · pending corpus replacement | both counted on the bench database 2026-08-27, wp_posts against wp_qwizz_question_index; not re-counted on 2026-08-31 because the announced replacement supersedes the set. How the total was reached, intake by intake, is derived once in the question corpus hub |
| Question languages | 4,711 en + 4,244 de + 57 es + 57 fr · pending corpus replacement | SELECT lang, COUNT(*) FROM wp_qwizz_question_index GROUP BY lang, 2026-08-27. Only two of those pools are enabled: a live ExposureSettings::enabled_langs() returned en,de on 2026-08-31, so the 57 es and 57 fr rows are stored but not offered |
| Subject terms | 483 (qw_subject) · pending corpus replacement | wp_term_taxonomy count, 2026-08-27; not re-counted on 2026-08-31, and the taxonomy rows in the open-work ledger are deferred for the same reason |
| Interface language | stored auto, resolving to de | corrected on 2026-08-31: qw_exposure_settings.iface_lang read from wp_options is auto, not the en this row carried for 2026-08-27. auto falls through to the WordPress locale hint at wp/wp-content/plugins/quizwizz/includes/ExposureSettings.php:653-659, and with WPLANG = de_DE a live ExposureSettings::default_lang() returned de — which is why the bench admin UI renders German copy |
| German catalog | At catalog commit d61d98c, 1,697 translated entries, fuzzy 0 and untranslated 0; 51 msgids were added (47 extracted plus four dynamic tier labels) and five stale entries removed. This is catalog truth, not a claim that every string was observed rendered. Current pushed plugin mirror HEAD is 715474f. | the 2026-09-01 polish-drive catalog receipt; installed artifacts under wp/wp-content/plugins/quizwizz/languages/; current mirror amendment in the 2026-09-02 receipt |
| Script catalogs | 11 handle-named plus 3 hash-named JSON catalogs installed beside the MO; the changed runtime handles are qwizz-block-editor-enhance and qwizz-player | catalog commit d61d98c and the polish-drive receipt |
| Plugin mirror | Sep-8 mirror commit NOT PERFORMED / blocked, and rounds F and G both widened the gap. ./scripts/qwgit.sh status --porcelain now reads 51 M and 0 ??, against 49 after round F and 41 before both; the current classes are 16 post-sep8-unattributed, 9 post-packet-mutation, 6 packet-clean-base, 4 packet-on-drifted-base and 14 inherited-catalog-artifact. HEAD 715474f is not installed-byte authority: 13/19 dirty-baseline before files differ from it, and the disposable canonical apply-check fails in 7 paths — that check has not been re-run against the round-F or the phase G tree. No actual index inspection or commit occurred. Release owner must decide inherited prerequisites and canonical target/port, then approve narrow staging after checking the real index for unrelated work. Decision inputs: mirror decision sheet. | Sep-8 live punchlist receipt, canonical assessment; round-F count and classes in the round F receipt; phase G refresh on the mirror decision sheet |
| Sep-8 live punchlist | All 39 working IDs remain visible, separate from eight August canonical S03 collisions and never added to canonical issue/cluster totals. Scoped shell, browser, PDF and offline source results are integrated, but the fresh f lifecycle and capability capture remain red/incomplete; human acceptance is unrecorded for every row. This is not planning authority, blanket acceptance, release or publication | Sep-8 live punchlist receipt; releaseEligible: false, humanAccepted: false, productionPublished: false |
| Historical UI/UX-perfection round | Sep-2 ACCEPT-WITH-WAIVERS, zero blockers for that dated round, pushed mirror 715474f; SET-07 closure superseded and re-proved. Reviewer, metric, owner-1 backup-cap and Wave 5 diagnostic follow-ups remain in the ledger. Not acceptance of Sep-8 installed bytes | amended 2026-09-02 receipt; open work |
| 2026-09-01 mega-polish drive | Historical predecessor accepted at clean HEAD 2da4b577; Sep-2 superseded its mirror/browser/residue authority in turn. Neither dated receipt certifies the Sep-8 state | 2026-09-01 mega-polish drive; releaseEligible: false |
| Wiki validation | build.sh wrdp runs wiki-lint.py over the vault after SSOT validation and fails the build on any violation; validate-ssot.py returns zero violations because no wiki-ia.json exists | ~/dev/wikis/build.sh:55-58 |
| Public wiki | On 2026-09-14 current was switched to dist-1789368837.480655941-2567578 by the final approved production build of the day (rollback target dist-1789368700.261504905-2557116, itself the first phase-H build; the earlier 2026-09-14 build was dist-1789342603.105421845-211355 with rollback dist-1788396252.029347706-3882028) after a green --check-only (99 Markdown inputs, 1,088 emitted files); index.html mode -rw-r--r--; fourteen routes (/, /now, /operations, /changelog, /audits/qwizz/, /audits/qwizz/handover, the Sep-14 cleanup receipt, the mirror decision sheet, the Wave 5 diagnostics receipt, the round-F receipt, the phase-G receipt, probes, masterplan, open-work) returned 200 with zero literal [[ outside code; the three needles (wave5 residue, board-journey.png, apple_feel) were served, and the three evidence boards (board-journey.png, board-admin.png, board-settings.png) returned 200 image/png. Unpublished since that build: this sentence and the phase-G JavaScript-amendment edits (the receipt’s section 11 and its sections 9 and 10, the UIUX-SET-02 ledger row and census, handover, Now, changelog and probe updates). They publish by the build that follows this edit. Earlier: on 2026-08-31, current was observed serving dist-1788153309.461633591-3913543, published by the second approved production build with wrdp/current symlinked and index.html mode -rw-r--r--. The 2026-09-02 source update was validated with --check-only on that date; no production build was executed for it. | readlink /home/loca/dev/wikis/wrdp/current; stat -c '%A' /home/loca/dev/wikis/wrdp/current/index.html; Sep-14 phase-G receipt |
The Sep-8 navigation update claimed no validation run or production publication of its own; its evidence boundary is the Sep-8 live punchlist receipt. The round-F and phase-G receipts and their row updates were written after the first 2026-09-14 build and are published by the final 2026-09-14 build named in the row above; the writers of both rounds ran no production build or deploy themselves, the orchestrator did. Written after that final build and therefore still unpublished: the Public wiki row itself and the phase-G JavaScript-amendment edits, which their writer checked with the vault lint gate scripts/wiki-lint.py and no build of any kind, and which are published by the build that follows this edit.
What
pending corpus replacementmeans on this pageA corrected question corpus is being prepared for upload and will replace the current question set, so the 2026-08-31 drive deliberately re-measured none of the figures that replacement will invalidate: quizzes, attempt rows and
MAX(ID)in the gate table above, and published questions, question languages and subject terms here. Each such row keeps its last real measurement with the date it was taken, because a count taken the day before a replacement is stale on arrival while reading as current. The rows belong to thedeferred — corpus replacement inboundclass in the open-work ledger; the deferral names an announced upstream event, not a measurement this bench is unable to take. Re-measure once the replacement lands, and date the new figures then.
The 1,651-active / 1,649-distinct pair remains correct for the dated 2026-08-31 HOLD stage. It is superseded as current catalog authority by commit d61d98c: 1,697 translated entries, zero fuzzy and zero untranslated after 51 additions and five stale removals. The context-aware 2026-08-31 explanation remains historical evidence; neither count proves that every translation rendered in the UI. Current authority: the 2026-09-01 polish-drive catalog receipt.
No current subject-sufficiency measurement exists
The last census was measured on 2026-08-19 against the then-current inventory of 679 published questions and 456 subject terms — before that same day’s legacy WXR import took the corpus to 9,069 questions and 483 subjects. It found 2 specific subjects,
general-knowledgeandgeography, plus the syntheticanycard satisfying the default English progressive request, with 197 non-empty-but-insufficient pools and 257 at zero capacity; 2 + 197 + 257 = 456 is the entire population it measured. Those numbers describe the pre-import corpus and are not current capacity. No post-import census has been run, so this page states no current sufficiency figure. Why 9,069 questions across 483 subjects still yield few playable subject cards: the question corpus hub. Method: subject sufficiency census. Census rows: 2026-08-19 question-corpus audit at:177-183, where 456 is the population considered and 2 + 197 + 257 partitions it exactly. Resolving it is bet B002 in the open-work ledger.No census is planned before the replacement corpus lands, for the reason in the callout above, so B002 stays deferred rather than open and unmeasured.
The play route’s not-found contract
Four outcomes, one guard chain, verified in the installed source at wp/wp-content/plugins/quizwizz/includes/Frontend/QuizQueryViewer.php. Cluster 5 is what made all three not-found conditions serve a real 404; before it, two of the three answered HTTP 200 with the whole home page.
flowchart TB REQ["request with ?qwizz_play=id"] --> P{"does a post with that id exist,<br/>and is its type qw_quiz?"} P -->|"no post, or a post of another type"| E["emit_404 at :64-82"] P -->|"yes"| C{"QuizAccess::can_read id, token?"} C -->|"no, but a password is required"| RD["redirect to the quiz permalink<br/>:25-27"] C -->|"no, and no password"| E C -->|"yes"| S["status_header 200, singular wp_query state<br/>:32-46"] S --> B{"does do_blocks render anything?<br/>:49-50"} B -->|"nothing"| U["substitute QuizEmbed::unavailable<br/>stays 200 with the card"] B -->|"content"| PL["render the player<br/>200, exactly one title"] E --> F["clear the loop, set_404, 404 header,<br/>include the theme 404 template, exit<br/>55,655 bytes"]
- the type guard is
:21, and it covers both a positive id that resolves to no post and an id belonging to a post of another type. - the access guard is
:24, with the password branch redirecting at:25-27and the genuinely-unreadable branch callingemit_404at:30. emit_404at:64-82is the whole fix: it clears the stale loop out of$wp_query, callsset_404(), sends the 404 header, includes the theme’s ownget_404_template()and exits, so exactly one document is emitted. A barestatus_header( 404 )was the defect — it left the main query untouched and WordPress painted the home page underneath the 404 status.- measured outcome, from the Cluster 5 record at
:22-31: an unreadable existing quiz served 121,285 bytes under a 404, a nonexistent id answered 200 with 121,286 bytes and the id of a non-quiz post answered 200 with 121,284 bytes. All three now return 404 at 55,655 bytes — 65,630 bytes and 54 percent off every not-found request. - the readable-but-empty case deliberately stays 200:
can_read()already returned true and the 200 was already sent, so an empty render substitutes the shared unavailable card rather than contradicting the status. That separation is the Cluster 2 contract.
Current decision
Public launch remains NO-GO. The inherited 2026-08-17 launch-readiness decision recorded 11 operational/runtime gates verified and 13 owner or canonical-release blockers (:20-25, :29-41); those are dated observations, not proof that Sep-8 final gates pass. The Sep-8 live punchlist receipt adds explicit interim/missing-evidence and mirror-blocker boundaries without replacing planning authority. Every artifact remains releaseEligible: false; the release owner applies source through the locked pipeline, with the canonical handoff retained as historical handoff context.
Open work
Everything still open is tracked once, with an owner and an evidence link per row, in the 169-row open-work ledger: 34 shipped, 14 bench-actionable, 61 owner-decidable, 49 terminal-blocked and 11 deferred. Round F closed the ten 2026-09-02 reviewer and metric rows — six installed, two found already resolved on measurement, two re-scoped — and added seven owner-decidable visual rows, UIUX-P1 plus UIUX-VIS-01 through UIUX-VIS-06. Phase G then added eight more, UIUX-SET-01 through UIUX-SET-08: four arrived bench-actionable (two JavaScript residuals the Settings round froze, one harness coverage gap, one documentation drift) and four are owner-decidable critic residuals. UIUX-SET-02 moved to shipped the same day on the operator-approved focus fix, so what remains bench-actionable across both rounds is the owner-1 backup-cap hazard, the Wave 5 diagnostic row and three phase G rows. This page does not duplicate the row detail.
Two corrections for anyone returning to the priority list this page used to carry:
- UX-ANS-01 is closed, not open. It was answered as D005 on 2026-08-19 — whatever the admin decides for the quiz wins, explanations included, even while the site matrix forces the key — and it is probe-defended by Wave 6 PHP assertion 15. The standing rule lives in the answer-visibility policy; the dated receipt, with the ruling at
:167and the probe defence at:195, is play and print answers. D005 settled precedence only, so the answers operator UI is not finished: its residue is open as UX-ANSUI-01 in the ledger at:53, policy decided and implementation open, because the collapsed switch still writes both bits and player timing is not separately exposed on expand. - Bet B002, the sufficiency resolver, is still open and now lives in the ledger rather than only on this page. It needs a fresh census before it can be specified, for the reason given in the callout above.
The 2026-08-25 visual corpus raised 25 findings and fixed none of them (2026-08-25 UI corpus, :100-126). That is no longer the standing state. The 24 still-open findings were re-measured on 2026-08-31 — 25 verdicts, because TOUR-24 splits into two independent halves — and the defect-class rows were repaired on the bench across seven accepted mirror commits, 92ea358, 6a28df6, ebf4f2c, f02cba9, b3ee3df, 2327946 and 33989f9, with an eighth, 8494823, withdrawn as wrong and superseded by 33989f9. Each was mutation-proved on its own slice, and the full --wave all was re-run green after the last of them landed. Every commit is releaseEligible: false. The per-row verdicts and the batched owner-decision sheet are on the 2026-08-31 corpus triage; the shipped repairs, their matched mutation pairs and the gate they leave standing are on the 2026-08-31 corpus repair. Six qualifications belong on this page rather than only on those two records:
- Finding 25, the invalid
?qwizz_play=999999request serving the ordinary front page, was already closed by Cluster 5. TOUR-07’s sticky-toolbar occlusion did not reproduce at either viewport on 2026-08-31, with 0 of 9 settings headings occluded, so it closes as not reproduced rather than as a live-defect fix. The offset consolidation nevertheless shipped as source-debt removal (ebf4f2c,f02cba9). The JS half’s NaN fallback was a separate real defect fixed on the bench in this HOLD remediation (c8d7c10; receipt); that repair does not retroactively make TOUR-07 reproduced. All three commits remainreleaseEligible: false. - TOUR-03, TOUR-09, TOUR-15’s canonical product name and TOUR-24a’s empty player card are design-class and were never eligible for a silent fix. They are owner-decision rows on the triage sheet, each with a recommendation and a measured cost.
- TOUR-13 and TOUR-14 are theme-owned site content rather than plugin defects, and TOUR-21 and TOUR-22 are deferred pending corpus replacement.
- TOUR-19’s source-only state changed on 2026-09-02: the rendered fine-tune fixture now proves one resting handle, hidden-at-rest tools and hover reveal, and mutation row 10 proves that assertion can fail. Its browser-acceptance gap is closed. TOUR-20 remains source-and-assertion only because the bench still has no locked-quiz fixture.
- TOUR-23 took two attempts, and the first is the reason this page names commits.
8494823implemented source-identity chrome instead of the fix and left the duplicate Advanced panel standing, so it was withdrawn and superseded by33989f9, which merges the craft controls into the existing inspector panel. The installedassets/js/qwizz-block-editor-enhance.jsnow carries no second panel title, leaving only the capability guard at:488and the plugin’s own Builder-profile panel at:502-503, and the drive’s browser check found exactly one core Advanced panel with the merged groups. - Outside the corpus set, FL-001’s modal-focus premise was refuted rather than fixed: the code path it named has no request boundary to guard, closing the picker in one frame already returned focus to the trigger, and the guard it proposed would have changed a source marker and no observable behaviour.
Do not be misled
The local release zip is not the deployed build
Both reported
1.10.0, and they were never the same bytes:assets/js/qwizz-admin-settings.jsmeasured 47,344 bytes in the archive against 66,288 live when the two were compared on 2026-08-18 (the completed task log at:49), and that comparison found five archive assets returning 404 live. The same file measured 66,298 bytes here on 2026-08-27 and measures 74,099 bytes on 2026-08-31 (wc -con the installed tree), the growth being the settings-JS work committed asebf4f2c. Noquizwizz-1.10.0.zipexists anywhere under/home/loca/dev/wrdptoday. The bench is the truth. Analysis derived from the zip has been retired.
The mirroring procedure
The mirror follows the bench and never the reverse: bench → mirror → any archive. An archive sits downstream of both and is never evidence about the deployed build.
- The mirror’s git directory sits outside the plugin —
GIT_DIR=/home/loca/dev/wrdp/.git-quizwizzwithGIT_WORK_TREE=wp/wp-content/plugins/quizwizz(scripts/qwgit.sh:10-11) — andoriginishttps://git.omp.loca.zone/loca/quizwizz.git. Every git call goes through./scripts/qwgit.sh, which injects the Gitea token from/home/loca/gitea/qwgit-token.txtwhen that file is readable (:12-15).- The worktree is
www-data-owned, socheckoutandpullinto the live tree fail by design (scripts/qwgit.sh:3-5). A bench edit is staged under/tmp/qwfix/and installed withsudo -n install -o www-data -g www-data -m 0644; git never writes the live tree.- Read an earlier version without touching the bench:
./scripts/qwgit.sh show <sha>:<path>. That is also the restore leg of a mutation proof — install the pre-change version, watch the assertion go red, install the fix, watch it go green.- Commit after each accepted change and push only once the batch gate is green, so neither the mirror nor a closed issue advertises a fix the bench does not carry.
- Before quoting the mirror as the source of a claim, prove it equals the deployed tree:
./scripts/qwgit.sh status --shortprints nothing and./scripts/qwgit.sh log --oneline -1names the deployed commit. The original 2026-09-02 UI/UX close recorded an empty worktree at54c54c8; the post-publication SET-07 repair is pushed as715474f, and the installed repair file matches SHA-25692d09a8e…. See the amended receipt. Earlier clean and drift readings remain dated in their own receipts.
Five earlier findings have been retracted after measuring the live system. Three on 2026-08-18: a default PDF theme does exist (theme_default = cyber); no settings control lacks an accessible name, 0 of 140; and the settings page showing every section at once is intentional scroll-spy behaviour, not a broken tab strip. Two more on 2026-08-31, both from finding 3.2.1, whose defect was real while its counts were not. The bare hidden-state word was not on three controls but on twelve, ten of which exposed it as their accessible name — the nine exposure rows plus the final-cue none radio, while the question-numbering and answer-marker radios already carried distinct aria-label values (Admin/views/settings-page.php:508, :523); every exposure state button is now named after its row object at :44-49. And the Data panel has no unnamed submit: the two importer submits at Admin/ImportPage.php:107-110 and :139-142 carry visible text, and each settings backup contributes an aria-label-named restore and delete button at Admin/views/settings-page.php:942-953, twenty of them at the ten backups the panel held, for 22 named submits and none unnamed. So what TOUR-17 fixed was the missing visible label beside each icon, not a missing accessible name.
Dated history
This page keeps no chronology of its own. The changelog is the single dated history of the bench, the audits, curation and publication. The newest dated records are:
- Settings premium restyle — phase G: the Settings panel restyled to one Apple inset-grouped visual language over six scored vision rounds plus a CSS-only focus amendment, six owned files with class attributes only in the view, shell
1..98/0 and four bounded browser chunks at 47/47, 7/7, 7/7 and 10/10, a keyboard walk that cleared every missing indicator and every desktop clipped ring, and a rejected scroll-snap experiment. An appended amendment records the operator-approved JavaScript focus fix that closed the remaining mobile clips at both viewports and re-passed the same four chunks and shell gate. Not converged, eight new ledger rows of whichUIUX-SET-02has since shipped, tracked-modified rows 49 → 51, mirror HEAD unchanged at715474f. No human acceptance;releaseEligible: false. - UX repair round — round F: eight reviewer rows and both metric rows closed, one measured regression repaired in the same round, shell
1..98/0, eight bounded browser chunks plus a post-chip re-gate at 13/13 and 7/7, identical-driver owned metrics improved on eleven rows, and a re-run vision critique at 172 → 170 findings with seven new owner-decidable visual rows. Tracked-modified rows 41 → 49, mirror HEAD unchanged at715474f. No human acceptance;releaseEligible: false. - 2026-09-14 backup exposure cleanup — scoped bench hygiene only: 58 web-served
.bak*droppings preserved privately and removed, public vhost droppings deny made suffix-aware. No source, database or Sep-8 boundary change;releaseEligible: false. - Sep-8 live punchlist receipt — 39 retained working IDs; reconciled shell green, bounded browser/PDF results, fresh f product geometry accepted but lifecycle red on capability settlement, and final 19-file plugin packet offline-proved against exact dirty baselines. Mirror commit NOT PERFORMED / blocked; no blanket acceptance, release, publication or human acceptance. Latest full live-punchlist audit, not planning authority.
- 2026-09-02 QuizWizz UI and UX perfection round — amended evidence receipt — ACCEPT-WITH-WAIVERS, zero blockers. Pushed plugin HEAD
715474f; shell 94/94 on an idle bench; six bounded browser selectors; mutations 16/16; recovered 95-row baseline. The amendment supersedes the original false SET-07 closure, mutation-proves the widened gate and records the Wave 5 load-sensitive flake in issue #15.releaseEligible: false. - ✨ 2026-09-01 QuizWizz mega-polish drive — S0a–S10 evidence receipt — ACCEPT with waived residuals; all four review P1s resolved. Plugin HEAD
2da4b577; shell 94/94; bounded browser 60/60 as 46+8+12; replayed mutations 2/10/11; recovered 95-row baseline. Residuals: #13, external-kill cleanup, benign per-run tokens, and content-identical saves.releaseEligible: false. - 🩹 2026-08-31 HOLD remediation — F1–F8 repair and truth receipt — accepted after fresh code and evidence adversarial reviews: pushed clean plugin source/catalog HEAD
87a0e61, shell 93/93 and then-current browser 45/45. Bench-only,releaseEligible: false; lifecycle issue #10 remains open. Superseded for current totals and residue truth by the 2026-09-02 receipt. - 🧰 2026-08-31 corpus repair — shipped fixes, mutation pairs and the 1..93 gate — the preceding completion drive’s dated record. Its browser gate was then-current at 37/37 and was next superseded by HOLD-remediation 45/45, the 2026-09-01 hardened 60/60 authority and finally the six-selector 2026-09-02 contract.
- 🔎 2026-08-31 corpus triage — 25 verdicts and the owner-decision sheet — one re-measured verdict per open finding, then every design-class and owner-decidable row batched into a single sheet, with the designer pass and the reason FL-003 could not be probed on this bench.