When sources disagree, use this order: installed code and live runtime first, the final gates, mutation matrix and recovered 95-row evidence in the 2026-09-02 UI and UX perfection receipt second, the 2026-09-01 and 2026-08-31 dated receipts next, this ledger after that, and older narrative pages only as dated history. Changelogs are navigation, never feature proof.

🗂️ Open work ledger

This page is the one place that says what is still open. Five pages used to answer that question in five formats and disagreed with each other, so they were folded into this ledger on 2026-08-27. Closed and historical material did not move: it stays on the dated page that measured it, and this ledger links to it. Nothing here authorises a release — the bench is releaseEligible: false.

Pickup order for the bench-actionable rows, with the gate to run after each, is kept on the handover page; this ledger stays the authority on status.

Read a row by its two status dimensions. Policy state says whether a human has decided what should happen; implementation state says what the deployed bench actually does. They are independent, and the disagreement they used to hide is exactly why the French and Spanish catalogs were recorded four different ways across four pages. A row reading policy open · implementation deferred is legitimate and common.

How to use this page

  • id — the canonical identifier used from here on. Legacy ids are kept so old citations still land.
  • blocked on — the named prerequisite, not a mood. If it names a person-role or an owner-intake row, no bench work can start.
  • status — policy decided or policy open, then implementation shipped, partial, deferred or absent.
  • evidence — the page or path:line that proves the row. Changelogs and prior page text are not evidence.
  • Current status authority stays on the program masterplan; today’s measured state is on 📍 Now; runtime proof boundaries are on the probe harness.

The current executable evidence is shell 94/94 on an idle bench plus six bounded browser selectors at 47/47, 9/9, 13/13, 8/8, 7/7 and 7/7; uiux-perfection is always split into QWIZZ_UIUX_STEPS=a-d, e-g and h-j. Sixteen mutation rows reproduced their named red and returned green after exact restoration. Pushed plugin HEAD is 715474f; the accepted Settings-backup baseline remains 95 rows at ordered SHA-256 86100bbc…. Final verdict: ACCEPT-WITH-WAIVERS, zero blockers. The two missed pixel targets, eight reviewer judgments, owner-1 hazard and load-sensitive Wave 5 follow-up are rows below; the pre-existing endpoint-atomicity row remains separate. Evidence: /tmp/qwux/wave-all-final2.tap:267-268; agent://SliceE3:117-215; agent://FinalReviewer-2; agent://FinalAuditor3; amended receipt. releaseEligible: false.

Round F on 2026-09-14 supersedes those figures for the surfaces it touched, without rewriting the Sep-2 record: the shell contract is TAP 1..98 with zero failures, the browser contract is eight bounded chunks at 47/47, 9/9, 13/13, 7/7, 5/5, 5/5, 5/5 and 7/7 plus a post-chip re-gate at 13/13 and 7/7, and the Settings-backup reading after every gate is 94 rows with 10 owned by user 1 at option SHA-256 89877cf6…. Mirror HEAD is still 715474f and the tracked-modified count is now 49 rows. No human acceptance and no release eligibility were established. Evidence: UX repair round; harness contract update.

0. Completion classes

Every id in this ledger sits in exactly one class below. A class says what moves the row next, which is the only thing a reader needs before opening a section. It is not a status — a row keeps its own two-dimensional status cell — and it is not a priority.

  • shipped — installed and proved on the named bench evidence, or closed on its own measurement. Nothing here is released. The bench stays releaseEligible: false and the release owner carries source changes through the locked pipeline.
  • bench-actionable — real bench work with no missing authority and no missing decision.
  • owner-decidable — waits on a human choice. Baseline rows are restated with recommendations and measured costs on the batched sheet in 2026-08-31 corpus triage; the nine 2026-09-01 idea rows are grounded in the operator intake on the polish-drive receipt. No row moves on an inferred choice.
  • terminal-blocked — waits on an artifact a named authority must restore or supply. Never inferred and never synthesized from a generated or live artifact.
  • deferred — corpus replacement inbound — a corrected question corpus is being prepared and will replace the current set, so measuring the present one produces figures that are stale on arrival. This names an announced upstream event, not an absent authority, which is why it is not terminal-blocked. The 2026-08-31 drive baseline was 126 rows; the 2026-09-01 intake and review close added fifteen canonical ids. The original 2026-09-02 close added eleven bench-actionable ids: eight reviewer judgments, one owner-1 backup-cap hazard and two missed-metric rows. Its post-publication amendment adds UIUX-GATE-01 as shipped harness hardening and UIUX-FLAKE-01 as one bench-actionable diagnostic follow-up. Round F on 2026-09-14 then emptied those reviewer and metric rows out of bench-actionable: six UIUX-REV rows shipped on the bench, UIUX-REV-02 and UIUX-REV-06 closed on their own measurement as already resolved, and UIUX-METRIC-01 and UIUX-METRIC-02 closed by re-scoping to the round’s owned-metric set. It added seven owner-decidable ids — UIUX-P1 for the four retained P1 symptoms and UIUX-VIS-01 through UIUX-VIS-06 for the six new P2 critic findings — so ten rows changed class and seven are new. Phase G on 2026-09-14 adds eight ids: UIUX-SET-01, UIUX-SET-02, UIUX-SET-07 and UIUX-SET-08 arrived bench-actionable, and UIUX-SET-03 through UIUX-SET-06 are owner-decidable critic residuals. UIUX-SET-02 then moved to shipped the same day, when the operator approved the bounded JavaScript focus fix recorded in section 11 of the phase G receipt, so the census total is unchanged while shipped gains one and bench-actionable loses one. Current census: 169. TOUR-19’s rendered-verification closure is a split-disposition update, not a new id. Evidence: SET-07 amendment; gate reliability; UX repair round; Settings panel premium restyle.
classcountidsmeaning
shipped343.2.1, 3.2.5-3.2.8, 3.2.10-3.2.14, 3.2.17-3.2.20, 3.2.23, 3.2.25, 3.2.28-3.2.32, HARNESS-SETTINGS-CAS, UIUX-GATE-01, UIUX-REV-01 through UIUX-REV-08, UIUX-METRIC-01, UIUX-METRIC-02, UIUX-SET-02Code, site-content or bench-harness change landed with executable acceptance in its named receipt, or closed on its own measurement. UIUX-REV-02 and UIUX-REV-06 are the second kind: round F found both preconditions already gone and changed no byte. UIUX-SET-02 is the phase G focus fix, installed under an explicit operator approval that lifted the round’s JavaScript freeze for that one change. None of these is a plugin release.
bench-actionable143.2.2, 3.2.15, 3.2.24, 3.2.26-3.2.27, YAML-12, DEFERRED-S9-AUDIT, SETTINGS-ENDPOINT-CAS, HARNESS-EXTKILL, UIUX-BACKUP-01, UIUX-FLAKE-01, UIUX-SET-01, UIUX-SET-07, UIUX-SET-08The bench can act without a missing owner decision. Round F closed the ten 2026-09-02 reviewer and metric rows; what remains is maintenance, harness-safety, the owner-1 backup hazard, one diagnostic follow-up and three phase G residuals — one JavaScript item the freeze lift did not cover, one harness coverage gap and one documentation drift. None is a blocker on accepted HEAD 715474f.
owner-decidable61Sheet A: TOUR-03 · TOUR-09 · TOUR-13 · TOUR-14 · TOUR-15 · TOUR-24 — Sheet B: PW-01 · LANG-FRES · PL-06 · PROD-DEF-01 · PROD-IA-01 · PROD-PLAY-01 · PROD-SE-01 · PROD-WPUI-01 · PROD-REV-01 · PROD-XOUT-01 · PROD-ICON-01 · PROD-FT-01 · PROD-FT-02 · PROD-HELP-01 · PROD-AI-01 · UX-ANSUI-01 · FL-003 · 3.2.2 · 3.2.8 — Sheet C: PL-07 · DEBUG-01 · OPS-LOG-01 · OPS-BACKUP-01 · IMG-01 · OPS-ALERT-01 — Sheet D: TNDM-02 · TNDM-15 · TNDM-09R · TNDM-RAIL — Sheet E: 3.1.8 · ArchiveFolder — Sheet F: ResumeAndRecovery · TenStopAcceptance · SpeechSynchronization · SingleSignOnSomeday — 2026-09-01 intake: IDEA-DARK · IDEA-ICONS · IDEA-MODIFIERS · IDEA-INTERLANG · IDEA-IMGGEN · IDEA-MASHUP · IDEA-TRIVIA-PLUS · IDEA-STARTER · IDEA-INSPECTOR — 2026-09-14 round F: UIUX-P1 · UIUX-VIS-01 · UIUX-VIS-02 · UIUX-VIS-03 · UIUX-VIS-04 · UIUX-VIS-05 · UIUX-VIS-06 — 2026-09-14 phase G: UIUX-SET-03 · UIUX-SET-04 · UIUX-SET-05 · UIUX-SET-06
terminal-blocked49LEGAL-01 · LEGAL-02 · LEGAL-03 · UX-01 · PL-17 · PL-18 · REL-01 to REL-04 · T3-01 to T3-27 · FE-5 · BE-1 · BE-2 · BE-4 · BE-5 · BE-6 · BE-8 · BE-9 · W9-07 · 3.2.5 · EvidenceReconciliation · GLITCH-INTAKE
deferred — corpus replacement inbound113.2.3 · TOUR-21 · TOUR-22 · 3.1.2 · 3.1.3 · 3.1.4 · 3.1.5 · 3.1.6 · 3.1.7 · 3.1.9 · B002

The counts sum to 169: 34 shipped, 14 bench-actionable, 61 owner-decidable, 49 terminal-blocked and 11 deferred for the inbound corpus.

Gitea traceability

The plugin mirror remains the change-management system, not the release pipeline. The completion-drive and HOLD ranges are historical; final bench mirror HEAD after the post-publication SET-07 repair is pushed at 715474f. Browser-harness hardening remains bench-level and unmirrored. Every commit remains releaseEligible: false. Evidence: 715474f; agent://SliceA:1-66; agent://SliceE3:1-215.

issueledger rowstate
#13.2.1 CopyAndDeadEndsclosed — fixed
#23.2.3 ContentProofopen — deferred, corpus replacement inbound
#3FL-001 modal inert boundaryclosed — not reproduced; no code change
#4FL-002 portability polling and 409 continuityclosed — fixed by 464fb78; reload/ceiling lifecycle split to #10
#5FL-003 provider orderopen — owner-decidable and not live-probeable, because no OpenRouter key is configured on this bench
#63.2.7 ChoiceCardsRenderBareclosed 2026-08-30 — fixed
#7TOUR-01 question list overprints two columnsclosed — fixed
#8TOUR-23 duplicate Advanced panelclosed — fixed by corrected 33989f9
#9HOLD remediation F1–F8closed — commits 464fb78, c8d7c10, dcdb1a2, d66f1a9, catalog 87a0e61, final gates and F1–F5 mutation evidence in the receipt
#10portability reload rehydration and ceiling resume/messagingopen — explicit lifecycle boundary, not a reopening of FL-002’s repaired scope
#11coordinating Drive: mega-polish & config-diet (2026-09-01) issueclosing — evidence complete in the S0a–S10 receipt; the receipt does not claim the issue-state mutation already executed
#12YAML-12 operator-defaults/settings-tiers front endopen — first-party YAML-subset twins proposed; JSON remains canonical; explicitly outside the 2026-09-01 drive
#13SETTINGS-ENDPOINT-CAS — Settings save endpoint reports a non-atomic revisionopen — pre-existing product defect surfaced by review, not introduced or fixed by the drive; out of drive scope
#14coordinating UI/UX perfection round (2026-09-02) issueissue-state mutation not claimed here — evidence is complete in the receipt; the orchestrator owns closing
#15UIUX-FLAKE-01 — Wave 5 load-sensitive aggregate residue assertionopen — add per-sub-condition diagnostics or otherwise settle the cause; standing gates require an idle bench

The 2026-08-31 completion drive opened issues #1 through #8. HOLD remediation used #9 and split portability lifecycle to #10. The 2026-09-01 drive used #11, with #12 and #13 remaining open follow-ups. The 2026-09-02 UI/UX round uses coordinating #14; its post-publication Wave 5 diagnostic follow-up is #15. Current evidence is in the amended 2026-09-02 receipt.

1. Owner decisions and product contracts

Nothing in this section is a defect. Owner-decidable rows are restated with recommendations and measured costs in Sheet B of 2026-08-31 corpus triage. LEGAL-01, LEGAL-02 and LEGAL-03 are not on that sheet: they need real legal data supplied by an authority, and inventing a plausible value would be worse than an open row. The content, taxonomy-content and census rows themselves live in §7 and remain deferred; that does not convert PROD-AI-01’s separate product-policy choice into a corpus measurement.

idlegacy idsitemblocked onstatusevidence
PW-01frontier PL-05 decision-required finding; can-do T2-06Decide whether subscribers own quiz publication lifecycle: subscriber_self_service or admin_only. The authenticated user surface exposes no unpublish or re-publish control today and direct editing is denied.Product owner plus UI owner, via intake row PW-01policy open · implementation absentowner decision intake; PL-05 sweep
LANG-FRESfrontier PL-02; can-do T2-01, T2-02; tasklist 3.1.8 FrEsShipOrDrop; backlog “UI language supports auto / en / de / fr / es”French and Spanish interface catalogs: ship them or drop the options. The pipeline offers a forced language only with a complete .mo plus nine named JSON catalogs, so fr and es stay dormant and an unrenderable stored choice degrades to auto. Stated once here because the five retired pages recorded four different statuses.Product ownerpolicy open · implementation deferredW8 SSOT capability pass; masterplan W3
PL-06can-do T2-03Enable the anonymous guest-AI substrate for public traffic. It is installed and safely off: zero guest budget, no pinned guest model or provider, no API key.Budget, rate ceiling, API key, exact model, exact provider and provider privacy capability all passing the readiness gatepolicy open for enablement inputs; substrate boundary already decided · implementation shipped, traffic blocked2026-08-02 F programme; appendix A below
LEGAL-01frontier PL-17Operator legal identity bundle: {operator_name, operator_address, operator_url, governing_jurisdiction}. Public legal drafts carry explicit [INSERT-YOUR-DATA-HERE] markers until it lands.Legal ownerpolicy open · implementation absentowner decision intake
LEGAL-02frontier PL-17Operator contact and support routes: {contact_email, contact_url, contact_phone?, incident_contact_url?}.Legal ownerpolicy open · implementation absentowner decision intake
LEGAL-03frontier PL-17Operator data-retention policy: {retention_owner, retention_statement_url, data_subject_request_process}.Legal or compliance ownerpolicy open · implementation absentowner decision intake
PROD-DEF-01backlog:54Print and settings defaults: the remaining “alignment” and “single-row” language in the original ask maps to no defined control or target policy. Date, page numbers, question count and editor helper copy already default off with the one-column layout.Product owner naming the control and the target policypolicy open · implementation partialbacklog history records the 2026-07-30 baseline
PROD-IA-01backlog:65”One clear control per idea” on the dashboard and admin shell. The native dashboard, ordered admin entry and the 24 px target floor are delivered; the consolidation itself has no accepted information architecture and no measurable completion rule.Accepted target IA — overlaps 3.2.2 SettingsIaCutoverpolicy open · implementation partialadmin IA strategy
PROD-PLAY-01backlog:84A distinct “test mode” beyond the delivered public play flow. The standalone play flow is implemented and browser-verified through completion; no behaviour or audience is defined for anything past it.Product owner defining behaviour and audiencepolicy open · implementation absentbacklog history
PROD-SE-01backlog:92Site-editor-editable design and print templates. The quizwizz pattern category and five patterns are registered; the server-rendered PDF path is deliberately outside the Site Editor.Architecture and product decision on how far editable ownership extendspolicy open · implementation partialbacklog history
PROD-WPUI-01backlog:107Adopt the WordPress component library, font and icon language instead of the remaining bespoke controls and inline Lucide-style SVG. Admin pages already use the qwizz-admin scope, the wp-admin font stack and active admin colour tokens.An accepted migration boundarypolicy open · implementation partialbacklog history
PROD-REV-01backlog:110Reduce answer review to a small hover or focus tooltip. W10-07 moved the full review out of the disclosure with a measured 28 px result gap; the narrower tooltip design is unimplemented.Accepted target interactionpolicy open · implementation absentbacklog history W10-07 row
PROD-XOUT-01backlog:111Redesign the crossing-out affordances across builder, player and print. Print answer markers are already configurable as circle, square or none.Accepted target interaction across all three surfacespolicy open · implementation partialbacklog history
PROD-ICON-01backlog:112Replace the remaining toggles with iconized equivalents. The new segmented presentation controls are iconized; “remaining toggles” names no specific binary controls.A named control set, with accessible names preservedpolicy open · implementation partialbacklog history
PROD-FT-01backlog:150Full allowed option set inline in “Fine-tune your printable quiz”. Title, question and choice editing, reorder, replace, duplicate, remove, add, undo, redo, cancel and Print are all confirmed; no accepted definition of “full allowed option set” exists for that modal.Product owner defining the option setpolicy open · implementation partialbacklog history
PROD-FT-02backlog:152Per-question extra distractors, hot-swappable. Fine-tune can add and remove choices and replace a whole question, but cannot swap one distractor. Generation source, correctness rules and per-question limits are undefined.Product owner defining source, correctness rules and limitspolicy open · implementation absentbacklog history
PROD-HELP-01backlog:158Fuse the redundant #help settings content into the compact dashboard help affordance. Source deliberately retains both; which audience and guidance survives is an IA decision, and no content may be deleted as a defect fix.Information-architecture decisionpolicy open · implementation absentbacklog history
PROD-AI-01backlog:165A front-end conversational wizard that generates quizzes from natural language. Current source provides bounded admin-side AI generation, not a public chat bubble.Product and security decision on audience, provider disclosure, abuse controls, privacy policy and failure behaviourpolicy open · implementation absentbacklog history; appendix A below
UX-ANSUI-01tasklist 3.2.11 residue; UX-ANS-01 follow-onThe Answers operator UI split. D005 settled precedence only: the collapsed switch still writes both bits, and player timing and the PDF sheet are not separately exposed on expand.Product owner plus UI owner on the expanded control shapepolicy decided — precedence settled by D005 · implementation absentAnswer visibility policy — D005

2. Public launch and operations

Public launch is NO-GO. Every row here keeps its distinct owner-intake id so a single answer closes a single row. Five of the nine are owner-decidable and sit in Sheet C of 2026-08-31 corpus triage, with PL-07 as their aggregate — it needs no separate answer and closes when they land. UX-01, PL-17 and PL-18 are deliberately absent from that sheet: they cannot move until LEGAL-01, LEGAL-02 and LEGAL-03 supply real legal data, so they are terminal-blocked rather than decidable.

idlegacy idsitemblocked onstatusevidence
UX-01frontier UX-01Public shell completion. The root route has a QuizWizz landing page with verified Builder and account destinations; Privacy, Terms and Operator/Contact drafts are published and footer-linked with one page-title h1 and no horizontal overflow at desktop or 390 px. Every operator-specific placeholder must be replaced and the drafts legally reviewed before launch readiness can be claimed.LEGAL-01, LEGAL-02, LEGAL-03policy open · implementation partial2026-08-17 launch readiness
PL-07can-do T2-04External-data and maintenance runbook. The runbook records the current posture and every local operational gate is green; only the owner-supplied choices remain.OPS-LOG-01, OPS-ALERT-01, OPS-BACKUP-01, IMG-01, DEBUG-01policy open · implementation shipped for the local tierService Operations; owner decision intake
PL-12 / OPS-LOG-01can-do T4-01Access-log review governance. nginx-only heavy-route throttling at 2r/s, burst=10, 429 and daily logs on 14 rotations are implemented; human review cadence, owner, escalation destination, minimization procedure and evidence destination are not.Operator or SRE owner, intake row OPS-LOG-01policy open · implementation shipped for the control, absent for the governanceService Operations; owner decision intake
PL-13 / OPS-BACKUP-01can-do T4-02Off-host backup tier. The local backup artifact and the 4/4 restore drill with scratch cleanup are closed; destination, credential reference, transfer encryption, retention immutability, schedule, restore owner and one remote restore proof are not.SRE or infra owner, intake row OPS-BACKUP-01policy open · implementation absent off-host2026-08-17 launch readiness
PL-14 / IMG-01can-do T4-03Image pinning and rollback policy for wordpress, wordpress:cli and mariadb. The moving-tag posture is documented; pinning, pre-update backup rule, rollback targets, rollback age limit, cadence, window, approver and operator are not. Do not invent digests or rollback targets.SRE or platform owner, intake row IMG-01policy open · implementation absentowner decision intake
PL-15 / OPS-ALERT-01can-do T4-04Health alert channel. Local health gates are green at 7/7; alert destination, transport, credentials, severity routing and a proven test recipient are not supplied.SRE owner, intake row OPS-ALERT-01policy open · implementation absent2026-08-17 launch readiness
DEBUG-01frontier DEBUG-01Public-launch debug logging posture: keep_bench_debug_logging or disable_wp_debug_logging. Public debug-log exposure is already denied and the Option F log delta contained no QuizWizz fatal or error.Operator or SRE owner, intake row DEBUG-01policy open · implementation shipped for the bench postureowner decision intake
PL-17frontier PL-17Public legal drafts are comprehensive and live, but every legal and operator value in them is still a placeholder.LEGAL-01, LEGAL-02, LEGAL-03policy open · implementation partial2026-08-17 launch readiness
PL-18frontier PL-18The Terms draft states best-effort service with no SLA. Effective date, operator identity, jurisdiction and legal review remain owner-supplied.LEGAL-01, LEGAL-03policy open · implementation partialowner decision intake

3. Canonical release and handoff

WRDP is the QuizWizz SSOT archive, and the named release inputs are absent from the archive itself. That absence is the work: never infer, synthesize or restore an input from a generated or live artifact, and never invent approvals, digests, lockfiles, dependency records, history or provenance to fill a gap. Paths below are relative to wp/wp-content/plugins/quizwizz/ unless stated otherwise.

All forty rows in this section are terminal-blocked, and each row is already its own intake spec: the item cell names the exact artifact, the blocked on cell names the authority or the upstream row that must supply it, and no row carries a synthesized value. None of them appears on the owner-decision sheet, because an artifact that must be restored is not a choice that can be made. Reverified 2026-08-31 from /home/loca/dev/wrdp: tools, composer.lock, .github, tests, src and package-lock.json all printed absent, while build/ and vendor/ are present as always — see the receipt under the masterplan resolution ledger.

3a. Release-owner decisions

idlegacy idsitemblocked onstatusevidence
REL-01frontier PL-08; can-do T3-25Canonical repository identity: {canonical_repo_url, immutable_commit_sha, protected_ci_workflow_url}. Unblocks source lineage, change review and commit-bound release provenance.Canonical release ownerpolicy open · implementation absentowner decision intake
REL-02frontier PL-08Locked release-toolchain declaration: {toolchain_json_path, package_lock_checksum, composer_lock_checksum, node_bin_ref, npm_ref}. Unblocks the BUILDING.md locked-toolchain path and any reproducible-build evidence.Build or release ownerpolicy open · implementation absentowner decision intake
REL-03frontier PL-08Quality, compatibility and provenance gate proofs: {ci_results, compatibility_matrix, sbom_ref, provenance_ref}. Unblocks BUILDING.md:64-91 and the source-provenance requirements.Build or release owner plus QA ownerpolicy open · implementation absentowner decision intake
REL-04frontier PL-08Signing and release comparison authority: {signing_public_key_ref, sign_and_verify_command, release_compare_ref}. Unblocks the protected signing and comparison gate at BUILDING.md:106-117.Release or security ownerpolicy open · implementation absentowner decision intake

3b. Absent release inputs

Twenty-seven atomic artifacts. Each row names what its restoration unblocks and which consumer rows in 3c it releases, because collapsing them into one “release inputs” row destroys the only actionable dependency information the archive has. Every row is blocked on the canonical release owner and every status is identical: policy decided — restore, never synthesize · implementation absent.

idlegacy idsitem — unblocks → consumersblocked onstatusevidence
T3-01can-do T3-01package.json — scripts, package constraints and the block/icon build entry points → FE-5, W9-07REL-02policy decided · implementation absentBUILDING.md:7-12,88-91
T3-02can-do T3-02package-lock.json — deterministic dependency installation and reproducible Node-backed builds; do not synthesize a lock from guesses → FE-5, W9-07REL-02policy decided · implementation absentBUILDING.md:7-12,88-91
T3-03can-do T3-03composer.json — declared PHP dependency constraints, autoload intent and package toolingREL-02policy decided · implementation absentBUILDING.md:29-35
T3-04can-do T3-04composer.lock — deterministic PHP dependency reconstruction and review; do not infer it from vendor/ → BE-1, BE-9, FE-5REL-02policy decided · implementation absentBUILDING.md:7-12,37-45
T3-05can-do T3-05tools/quality-gate.sh — the aggregate quality and release-eligibility check → BE-4, BE-5, BE-6, FE-5REL-03policy decided · implementation absentBUILDING.md:14-35
T3-06can-do T3-06tools/build-release.py — production of the policy-defined install artifact → REL-03REL-02policy decided · implementation absentBUILDING.md:64-91; SOURCE-PROVENANCE.md:23-27
T3-07can-do T3-07tools/build-source-archive.py — a reviewable source artifact assembled under explicit policyREL-02policy decided · implementation absentBUILDING.md:93-104
T3-08can-do T3-08tools/verify-release.sh — repeatable structural and integrity checks against a built release → REL-04REL-02policy decided · implementation absentBUILDING.md:69-76,108-111
T3-09can-do T3-09tools/sign-release.sh — policy-controlled signature generation once the protected key exists → REL-04REL-04, T3-27policy decided · implementation absentBUILDING.md:106-117
T3-10can-do T3-10tools/compare-releases.py — reproducibility and drift comparison between independently built artifacts → REL-04REL-04policy decided · implementation absentBUILDING.md:106-117
T3-11can-do T3-11tools/scope-dependencies.php — collision and scoping analysis, and the intended transformed dependency build → BE-1REL-02policy decided · implementation absentBUILDING.md:37-52; SOURCE-PROVENANCE.md:23-27
T3-12can-do T3-12tools/toolchain.json — reproducible selection of build tools and versions; do not invent pins → REL-02, W9-07REL-02policy decided · implementation absentBUILDING.md:7-12
T3-13can-do T3-13tools/dependency-policy.json — enforceable allow, deny and review rules for shipped dependencies → BE-9REL-02policy decided · implementation absentBUILDING.md:37-45
T3-14can-do T3-14tools/scoping-policy.json — deterministic namespace and scoping decisions → BE-1REL-02policy decided · implementation absentBUILDING.md:37-45
T3-15can-do T3-15tools/release-policy.json — machine-checkable release contents and authorization gates → BE-8REL-03policy decided · implementation absentBUILDING.md:54-57,78-91
T3-16can-do T3-16tools/source-archive-policy.json — machine-checkable inclusion and exclusion rules for the source artifactREL-03policy decided · implementation absentBUILDING.md:93-104
T3-17can-do T3-17tools/build-icons.mjs — reproducible regeneration of the shipped icon assetsREL-02policy decided · implementation absentprovenance/assets.json:18-29,32-42; SOURCE-PROVENANCE.md:18-21
T3-18can-do T3-18tools/lucide-icons.json — reviewable, reproducible icon selection; do not infer a manifest from outputREL-02policy decided · implementation absentprovenance/assets.json:18-29; SOURCE-PROVENANCE.md:18-21
T3-19can-do T3-19tests/ — the absent runtime regression gate → BE-4, BE-5, BE-6REL-03policy decided · implementation absentBUILDING.md:29-35,64-91
T3-20can-do T3-20phpunit.xml — the PHP test bootstrap, suites and execution contractREL-03policy decided · implementation absentBUILDING.md:29-35
T3-21can-do T3-21phpcs.xml — the coding-standard gate and its exclusionsREL-03policy decided · implementation absentBUILDING.md:29-35
T3-22can-do T3-22.github/ workflow — automated execution of the restored build, test and release gates → BE-2, BE-8REL-01, REL-03policy decided · implementation absentSOURCE-PROVENANCE.md:7-16; BUILDING.md:64-91
T3-23can-do T3-23src/ — maintainable, reproducible Gutenberg rebuilds including A71, A73 and A77 without the sanctioned companion override; readable build/ is not a substitute → W9-07REL-02policy decided · implementation absentBUILDING.md:3-12,93-104; build/quiz/index.js:1-9,43-337,339
T3-24can-do T3-24vendor/composer/installed.json — reconstruction and audit of the installed dependency graph; only the Composer runtime autoload files exist, and vendor/ is never hand-editedREL-02policy decided · implementation absentBUILDING.md:37-45; SOURCE-PROVENANCE.md:23-27
T3-25can-do T3-25Git history and an immutable commit — source lineage, change review and commit-bound release provenance; .git/ is absent from /home/loca/dev/wrdp and no commit id may be fabricated → REL-01REL-01policy decided · implementation absentSOURCE-PROVENANCE.md:3-16,23-27
T3-26can-do T3-26provenance/* approval objects — documented license and source approval, and release authorization. Approval keys are absent from both provenance objects and four license_compatibility_review values are null; provenance is never hand-edited → REL-03REL-03policy decided · implementation absentprovenance/assets.json:12,29,42,63; SOURCE-PROVENANCE.md:18-21
T3-27can-do T3-27A protected signing key, supplied through the release policy’s security boundary — artifact signing after every prior gate passes; no key or signature may be invented → REL-04REL-04policy decided · implementation absentBUILDING.md:106-117

3c. Consumers blocked by those inputs

These nine rows are the reason 3b matters. Each is real source or integration work that cannot start until its named inputs return.

idlegacy idsitemblocked onstatusevidence
FE-5masterplan resolution ledgerStudio shell and theme integration, gated on the release tooling absent from this archive rather than on any external repository.T3-01, T3-02, T3-04, T3-05policy decided · implementation absentmasterplan resolution ledger
BE-1masterplan resolution ledgermPDF and vendor pruning.T3-04, T3-11, T3-14policy decided · implementation absentmasterplan resolution ledger
BE-2masterplan resolution ledgerPHP floor and compatibility claims, which require CI configuration.T3-22policy decided · implementation absentmasterplan resolution ledger
BE-4masterplan resolution ledgerGenerateController decomposition — source work gated on the absent quality gate and tests.T3-05, T3-19policy decided · implementation absentmasterplan resolution ledger
BE-5masterplan resolution ledgerPdfGenerator injection, tied to BE-4 and the same absent gate.BE-4, T3-05, T3-19policy decided · implementation absentmasterplan resolution ledger
BE-6masterplan resolution ledgerOpenRouter settle and release deduplication — refactor work gated on the absent tests and quality gate.T3-05, T3-19policy decided · implementation absentmasterplan resolution ledger
BE-8masterplan resolution ledgerTested up to must come from compatibility CI and release metadata, not from an assertion.T3-15, T3-22policy decided · implementation absentmasterplan resolution ledger
BE-9masterplan resolution ledgerrandom_compat removal.T3-04, T3-13policy decided · implementation absentmasterplan resolution ledger
W9-07masterplan resolution ledger; backlog “Wizard-hat identity replaces the wand”The sole retained compiled-block wand fallback inside build/quiz/index.js. wizard-hat is already canonical for the default banner icon and the settings and builder brand mark; build/ must not be hand-edited.T3-23, T3-01, T3-02, T3-12policy decided · implementation absentmasterplan resolution ledger

4. Plugin product, UI and information architecture

Carried over from the retired task log’s 3.2 cluster and re-measured on 2026-08-31 unless a row says otherwise.

Provenance: every row here was recorded by the retired task log and last measured in the 2026-08-18 session until the 2026-08-31 completion drive re-measured the cluster. 3.2.7 closed on 2026-08-30; 3.2.1, FL-001 and FL-002 closed on 2026-08-31; 3.2.3 is deferred behind the inbound corpus; 3.2.5 turned out to be blocked on an artifact that does not exist; and 3.2.2, 3.2.8 and FL-003 are owner-decidable in Sheet B of 2026-08-31 corpus triage. Where a 2026-08-18 figure survives below it is marked as dated rather than current.

idlegacy idsitemblocked onstatusevidence
3.2.1 CopyAndDeadEndstasklist 3.2.1; loca/quizwizz#1Settings copy and dead ends, shipped as four sub-rows and two retractions. 3.2.1-CEIL — the repeated … site ceiling labels collapse into one shared explanation, declared at includes/Admin/views/settings-page.php:378-379, rendered once at :388 and referenced by aria-describedby from eight controls; source emitted eight of those labels, not the ten this row claimed, four of them generated from a single %s completion action site ceiling format string. 3.2.1-SCOPE — every repeated state word is qualified by its row object through data-exposure-label at :49, :65 and :69. 3.2.1-VIEWS — the Subjects taxonomy screen carries its own supply views, registered at includes/Subject/SubjectSupplyFilter.php:24. 3.2.1-RUNS — the dashboard activity segment names each number’s event basis at includes/Admin/AdminStatistics.php:745, :752, :757 and :762 instead of showing finished-play count beside share count. Two claims retracted on measurement: Aus ×3 was never the number, because the generic hidden-state control is emitted nine times from one Off button at settings-page.php:44 and twelve controls carried the bare word, ten of them as accessible names; and the unnamed Data submit does not exist, because all 22 rendered submits in the Data section carry a non-empty visible value or an explicit accessible name.nothing — closed 2026-08-31policy decided · implementation shipped — closed 2026-08-312026-08-31 corpus repair slices A and B, commits 92ea358 and 6a28df6, gate 1..93 failures=0; retractions on 2026-08-31 corpus triage; original measurement, retired task log 3.2.1 on the live admin 2026-08-18
3.2.2 SettingsIaCutovertasklist 3.2.2; overlaps PROD-IA-01Execute the admin IA waves: copy and grouping, real panes, contextual entry points, polish. Target 12 or fewer visible controls and 80 or fewer helper words per pane at 1600×1000 and 390×844. Constraint: never change a control’s data-path, because both the save payload and the no-script fallback key on it. Measured target grouping from the live DOM on 2026-08-18: 139 visible controls across nine sections regroup into Defaults 19, Content 29, Play 15, Share and Print 49, Services 17, Data 10. That grouping figure is dated and was not re-measured on 2026-08-31.Owner acceptance of the grouping, per 3.2.8 — Sheet Bpolicy open · implementation absentadmin IA strategy; restated with a recommendation and a cost in Sheet B of 2026-08-31 corpus triage
3.2.3 ContentProoftasklist 3.2.3; loca/quizwizz#2Publish quiz 1556, play it end to end, print the PDF, recheck readiness and under-supplied counts, then run ./scripts/quizwizz-probe.sh --wave all. Done when the result is recorded with the observed counts. Its acceptance is a set of corpus counts, so running it against a corpus that is about to be replaced would record figures that are stale the moment the replacement lands.the inbound corpus replacementpolicy decided · implementation deferred — corpus replacement inboundretired task log 3.2.3; the gate command is on the probe harness; deferral recorded on 2026-08-31 corpus triage. Gitea loca/quizwizz#2 stays open, relabelled deferred
FL-001tasklist 3.2.4; loca/quizwizz#3Incomplete modal inert boundary in the subjects icon picker — refuted, not fixed. The premise was that a request path leaves the picker focus-trapped and makes aria-modal="true" untruthful. assets/js/qwizz-admin-subjects.js contains no HTTP or Promise request path at all: no fetch, no XMLHttpRequest, no apiFetch, only two requestAnimationFrame focus deferrals at :42 and :128. The picker already saves and sets the background’s inert and aria-hidden at :121-125, restores exactly what it saved at :108-113 and returns focus to the trigger at :114; open and close inside one frame kept focus on the trigger and hid the panel. The guard drafted against it would have changed a source marker and no observable behaviour, so its assertion was removed as tautological rather than kept green. Nothing was installed.nothing — closed 2026-08-31 as not reproducedpolicy decided · implementation absent — refuted on measurement, no change required2026-08-31 corpus repair; 2026-08-31 corpus triage. Gitea loca/quizwizz#3 closed as not reproduced
FL-002tasklist 3.2.4; loca/quizwizz#4Bound portability polling and preserve continuity when a second export or import returns the active job.reload rehydration and ceiling-resume messaging split to issue #10policy decided · implementation shipped — repaired scope closedPolling is bounded and cancellable at assets/js/qwizz-admin-settings.js:1788-1844; valid 409 error.data.job_id values are adopted and polling restarts at :1845-1850. The browser gate independently requires the second export response to be HTTP 409 and the active status to resume at scripts/quizwizz-browser-smoke.js:831-876; its bench-level cleanup then requires cancel HTTP success, validates the exact UUID, deletes only that UUID in cancelled / result_file_id IS NULL state and exact-queries absence or fails (:124-140,877-900). The superseding 2026-08-31T16:40:11.214Z replay passed 45/45, named cleanup UUID 2b710ef4-938c-44c7-80b3-1bf4d2a7c282, and was followed immediately by table count 0. Commit 464fb78; HOLD-remediation receipt. The cleanup correction is outside the plugin mirror and does not change FL-002’s repaired product scope: issue #4 remains closed, and the lifecycle remainder remains issue #10.
FL-003tasklist 3.2.4; loca/quizwizz#5Provider order: accept unordered provider routing for signed-in traffic, or pin it the way guest routing is pinned. Observed behaviour cannot settle it — guest routing builds a deterministic single-item order with fallbacks refused (includes/Ai/OpenRouterClient.php:113-131) while signed-in routing sends no order at all (:133-142), and both are consistent with either intent. The live probe the row asked for cannot be run on this bench: the key lookup reads an environment variable and then the OPENROUTER_API_KEY constant, and a bootstrapped probe returned env_getenv:FALSE and const_defined:NO with no OPENROUTER entry in the WordPress config, the environment file or the compose file. A probe would additionally need configuration changes and would write AiAudit rows.Owner — Sheet B. Not a probe result; no OpenRouter key exists on this benchpolicy open · implementation absentretired task log 3.2.4; the reason it was not probed is recorded on 2026-08-31 corpus triage. Gitea loca/quizwizz#5 stays open
3.2.5 WalkNotesToWikitasklist 3.2.5Distil the surviving issues from the 2026-08-17 walk into this ledger and drop the retracted ones. Blocked on an artifact that does not exist on disk. The vault, the evidence tree, the scripts tree and the logs were searched on 2026-08-31 for walk artifacts and for the event identifiers 87 to 94, and the only trace found was this row’s own abstract description of them; the only capture logs present are the 2026-08-20 and 2026-08-25 UI-tour captures, which are not a 94-event append-only walk ledger. A store cannot be inferred from a row that describes it, so nothing was distilled. The three retractions this row already names — no default PDF theme (theme_default = cyber), eleven unlabelled number inputs (0 of 140 controls unnamed), inert settings tabs (intentional scroll-spy) — stay visible where they were recorded.Whoever holds the walk-event store must produce it. Terminal-blocked; reclassified from documentation work on 2026-08-31 measurementpolicy decided · implementation absent — terminal-blocked on the absent walk-event storeretired task log 3.2.5; the search and its result are on 2026-08-31 corpus triage
3.2.7 ChoiceCardsRenderBaretasklist 3.2.7; loca/quizwizz#6fieldset.qwizz-choice-cards[data-path="presentation.prepend_style"] showed its native radio inputs — they computed clip-path: none and static positioning, unlike the .qwizz-segment inputs at clip-path: inset(50%) — and its span computed padding: 0px with a transparent background, so the intended card appearance never rendered. Production behaviour, not a capture artifact. Closed 2026-08-30 on its own measured evidence: the class had no base CSS rule at mirror baseline 7ec58f4, only two co-tenant slots at assets/css/qwizz-admin-settings-layout.css:219,233; the cards, their radio hiding and their selected, hover, focus and forced-colors states are now defined at :243-305 and :971-985. Verified by computed style on the live screen, a matched mutation pair, 1..14, the then-standing 1..76, and a 30/30 browser smoke. Bench-local, releaseEligible: false.nothing — closed 2026-08-30policy decided · implementation shipped — closed 2026-08-302026-08-30 choice-card prepend fix; original measurement, retired task log 3.2.7 on the live settings screen 2026-08-18
3.2.8 IaMockupAsScratchpadtasklist 3.2.8A living bench-external mockup of the settings screen exists: the deployed DOM captured verbatim with its twelve stylesheets mirrored, all nine panels reparented into the six proposed groups, all 139 controls and all 82 data-path attributes preserved, and exactly one control added — its own search field. It carries a layout toggle, a “show what moved” provenance switch, jump chips with live counts, and type-anywhere search with no permanent search box. Agree the layout on the mockup before any plugin change.Owner accepting a grouping, at which point each accepted change becomes its own row with the no-data-path-change constraint — Sheet Bpolicy open · implementation absentretired task log 3.2.8; restated with a recommendation and a cost in Sheet B of 2026-08-31 corpus triage

5. Open UI findings from the current visual corpus

The 2026-08-25 recapture raised these findings. The 2026-08-31 completion drive re-measured each one before deciding whether it was a defect, a design choice, a site-content task, or corpus-dependent work. Rows close only on their own evidence; a nearby change never counts by association.

Split rows stay split

TOUR-15’s literal Wizzard misspelling is fixed, but the canonical product name is still an owner decision. TOUR-24b’s pre-hydration theme is fixed, but TOUR-24a’s empty-card composition is still an owner decision. Neither partial repair closes the other half.

idlegacy idsitemblocked onstatusevidence
TOUR-012026-08-25 corpus finding 1; loca/quizwizz#7The question list overprinted two columns. At 1280 px after 92ea358, all 20 source badges ended at or before the Updated column and document width was 1265 px.nothing — closed 2026-08-31policy decided · implementation shipped — closed2026-08-31 corpus repair, slice A; original UI tour:102
TOUR-022026-08-25 corpus finding 2; loca/quizwizz#8The empty-state block now renders in tbody, is absent from top tablenav, and no longer paints over thead.nothing — closed 2026-08-31policy decided · implementation shipped — closed2026-08-31 corpus repair, slice A, 92ea358; original UI tour:103
TOUR-032026-08-25 corpus finding 3Active-filter pills correctly disclose dashboard deep-link state; the missing product choice is whether question-list readiness and pool controls should be exposed.Owner — Sheet Apolicy open · implementation absentSheet A of 2026-08-31 corpus triage; predicates and renderer at includes/Admin/ListTables.php:235-312,451-464
TOUR-042026-08-25 corpus finding 4Editor labels and helper descriptions now occupy separate block lines with a measured 5 px gap.nothing — closed 2026-08-31policy decided · implementation shipped — closed2026-08-31 corpus repair, slice F, b3ee3df
TOUR-052026-08-25 corpus finding 5All four answer flags are visible at rest; selection is emphasis, not visibility.nothing — closed 2026-08-31policy decided · implementation shipped — closed2026-08-31 corpus repair, slice F, b3ee3df
TOUR-062026-08-25 corpus finding 6Type-specific helper copy now follows the selected question type and updates when the type changes.nothing — closed 2026-08-31policy decided · implementation shipped — closed2026-08-31 corpus repair, slice F, b3ee3df
TOUR-072026-08-25 corpus finding 7Settings sticky-bar occlusion was not reproduced; a separate JS geometry defect was later repaired.nothing — reported visual defect closed as not reproducedpolicy decided · implementation absent — refuted on measurement, no change requiredThe cache-disabled run measured all nine headings clear at desktop and mobile, so commits ebf4f2c and f02cba9 remain source-debt consolidation rather than a visual-defect fix. The later HOLD review separately proved the NaN fallback defect; c8d7c10 reads resolved scrollMarginTop, recreates the observer on resize, and the mobile smoke requires 276px plus target top at least 270 (assets/js/qwizz-admin-settings.js:1158-1179; scripts/quizwizz-browser-smoke.js:903-933; HOLD-remediation receipt). That separate repair is bench-only and releaseEligible: false.
TOUR-082026-08-25 corpus finding 8Global Settings search should keep every direct control hit, add at most one fallback per section, and activate the selected section.direct-control-hit preservation still needs browser acceptancepolicy decided · implementation partialCommit dcdb1a2 emits one fallback per deduplicated section while leaving direct hits unchanged in source (assets/js/qwizz-admin-settings.js:1305-1343). The cache-disabled smoke searches print, requires four unique section rows, selects PDF and requires workspace/target qw-pdf (scripts/quizwizz-browser-smoke.js:935-958; HOLD-remediation receipt). This replaces the old total-wide <=1 assertion. The smoke does not separately prove every direct control hit, so that acceptance clause remains open.
TOUR-092026-08-25 corpus finding 9The card treatment was deliberately added by the 3.2.7 repair six days earlier. Reversing it would regress that measured contract.Owner — Sheet A recommendation is keep the cards and close this as supersededpolicy open · implementation absent — the 3.2.7 card treatment is deliberately unchangedSheet A of 2026-08-31 corpus triage; card rules assets/css/qwizz-admin-settings-layout.css:243-305
TOUR-102026-08-25 corpus finding 10At narrow viewports all nine settings sections remain reachable, question rows retain their index, and the Subjects table retains its usable-question count while description and slug stay hidden.nothing — closed 2026-08-31policy decided · implementation shipped — closed2026-08-31 corpus repair, slices E and F, f02cba9 and b3ee3df
TOUR-112026-08-25 corpus finding 11Supply copy now uses _n() and renders has 1 usable question versus has 2 usable questions.nothing — closed 2026-08-31policy decided · implementation shipped — closed2026-08-31 corpus repair, slice A, 92ea358; includes/Subject/SubjectSupplyFilter.php:144-151
TOUR-122026-08-25 corpus finding 12The Subjects screen now presents the same usable-count authority the supply filter uses; the native relationship count is labelled Published items, not usable questions.nothing — closed 2026-08-31policy decided · implementation shipped — closed2026-08-31 corpus repair, slice A, 92ea358
TOUR-132026-08-25 corpus finding 13The German archive search-miss string is emitted by the Twenty Twenty-Five theme, not QuizWizz.Owner/site content — Sheet Apolicy open · implementation absent — theme-owned, deliberately not overriddenSheet A of 2026-08-31 corpus triage; wp/wp-content/themes/twentytwentyfive/templates/archive.html:1-11
TOUR-142026-08-25 corpus finding 14Whole search-result bodies and the foreign [ays_quiz] shortcode come from the Twenty Twenty-Five query-loop pattern, not QuizWizz.Owner/site content — Sheet Apolicy open · implementation absent — theme-owned, deliberately not overriddenSheet A of 2026-08-31 corpus triage; wp/wp-content/themes/twentytwentyfive/templates/search.html:1-12, patterns/template-query-loop.php:17-25
TOUR-152026-08-25 corpus finding 15Split disposition. The literal Wizzard was replaced by provisional QuizWizz in 6a28df6; no other name variant changed. Choosing one canonical product name remains a design decision.Owner for canonical name — Sheet Apolicy open · implementation partial — misspelling repair shipped, canonical naming absent2026-08-31 corpus repair, slice B; Sheet A of corpus triage
TOUR-162026-08-25 corpus finding 16The uninstall panel carries data-qw-danger=\"off\" with a neutral border when retention is safe and on with the destructive token otherwise.nothing — closed 2026-08-31policy decided · implementation shipped — closed2026-08-31 corpus repair, slices B and E, 6a28df6 and f02cba9
TOUR-172026-08-25 corpus finding 17Corrected finding: the four portability controls already had accessible names; they lacked visible labels. The existing names now appear visibly beside their icons.nothing — closed 2026-08-31policy decided · implementation shipped — closed2026-08-31 corpus repair, slice B, 6a28df6
TOUR-182026-08-25 corpus finding 18The question-row remove action now computes a destructive rest colour while retaining its 44 px target and unchanged action contract.nothing — closed 2026-08-31policy decided · implementation shipped — closed2026-08-31 corpus repair, slice F, b3ee3df
TOUR-192026-08-25 corpus finding 19Per-question actions are now intentionally hidden at rest and exposed on hover or focus; a rendered fine-tune fixture proves one resting control, tools opacity 0 at rest and 1 on hover. Mutation row 10 forces opacity 1 and reddens only that contract.nothing — rendered acceptance closed 2026-09-02policy decided · implementation shipped — browser acceptance closed; supersedes the 2026-08-31 fixture limitationUX receipt; agent://SliceE2:96-105; local://qwizz-mutation-matrix.md:95-103
TOUR-202026-08-25 corpus finding 20The standalone locked-embed CTA now receives the shared button chrome in source. The bench has no locked-quiz fixture, so rendered proof remains outstanding rather than inferred.Create or locate a locked-quiz fixture, then exercise the standalone routepolicy decided · implementation shipped in source — browser acceptance open, no locked-quiz fixture2026-08-31 corpus repair, slice G, 2327946; fixture limitation on corpus triage
TOUR-212026-08-25 corpus finding 21Test residue on an operator surface, including the QW SVG Probe 4lHqFtjO subject tile. Corpus-dependent cleanup is intentionally not measured against the set being replaced.inbound corpus replacementpolicy decided · implementation deferred — corpus replacement inbound2026-08-31 corpus triage; original UI tour:122
TOUR-222026-08-25 corpus finding 22Duplicate subject names on different slugs. Taxonomy-content cleanup is intentionally not measured against the set being replaced.inbound corpus replacementpolicy decided · implementation deferred — corpus replacement inbound2026-08-31 corpus triage; original UI tour:123
TOUR-232026-08-25 corpus finding 23The craft inspector now has exactly one Advanced panel: craft controls were merged into the existing plugin panel and the injected duplicate removed. Commit 8494823 is the rejected first implementation; accepted commit 33989f9 supersedes it.nothing — closed 2026-08-31policy decided · implementation shipped — closed2026-08-31 corpus repair, accepted slice H proof after 33989f9
TOUR-242026-08-25 corpus finding 24Split disposition. 24a: the card still leaves roughly 45–55% empty below the answers and its composition is an owner design decision. 24b: the server shell now emits the stored data-theme before hydration, so theme identity no longer waits on player JS; a dark-first-paint browser case remains unobserved because the bench has no dark quiz fixture.Owner for 24a — Sheet A; dark fixture for the final 24b visual casepolicy open for 24a · implementation partial — 24b shell theme shipped in 2327946, 24a composition undecided2026-08-31 corpus repair, slice G; Sheet A and fixture limitation on corpus triage
TOUR-252026-08-25 corpus finding 25An invalid share-play token serves the front pagenothing — closed by Cluster 5 on 2026-08-27policy decided · implementation shipped — closed 2026-08-272026-08-25 UI tour:126; Cluster 5:20-42

6. Open design branches from the tandem review

Owner decisions, not defects. Each is a live question the 2026-08-25 tandem session left open on purpose, with its recommendation and measured cost restated in Sheet D of 2026-08-31 corpus triage.

idlegacy idsitemblocked onstatusevidence
TNDM-02TNDM item 02Taxonomy shape, not a sampler bug. In the dated 2026-08-25 measurement, “Surprise me” spanned 6 to 10 distinct subjects per draw and qw_subject held 398 top-level terms against 85 children, so most fine-grained subjects descended from none of the 12 builder cards. Those are pre-replacement context, not current census figures. If “several different cats” meant the 12 visible cards, the change is corpus re-parenting after the inbound replacement, not code. Overlaps 3.1.9 SubjectTaxonomyShape.Owner confirming which reading was meantpolicy open · implementation absent2026-08-25 TNDM UI review:453
TNDM-15TNDM item 15, second halfHide “Mein QuizWizz” from navigation when logged out. Not a plugin change: the bench navigation is Twenty Twenty-Five’s core/page-list block, which auto-lists every published page, and the footer additionally hardcodes a link. Deliberately not done, because overriding the theme header on the bench that produces the screenshot corpus would invalidate that corpus for a non-plugin reason, and making the page private would lock out logged-in subscribers, who are the audience. Recommendation: replace the page-list block with an explicit navigation menu as a site-content task.Owner; pre-approved as leave-as-is for nowpolicy open · implementation absent by design2026-08-25 TNDM UI review:455
TNDM-09RTNDM item 09 reachabilityThe fine-tune step is implemented and good, but unreachable as shipped: matrix.editor is {st: visitor, def: false} and no visitor-facing control offers the step, so Print goes straight to PDF. It only opens with def: true, which was flipped for the verification and restored. Recommendation: expose a visitor opt-in in the Customize panel, or make the step the default for the print outcome.Owner choosing one of the twopolicy open · implementation shipped but unreachable2026-08-25 TNDM UI review:457
TNDM-RAILmobile statistics railA consequence of fixing the off-screen carousel: the rail is now 383 px tall on a 390 px viewport, previously 192 px with three of five segments unreachable, pushing list-screen content to y=473 in an 844 px viewport. Everything is on-screen and reachable; whether it should collapse on mobile is a design call. Recommendation: collapse it behind a one-line summary on mobile.Owner say-sopolicy open · implementation shipped, collapse behaviour absent2026-08-25 TNDM UI review:458

7. Question corpus and taxonomy

Owner direction recorded 2026-08-18: fuse many datasets into one premium mixed-language, mixed-category gold corpus. A corrected replacement corpus is now inbound. Accordingly every content, taxonomy-content and census row in this section is deferred — corpus replacement inbound: measuring the corpus being replaced would publish stale-on-arrival figures. Preserve dated measurements as history; do not promote them to present tense.

The one exception is 3.1.8. French and Spanish interface-language exposure is a product-language decision independent of the replacement corpus and remains owner-decidable in Sheet E of 2026-08-31 corpus triage.

idlegacy idsitemblocked onstatusevidence
3.1.2 SourceInventoryAndProvenancetasklist 3.1.2Register every candidate dataset and row identity, extraction and version evidence, reuse status, and content hash before normalization; retain provenance on every canonical record.inbound corpus replacementpolicy decided · implementation deferred — corpus replacement inboundquestion corpus strategy
3.1.3 CanonicalNormalisationAndLanguageTagstasklist 3.1.3Normalize all inputs to the canonical record schema; assign locale as record metadata, preserve unmapped source fields, and hold ambiguous language out of gold.inbound corpus replacement after 3.1.2policy decided · implementation deferred — corpus replacement inboundquestion corpus strategy
3.1.4 CrossDatasetDeduplicationtasklist 3.1.4Cluster likely duplicates across sources and retain winner, loser, rule, reviewer state and both provenances.inbound corpus replacement after 3.1.3policy decided · implementation deferred — corpus replacement inboundquestion corpus forensics
3.1.5 QualityGateAndGoldSelectiontasklist 3.1.5Score canonical records and retain named reasons for gold, usable and reject buckets.inbound corpus replacement after 3.1.4policy decided · implementation deferred — corpus replacement inboundquestion corpus strategy
3.1.6 PackV1Emissiontasklist 3.1.6Emit accepted records as importer-valid pack-v1 files with their projection manifest.inbound corpus replacement after 3.1.5policy decided · implementation deferred — corpus replacement inbound2026-08-19 corpus import
3.1.7 RichTypeConsumerGatetasklist 3.1.7Name an authorising game or screen before building any type beyond supported multiple and boolean; document authoring, storage, player and scoring contracts.inbound corpus replacementpolicy open · implementation deferred — corpus replacement inboundquestion corpus strategy
3.1.8 FrEsShipOrDroptasklist 3.1.8; see LANG-FRESDecide whether the fr and es interface options ship or are removed. This is independent of fused-corpus language coverage.Product owner — Sheet E, the same decision as LANG-FRESpolicy open · implementation deferred pending decisionW8 SSOT capability pass; Sheet E of 2026-08-31 corpus triage
3.1.9 SubjectTaxonomyShapetasklist 3.1.9; overlaps TNDM-02Decide intended qw_subject depth and minimum questions per subject while preserving importable real slugs.inbound corpus replacementpolicy open · implementation deferred — corpus replacement inboundsubject sufficiency census, a dated pre-replacement measurement
B002now.md open item 3Sufficiency resolver: turn the default-English progressive constraint into an explicit resolver contract. The only census is historical and predates the later WXR import, so no current sufficiency figure may be quoted.inbound corpus replacement and its post-import censuspolicy open · implementation deferred — corpus replacement inbound2026-08-19 question corpus audit

8. Documentation, truth and recurring verification

idlegacy idsitemblocked onstatusevidence
ArchiveFoldertasklist 1.1.2Decide whether dated audit pages should physically move under audits/qwizz/archive/. The 2026-08-27 IA pass deliberately used archive: true frontmatter and index grouping instead because 377 of 418 wikilinks were fully qualified and the vault had no version control.Owner — Sheet Epolicy open · implementation partial by designQuizWizz audits; Sheet E of 2026-08-31 corpus triage
ReverifyClosedRowstasklist 2.2.1Every closed masterplan row now carries an exact reproduction command and expected output, or an explicit dated receipt whose later correction is named; rows without a reproducible path were not left closed.nothing — closed 2026-08-31policy decided · implementation shipped — documentation complete 2026-08-31masterplan, Closed-row reverification
ArchiveVsLiveWarningtasklist 2.2.2The archive-versus-live warning and the mirroring procedure now sit together on the current-state page, preventing the local release ZIP from being mistaken for deployed source.nothing — closed 2026-08-31policy decided · implementation shipped — documentation complete 2026-08-31📍 Now, Archive versus live source
ProbeBaselinetasklist 2.2.3Current-claim pages use shell TAP 1..94, assertions=94 failures=0, on an idle bench plus six serial bounded browser selectors. uiux-perfection must run separately as a-d, e-g and h-j, never one all; all 16 mutation rows have named red→green evidence, including the non-vacuous icon-gap rows 15–16. Older figures survive only as dated receipts.nothing — refreshed 2026-09-02policy decided · implementation shipped — documentation current 2026-09-02probe harness; amended 2026-09-02 receipt
W0 fixture disciplinemasterplan W0Establish fixtures and cache-disabled capture recipes before another sweep, keeping unavailable live states classified as fixture or contract gaps. The missing repeatable Gutenberg selected-block case and the direct-asset mtime-only reinstall reproducer are acceptance paths inside this row, not new ledger ids.nothing — bench-actionablepolicy decided · implementation partialmasterplan ordered waves; fixture boundaries on 2026-08-31 corpus repair
W6 recurring discoverymasterplan W6; frontier PL-05Run a dated browser-led regression sweep after each substantive change across public, admin, Gutenberg, desktop, mobile, keyboard, reduced-motion, forced-language and non-happy states. Every finding gets a stable id, owner class, measured evidence, acceptance and disposition.nothing — recurringpolicy decided · implementation recurringmasterplan ordered waves

Closed, with a standing reopen condition

Two rows are closed but carry a named trigger that would reopen them. They are recorded here because their retired pages were the only place the trigger existed.

iditemreopen whenevidence
T4-05CDN or edge response-cache behaviour. Closed as not applicable: compose contains only db, WordPress and wpcli; nginx proxies without a documented response-cache tier; live public CSS and JS returned Last-Modified, ETag, Vary and Accept-Ranges with no Cache-Control or Expires.A CDN or response-cache tier is introduced. Only that component’s behaviour reopens.docker-compose.yml:1-68; Service Operations
3.2.6 SegmentedControlMarkupMismatchSegmented controls. Re-measured 2026-08-19 on /wp-admin/admin.php?page=qw-settings: all 12 .qwizz-segment controls render styled and expose the selected value by computed style. Three of them (Final-ten cue, Numbers, Marker) still emit the label > input.screen-reader-text + span form rather than button — a markup inconsistency, not a rendering defect, and the label-form rules that style it exist.A future measurement finds an unstyled .qwizz-segment child.task log completed record

Closed, do not reopen without contradictory runtime evidence

The retired can-do page carried six terminal closures. Their evidence lives on the pages named; nothing here is open work.

idsubjectevidence
T5-01W5 Site Health and Privacy expanded-state captures, 2026-07-31masterplan retained-defects table
T5-02W4 source-side asset-version coverage, re-derived 2026-08-31: 52 enqueue or register calls, 50 direct Plugin::asset_version() calls, 2 inherited enqueue-only calls whose registrations already supply mtime-derived versions.appendix B below re-derives the counts
T5-03German catalog parity. Retracted 2026-08-19 as catalog-versus-catalog, then restored against installed source. Current commit d61d98c records 1,697 translated, zero fuzzy and zero untranslated after 51 additions and five stale removals. Earlier 1,563, 1,644, 1,650, f79feb6’s 1,655 and 87a0e61’s 1,651/1,649 totals remain dated stages.2026-09-01 polish drive; 2026-08-31 HOLD remediation; task log completed record
T5-04U-9 duplicate static-front-page heading, corrected with one-h1 desktop and mobile hard-reload evidence2026-07-31 W6 regression sweep:13
T5-05PL-04 Site Health and Privacy integration disposition, 2026-07-31; the core log-location recommendation is not a failed QuizWizz integrationmasterplan retained-defects table
T5-06Six direct admin cache paths: after mtime-only reinstalls all six Dashboard and MetaBoxes ?ver= URLs changed and transferred nonzero fresh bytesW8 SSOT capability pass:145-154

9. Browser tooling and tandem showcase

idlegacy idsitemblocked onstatusevidence
SingleSignOnSomedaytasklist 1.4.7Use the existing auth.loca.zone identity portal as the one login for both the WordPress administrator session and the wiki, instead of a per-site password. Unmeasured requirements: an OIDC client for WordPress plus a plugin or mu-plugin mapping portal identity to a WP administrator, a forward-auth rule for the wiki host, and a decision about the local WP admin account. Explicitly not now — no work is scheduled and nothing depends on it. Done when the owner asks for it, or the idea is dismissed.Owner, if the audience grows or a third surface needs a login — Sheet Fpolicy open · implementation absent, unscheduled by decisionSheet F of 2026-08-31 corpus triage; retired task log 1.4.7, recorded 2026-08-18; the task log completed record
EgoVersusRelaytasklist 4.1.3A default is recorded: tool-owned Chromium via explicit app.path, the only surface that completed the fixed workload on this host. It reached the first verified visible element in two warm-browser calls and completed the workload in eight calls as executed, five plus one restore on the known route. Ego and relay produced no step count, so no winner between those two was fabricated and their tie-break never engaged.nothing — acceptance satisfied by choosing and recording a defaultpolicy decided · implementation shipped — documentation complete, closed 2026-08-31Service Operations:151-209
HARNESS-SETTINGS-CASadversarial-review blocker 3Bind every direct/UI Settings write to the exact accepted predecessor and never adopt a later observed foreign revision. Final harness bytes refuse direct predecessors unequal to acceptedHead before POST, require UI begin against the exact head, record only the sealed accepted response as the new head, enforce follow-up GET equality, and refuse restoration on a foreign head. Adversarial proof injected a foreign revision: it was not adopted and restoration refused it.nothing — acceptance satisfiedpolicy decided · implementation shipped — bench harness only; P1 resolvedscripts/quizwizz-browser-smoke.js:887-907,991-1015,1094-1140,1180-1220; agent://HarnessFixer; agent://ReVerdict2.
SETTINGS-ENDPOINT-CASGitea #13Make the Settings save response’s document and revision one atomic accepted result. Today save_if_revision() completes, then the controller separately re-reads Settings and separately computes its revision; a concurrent foreign save can therefore make the response report a revision that does not belong to the request’s accepted document. Pre-existing product defect surfaced by this drive; not introduced by it and explicitly out of drive scope.nothing — bench-actionable follow-uppolicy decided · implementation absent; open #13wp/wp-content/plugins/quizwizz/includes/Rest/SettingsController.php:101-107,148-157; #13; agent://ReVerdict2.
HARNESS-EXTKILLpost-review browser-harness limitationEliminate or operationally contain residue after an external kill. In-process cleanup cannot run after termination, so a killed smoke can leave the marked administrator, backup rows or other owned fixtures. Until an out-of-process cleanup owner exists, run only the serial bounded chunks and inspect/clean residue before rerun. Bench tooling, not a plugin defect.nothing — bench-actionablepolicy decided · implementation partial; guarded in-process cleanup shipped, external-kill cleanup absentscripts/quizwizz-browser-smoke.js:1-13,660-868,2763-2820; probe harness; review close-out.
TenStopAcceptancetasklist 4.2.2Run ten consecutive showcase stops with durable complete-sentence narration and immediate interruption semantics. Three stops ran on 2026-08-18; acceptance only counts while the owner is present and steering.Owner present — Sheet Fpolicy decided · implementation partial, 3 of 10Sheet F of 2026-08-31 corpus triage; tandem showcase guide
ResumeAndRecoverytasklist 4.2.3Settle and exercise recovery from stale references, closed tabs, login expiry, dialogs and unexpected navigation without duplicates or surface switching. No execution wave in this drive owned the tandem harness, so it is a design/ownership choice rather than silently bench-actionable.Owner — Sheet Fpolicy open · implementation absentSheet F of 2026-08-31 corpus triage; tandem showcase guide
SpeechSynchronizationtasklist 4.2.4Ensure required narration survives continued model activity, exposes completion and cancels immediately on interruption; never make narrated tables or code essential.Owner present after TenStopAcceptance — Sheet Fpolicy decided · implementation absentSheet F of 2026-08-31 corpus triage; tandem showcase guide
EvidenceReconciliationtasklist 4.2.5Reconcile the append-only walk events, generated report, ledger and completed log, preserving retractions and separating local evidence from public synthesis. The append-only walk-event store is not present on disk, so this cannot be completed from the abstract row that describes it.Whoever holds the walk-event store must produce it; terminal-blocked behind 3.2.5policy decided · implementation absent — terminal-blocked behind 3.2.5 on the absent walk-event store2026-08-31 corpus triage; 3.2.5 above

10. 2026-09-01 polish-drive follow-ups

These are the twelve canonical rows added by the operator intake. Proposal text is not evidence that a feature exists; every idea remains absent until its own row moves. The source ruling and exact wording are preserved in the polish-drive receipt.

idlegacy idsitemblocked onstatusevidence
YAML-12Gitea #12Add a first-party YAML-subset reader for scalars, maps, lists and comments, without an external dependency, so .yaml twins can front wp-content/quizwizz-defaults.json and config/settings-tiers.json. JSON remains canonical. Explicitly outside the 2026-09-01 drive.nothing technical; separately scheduled open issuepolicy decided for canonical JSON and YAML-subset boundary · implementation absentissue #12; polish-drive receipt
GLITCH-INTAKES5 operator intakeSupply and triage the operator’s frontend-glitch list. The list never arrived; S5 delivered its fixed steps only and no general frontend-polish completion is claimed.operator supplying the concrete listpolicy open · implementation partial — fixed steps shipped, intake absentoperator ruling
IDEA-DARK2026-09-01 idea intakeBackend dark mode versus a full WizzStizzl Wiz admin theme; hidden/off by default.product owner choosing scope and appearancepolicy open · implementation absentoperator intake
IDEA-ICONS2026-09-01 idea intakeEmoji JollyJoy versus icon BuizzyBuzz glyph-set toggle.product owner choosing the sets and toggle contractpolicy open · implementation absentoperator intake
IDEA-MODIFIERS2026-09-01 idea intakePoints economy — kingconomic/TinyQiz qConomy raffle/lottery; limited-lives hearts; per-question countdown as a shrinking line.product owner defining rules, accounting and failure behaviorpolicy open · implementation absentoperator intake
IDEA-INTERLANG2026-09-01 idea intakeSame question and correct answer across languages, with different distractors.product and content owner defining cross-language identity and validationpolicy open · implementation absentoperator intake
IDEA-IMGGEN2026-09-01 idea intakeImage-generation quizzes, including art styles and pattern mode.product, provider, safety and provenance decisionspolicy open · implementation absentoperator intake
IDEA-MASHUP2026-09-01 idea intakeWizard speed-quiz mashup with high-fidelity TTS and an animated DiceBear-style wiz face.product, audio/provider and animation decisionspolicy open · implementation absentoperator intake
IDEA-TRIVIA-PLUS2026-09-01 idea intakeMascot, music and TTS layers on Trivia HTML.product owner plus self-contained-export and media-rights contractspolicy open · implementation absentoperator intake
IDEA-STARTER2026-09-01 idea intakeStarter-library get-started page following 002-admin-get-started.png.product/IA acceptance for the reference behaviorpolicy open · implementation absentoperator intake
IDEA-INSPECTOR2026-09-01 idea intakeFurther block-inspector features: theme override and per-block play-page override.product owner deciding precedence and override scopepolicy open · implementation absentoperator intake
DEFERRED-S9-AUDITS9 operator follow-upDeep feature audit of the eight historical versions: inspect print-modifier/pre-export flow, legacy Welcome-page solutions and which old-version aspects are “solved-ish”.no technical blocker; explicitly deferred as operator follow-uppolicy decided for audit scope · implementation deferredS9 receipt; operator intake

11. 2026-09-02 UI/UX-perfection follow-ups

These thirteen rows contain the original eleven ACCEPT-WITH-WAIVERS follow-ups plus two post-publication gate-reliability dispositions. The two independent reviewers found zero blockers. The standards reviewer supplied the eight grouped P3 judgments; the evidence auditor supplied the two metric reconciliations; the recovery record supplies the owner-1 hazard. The SET-07 recheck closed the selector/denominator blind spot, while the Wave 5 experiment opened one diagnostic follow-up. Evidence: agent://FinalReviewer-2; agent://FinalAuditor3; /tmp/qwux/backup-recovery.json:5-16; agent://SliceE3:1-215; amended receipt.

idlegacy idsitemblocked onstatusevidence
UIUX-REV-01reviewer findings 2 and 10Normalize REST metadata labels: entity-decode subject like title, and move the fifth language-name map out of the Rest→Admin dependency into a shared helper.nothing — closed 2026-09-14policy decided · implementation shipped — installed on the bench in round F, releaseEligible: falsewp/wp-content/plugins/quizwizz/includes/LanguageFlags.php:30, consumed at includes/Frontend/views/builder-view.php:146; wp/wp-content/plugins/quizwizz/includes/Rest/AdminController.php; UX repair round section 2; original finding agent://FinalReviewer-2:15-23,87-95
UIUX-REV-02reviewer finding 3Delete shadowed/orphaned Settings toolbar declarations and define the shelf geometry once rather than across core, layout and workspace sheets.nothing — closed 2026-09-14policy decided · implementation absent — precondition already gone on measurement, no change requiredRound F opened the named sheets and found no shadowed toolbar declaration left to delete, so no byte changed: UX repair round section 2. Original finding agent://FinalReviewer-2:24-32 against wp/wp-content/plugins/quizwizz/assets/css/qwizz-admin-settings-core.css:51-65 and qwizz-admin-settings-workspace.css:202-211
UIUX-REV-03reviewer finding 4Remove the now-styleless fine-tune qwizz-editor-item__number--gutter branch and dead .qwizz-editor__count selector.nothing — closed 2026-09-14policy decided · implementation shipped — installed on the bench in round F, releaseEligible: falsewp/wp-content/plugins/quizwizz/assets/js/qwizz-finetune.js; wp/wp-content/plugins/quizwizz/assets/css/qwizz-finetune.css; UX repair round section 2; original finding agent://FinalReviewer-2:33-41
UIUX-REV-04reviewer finding 5Delete the shadowed minified category prelude instead of depending on later selectors to override it.nothing — closed 2026-09-14policy decided · implementation shipped — installed on the bench in round F, releaseEligible: falsewp/wp-content/plugins/quizwizz/assets/css/qwizz-builder.css, with the new step title at :693; UX repair round section 2; original finding agent://FinalReviewer-2:42-50
UIUX-REV-05reviewer finding 6Use translatable source copy Your quiz; retain uppercase only as presentation through CSS.nothing — closed 2026-09-14policy decided · implementation shipped — installed on the bench in round F, releaseEligible: falsewp/wp-content/plugins/quizwizz/includes/Frontend/views/builder-view.php:305; German catalog rebuilt under wp/wp-content/plugins/quizwizz/languages/; UX repair round section 2; original finding agent://FinalReviewer-2:51-59
UIUX-REV-06reviewer finding 7Remove the phantom public --qw-brand branch and use the resolving --qw-v token directly.nothing — closed 2026-09-14policy decided · implementation absent — precondition already gone on measurement, no change requiredRound F found no --qw-brand fallback left in the public editor sheet, so no byte changed: UX repair round section 2. Original finding agent://FinalReviewer-2:60-68 against wp/wp-content/plugins/quizwizz/assets/css/qwizz-finetune.css:306-310,451-452
UIUX-REV-07reviewer finding 8Fold appended admin-editor overrides into their owning declarations so source order is not the behavior contract.nothing — closed 2026-09-14policy decided · implementation shipped — installed on the bench in round F, releaseEligible: falsewp/wp-content/plugins/quizwizz/assets/css/qwizz-admin-editor.css; UX repair round section 2; original finding agent://FinalReviewer-2:69-77
UIUX-REV-08reviewer finding 9Add screen-reader expansion for the non-focusable +N subject-overflow badge, matching the dashbar’s title-plus-assistive-text pattern.nothing — closed 2026-09-14policy decided · implementation shipped — installed on the bench in round F, releaseEligible: false; the badge it made focusable caused the one measured round-F regression, fixed in the same roundMarker rendered by wp/wp-content/plugins/quizwizz/includes/Admin/ListTables.php; 32x32 target and inside-drawn focus ring at wp/wp-content/plugins/quizwizz/assets/css/qwizz-admin-shell.css:114-134,141-144; regression and re-measurement in UX repair round section 3; original finding agent://FinalReviewer-2:78-86
UIUX-BACKUP-01recovery hazardOwner 1 still has 11 Settings-backup rows against a per-writer cap of 10. Prevent future operator-identity Settings verification from displacing history; use disposable identities and an attribution assertion.nothing — operating-rule and harness follow-uppolicy decided · implementation partial; current 95-row baseline recovered, owner-cap hazard remains/tmp/qwux/evidence-dossier.md:51-54; /tmp/qwux/backup-recovery.json:5-16; agent://SliceE2:22-41
UIUX-METRIC-01auditor first-control waiverRe-scoped 2026-09-14. The Settings acceptance metric is now the plugin-owned counter set measured by the round-F driver, not a chrome-inclusive first-visible-control distance. The stale ≤290px target is retired and the 505px figure stays dated Sep-2 evidence rather than a carried-forward target; the current Settings debts are the owned counters focusClipped 11 and contrastFailsOwned 1 at S1-mobile.nothing — closed 2026-09-14policy decided · implementation shipped — re-scoped to the round-F owned-metric set, releaseEligible: falseOwned-metric before/after table in UX repair round section 6; driver /tmp/qwfix/uiux/measure.mjs SHA-256 be06ed62…, byte-identical on both sides; full 366-row comparison in metrics.md; original waiver agent://FinalAuditor3
UIUX-METRIC-02auditor Details-cell waiverRe-scoped 2026-09-14. The quiz-list acceptance metric is now the plugin-owned counters on the L1 surface rather than the enclosing WordPress Details cell, so the retired ≤40px target no longer competes with a cell WordPress lays out. The re-scope is load-bearing, not cosmetic: owned smallTargetsOwned on L1-desktop is what detected the round-F +N chip regression at 8 → 17 and confirmed its repair at 8.nothing — closed 2026-09-14policy decided · implementation shipped — re-scoped to the round-F owned-metric set, releaseEligible: falseOwned-metric tables in UX repair round sections 3 and 6; metrics.md; original waiver agent://FinalAuditor3
UIUX-GATE-01SET-07 post-publication gate correctionBrowser assertion (c) must sample the rendered icon universe independently of the CSS implementation selector and must fail when its denominator is trivial. It now walks every visible Settings SVG, reports {gap,text,host}, requires checked >= 60, and mutation rows 15–16 prove both the old selector and a deleted spacing rule red.nothing — closed 2026-09-02policy decided · implementation shipped — harness hardened and mutation-proved; releaseEligible: falsescripts/quizwizz-browser-smoke.js:3088-3148; /tmp/qwux/e3-row15-{red,green}.json; /tmp/qwux/e3-row16-{red,green}.json; agent://SliceE3:19-104; SET-07 amendment
UIUX-FLAKE-01Wave 5 assertion 12; loca/quizwizz #15Add per-sub-condition diagnostics or otherwise settle the load-sensitive portability fixtures leave no jobs files chunks schedules posts or option drift flake. Measurement is 0 failures in 6 idle runs versus 1 in 6 under concurrent Settings + page-57 HTTP load. $residue_cron / wp_next_scheduled() is plausible but UNVERIFIED because the aggregate failure prints no component values. Until resolved, gates require an idle bench.nothing — bench-actionablepolicy decided · implementation shipped — diagnostics present (2026-09-14); measured 0/6 idle, 0/6 loaded at 4× loops, 0/6 loaded at 8× loops; attribution: not reproduced at 4×/8× loops; hypothesis remains unverified — idle-bench rule standsWave 5 residue diagnostics; /tmp/qwux/w5-{1..6}.tap; /tmp/qwux/w5c-{1..6}.tap; failure /tmp/qwux/w5c-4.tap:18-35; scripts/quizwizz-probe.sh:1324-1361; gate reliability

12. 2026-09-14 UI/UX repair-round follow-ups

Seven new ids from round F, all owner-decidable and deliberately so. Each one is a vision-critic judgement over a static screenshot, which is [INFERENCE] and never a measurement; no bench measurement contradicts the current rendering, so no row here moves on the critic’s opinion alone. Round F’s measured work is in the REV and METRIC rows of section 11, and the four retained P1 symptoms are retained baseline findings rather than regressions: the after-side critique counted 172 → 170 findings with 0 new P1 and 6 new P2. Evidence: UX repair round; scores.md; findings-after.json.

idlegacy idsitemblocked onstatusevidence
UIUX-P1round-F retained P1 group — 4 symptoms across 7 findingsAccept or reject the design behind the four retained P1 symptoms: the fine-tune sticky outcome bar over content (J3 and J4, both viewports), the J5-mobile PDF page scaled to 390px, the Q1-mobile sticky Update bar, and Q1-mobile small text read off a downscaled image. Three of the four are artifacts of judging a sticky element in a frame that cannot be scrolled, and the end padding derived from --qw-editor-outcome-h keeps every row reachable by scrolling. The open question is whether the sticky bars stay as designed.Product or design ownerpolicy open · implementation shipped — the sticky bars are the installed design and were deliberately left unchanged; the critique is unresolved judgementUX repair round section 8; end padding at wp/wp-content/plugins/quizwizz/assets/css/qwizz-finetune.css:110,113,805
UIUX-VIS-01round-F new P2, J1-desktopCategory tiles all carry equal visual weight, and the dashed Surprise me tile reads as disabled or as a placeholder rather than as a distinct choice.Product or design ownerpolicy open · implementation absent — unresolved critic judgement, no measured defectUX repair round section 9; findings-after.json
UIUX-VIS-02round-F new P2, J1-mobileThe Surprise me tile reads the same way at the mobile viewport.Product or design ownerpolicy open · implementation absent — unresolved critic judgement, no measured defectUX repair round section 9; findings-after.json
UIUX-VIS-03round-F new P2, J1-mobileThe collapsed Customize disclosure gives no indication of what it contains.Product or design ownerpolicy open · implementation absent — unresolved critic judgement, no measured defectUX repair round section 9; findings-after.json
UIUX-VIS-04round-F new P2, Q1-mobileThe Answers switches do not read as having a clear on or off state. Note the separate open row UX-ANSUI-01, which is about what the collapsed switch writes, not about how it reads.Product or design ownerpolicy open · implementation absent — unresolved critic judgement, no measured defectUX repair round section 9; findings-after.json
UIUX-VIS-05round-F new P2, D1-mobileSubject names repeat across the dashboard cards.Product or design ownerpolicy open · implementation absent — unresolved critic judgement, no measured defectUX repair round section 9; findings-after.json
UIUX-VIS-06round-F new P2, S1-mobileThe imports card composition is called out.Product or design ownerpolicy open · implementation absent — unresolved critic judgement, no measured defectUX repair round section 9; findings-after.json

13. 2026-09-14 Settings premium-panel follow-ups

Eight ids from phase G, the Settings premium restyle. One, UIUX-SET-02, has since shipped: after the keyboard gate was reported blocked, the operator explicitly approved the smallest bounded JavaScript correction, and the freeze on assets/js/qwizz-admin-settings.js was lifted for that one change only. Three remain bench-actionable and four are critic residuals that no bench measurement settles. UIUX-SET-01 is still recorded rather than made, because the freeze lift did not extend to it. The four critic rows are [INFERENCE] judgements over static screenshots at vision round 6, which did not converge. Evidence: Settings panel premium restyle, section 11 for the amendment; settings-scores.md; settings-keyboard-walk.md.

idlegacy idsitemblocked onstatusevidence
UIUX-SET-01phase G deferred item 1; critic top residual from round 4Search-result rows concatenate a setting’s label and its value into one string, rendered as Page numbersDefault, Name / Date / Class linesDefault and Pre-print fine-tune editorDefault. searchIndexCopy clones the row, strips effect sentences, screen-reader text, help and segments, and returns the remaining textContent with no separator. A fix needs a separator or a structured label/value pair in the renderer.nothing — bench-actionable; the 2026-09-14 freeze lift covered UIUX-SET-02 onlypolicy decided · implementation deferred — recorded instead of made, and the approved JavaScript change did not extend to this rowwp/wp-content/plugins/quizwizz/assets/js/qwizz-admin-settings.js:1012-1018, consumed at :1434; Settings panel premium restyle sections 2 and 11
UIUX-SET-02phase G deferred item 2; mobile keyboard-walk residualThe mobile segmented strip did not scroll a focused off-screen segment into view: focused, Player and Advanced reached 235.95px and 244.61px against the strip’s clip edge at 210px, overhanging by 25.95px and 34.61px with the strip stuck at scrollLeft: 0. A CSS-only scroll-snap candidate was installed, measured ineffective and reverted. Closed 2026-09-14 by an operator-approved focus listener per [data-workspace-tab] at assets/js/qwizz-admin-settings.js:1485-1491, which calls scrollIntoView({ block: 'nearest', inline: 'start', behavior: 'auto' }) when the strip is scrollable and the segment lies outside it. A first bundle using inline: 'nearest' was measured ineffective against the strip’s scroll-snap-type: x proximity and corrected to inline: 'start'; live bundle SHA-256 a7b6768e…. The re-run walk measures 0 missing indicators and 0 clipped rings across 36 Settings-owned stops at both viewports, with mobile Player at scrollLeft: 87 inside the strip and Advanced 2.39px clear.nothing — shipped on the bench, not releasedpolicy decided · implementation shipped — approved JavaScript fix, bench-only and releaseEligible: falsewp/wp-content/plugins/quizwizz/assets/js/qwizz-admin-settings.js:1479-1491; evidence/2026-09-14-uiux-round/settings/keyboard-walk-js.json, keyboard-walk-js-confirm.json, preserved failed pair keyboard-walk-js-1a3792be*.json; /tmp/qwfix/settings/wave-all-js.tap:288-289; Settings panel premium restyle section 11
UIUX-SET-03phase G round-6 P2 themePartially visible tabs at the right edge of the mobile scroll strip read as truncated labels rather than as a scroll affordance: the critic recorded Play fading after Pla and a wand-icon tab obscured after Buil. The right-edge fade mask is the installed design; whether a scroll affordance replaces or supplements it is a design judgement.Product or design ownerpolicy open · implementation shipped — the fade mask is the installed design and was deliberately left as shipped; the critique is unresolvedevidence/2026-09-14-uiux-round/settings/critique-round-6.json (settings-top-mobile.png, settings-search-mobile.png); mask at wp/wp-content/plugins/quizwizz/assets/css/qwizz-admin-settings-workspace.css:995-996
UIUX-SET-04phase G round-6 P2 themeHelper, eyebrow and secondary-text density: the critic reads metric annotations, breadcrumbs, helper text and uppercase captions as small and tightly packed against the Apple Settings reference, at both viewports. The specification’s 12px helper floor is the current contract, so raising density means changing the contract, not fixing a violation.Product or design ownerpolicy open · implementation shipped — the installed type scale meets the specification floor; the critique asks for a different scaleevidence/2026-09-14-uiux-round/settings/critique-round-6.json (four findings across settings-search-desktop.png, settings-top-mobile.png, settings-group-mobile.png)
UIUX-SET-05phase G round-6 P2 themeSection-header insets and supporting-text alignment differ across Available experiences, Quiz size and Content languages. The round’s own summary described this as Quiz size lacking a helper line, which the record does not support: round 6 recorded an inset and alignment inconsistency, not a missing helper. Either reading resolves as content and layout policy rather than styling.Product or design ownerpolicy open · implementation absent — unresolved critic judgement, no measured defectevidence/2026-09-14-uiux-round/settings/critique-round-6.json (settings-top-desktop.png, element Section header insets)
UIUX-SET-06phase G round-6 P2 themeThe core Screen Options control sits outside the plugin’s content frame on mobile, follows its own alignment and precedes the settings title with the stats summary. The round’s own summary described it as floating over the mobile rail; nothing in the critique or the final measurement JSONs establishes an overlap, where it is recorded as a non-owned 146x40 target. Any change touches WordPress core chrome and the gate-defended superglued-rail stacking.Product or design ownerpolicy open · implementation absent — core chrome, unresolved critic judgement, no measured overlapevidence/2026-09-14-uiux-round/settings/critique-round-6.json (settings-top-mobile.png, settings-search-mobile.png); round-final/settings-top-mobile.json (button#show-settings-link, owned: false)
UIUX-SET-07phase G gate-coverage caveatThe a-d step group emits three UI/UX assertions — UIUX (a), (b) and (c) — and there is no UIUX (d). The Preview modal appears only as two waitFor barriers that open it and close it, with no counted assertion and no check of focus containment, Escape or focus return, so that contract rests on the keyboard walk alone. Add a counted Preview assertion with a non-trivial denominator, or rename the step group to what it actually covers.nothing — bench-actionable harness workpolicy decided · implementation absent — coverage gap measured against installed harness bytesscripts/quizwizz-browser-smoke.js:3173-3179, assertions at :3081, :3157, :3166; Settings panel premium restyle section 5
UIUX-SET-08phase G documentation driftThe probe-harness page and the harness skill still describe the shell plan as 1..76 in places, while the installed harness emits 1..98 with # assertions=98 failures=0. Reconcile the documented plan with installed bytes without restating counts nobody re-measured.nothing — bench-actionable documentation workpolicy decided · implementation absent — drift recorded, counts not rewritten by phase G/tmp/qwfix/settings/wave-all-g.tap (SHA-256 b653db02…), 1..98 at :288-289; harness contract update

Reconciliation of the eight stale rows

Each of these was carried as current by at least one of the five retired pages and was re-measured on 2026-08-27 before this ledger was declared authoritative. None is open work.

what a retired page saidwhat is truedisposition
backlog.md:159 — Onboarding.php still uses the heading Set up QuizWizz, so the copy change is decision-gated.It does not. Live source emits Getting started at includes/Admin/Onboarding.php:236, :381 and :382, and the string Set up QuizWizz is absent from the file.Closed against those citations. Not carried forward. The separate #help fusion ask survives as PROD-HELP-01.
UX-ANS-01 open in tasklist.md:277 and ranked first in now.md.Answered on 2026-08-19 as D005: whatever the admin decides for the quiz wins. Probe-defended by Wave 6 PHP assertion 15.Closed. Standing rule and current code anchors: Answer visibility policy — D005. The dated receipt is play and print answers:167, :195. Residue tracked as UX-ANSUI-01.
masterplan.md:29 called 1..72 failures=0 the standing gate while :30 called 1..76 failures=0 the standing gate.On 2026-08-27, 1..76 superseded Cluster 4’s 1..72; on 2026-08-31, waves 1–11 superseded both with 1..93; on 2026-09-01, the Wave 7 re-contract added one net assertion, yielding 1..94. The 2026-09-02 UI/UX round retained shell 1..94 and extended browser proof instead.Every older figure survives as dated evidence. Current shell authority is the 2026-09-02 receipt.
backlog.md:26 cited TAP 1..46 inside a section headed current reconciliation.A valid 2026-08-17 citation, not the standing gate.The figure survives only inside dated text on 2026-08-17 launch readiness. Wherever it appears it is explicitly the 2026-08-17 Option F observation.
German catalog counts diverged across four pages: backlog.md:43 1,563/1,563; masterplan.md:42 and :64 1,644/1,644; tasklist.md:100-112 a later 1,650 top-up; now.md:26 POT=PO 1650.Each figure is a dated state. Corpus repair f79feb6 reached 1,655 active entries and HOLD remediation 87a0e61 reached 1,651 active / 1,649 distinct bare msgids. Current commit d61d98c has 1,697 translated, zero fuzzy and zero untranslated after 51 additions and five stale removals. Catalog counts are not rendered-UI proof.Current claims cite the 2026-09-01 polish drive; older counts remain only where their date is explicit.
French and Spanish carried four statuses: deferred in frontier.md:53-56, open in backlog.md:45 and can-do.md:50-51, ship-or-drop in tasklist.md:155-157, undecided in masterplan.md:42.One state: the implementation is deferred and the policy is open. No complete catalog set is bundled for either locale, and no owner decision exists to build one.Expressed once as LANG-FRES in section 1, cross-referenced by 3.1.8.
frontier.md:48-64 filed PL-02, PL-03 and PL-04 under a bucket named for open bench work although all three are closed.Section placement was never a status. PL-02 is closed for the current language scope, PL-03 is closed for current infrastructure with T4-05 as its reopen condition, PL-04 closed on 2026-07-31 on authenticated expanded-state evidence.This ledger classifies by the status field only. None of the three appears as open work.
tasklist.md parents 1.2 and 1.3 were unchecked while every displayed child was done, :60 said 1.3.3 remained open directly above the completed 1.3.3, and 1.4 was an overbroad open container whose posture decision had been reversed and accepted.1.2 and 1.3 are complete: 1.2.1, 1.2.2, 1.2.3, 1.3.1, 1.3.2 and 1.3.3 all closed on 2026-08-19, and the stale “1.3.3 remains open” clause was a leftover from the 1.3.2 resolution text written before 1.3.3 landed. 1.4’s posture decision was reversed and accepted on 2026-08-18.1.2, 1.3 and 1.4 are closed. Only 1.4.7 SingleSignOnSomeday survives, in section 9, and only 1.1.2 ArchiveFolder survives from cluster 1, in section 8.

Appendix A — guest-AI substrate: standing facts

Preserved from the retired frontier page, which was the only place these held together. The bullets distinguish current runtime and policy facts from the dated core-context observation; PL-06 in section 1 is the row that would change the current enablement posture.

  • Identity and scope: cookie-bound pseudonymous guest identity, a find|craft allowlist, a separate guest budget defaulting to zero with its own reservations, exact model and provider pinning with automatic routing refused, and unsaved craft output. Implemented at schema 1.6.7 and carried across the 1.6.8 bump.
  • Accounting and audit: qwizz_ai_audit records bounded metadata and outcome only — no prompts, no transcripts, no raw identifiers, no secrets — with a 30-day metadata-only retention.
  • Disclosure: the published privacy disclosure names OpenRouter, visitor-authored free-text transmission, forced Block plus Zero retention routing, cookie-bound pseudonymous identity, and the 30-day metadata audit.
  • Retention, reconciled: signed-in owner content is indefinite until deletion; anonymous artifacts and links are bounded to 1 to 720 hours with a 24-hour default and a 30-day hard cap; bearer links grant possession-based access until expiry or revocation.
  • Readiness: a Site Health readiness gate guards enablement, and guest traffic is disabled by default with a zero budget, no pinned guest model or provider, and no API key.
  • WordPress core context: W0 snapshot metadata records WordPress 7.1 on 2026-08-31 (corpus repair — W0 baseline pins). The Connectors and execution-time fallback observation was made on core 7.0.4, after an earlier 7.0.2 capture, and is historical rather than a current 7.1 claim. Independently, W1-D found no compatible OpenRouter key configured on this bench, as recorded in the FL-003 triage.

Settled boundaries, not to be relitigated: no plugin-repository or marketplace publication; the target deployment is one privately supplied install on a separately operated site; full anonymous self-service is the intended public surface with optional accounts for a saved library and stats; the assistant provider starts as pinned direct OpenRouter with Connector deferred.

Appendix B — re-derivation recipes

Evidence, not ledger rows. These reproduce the grounded counts behind the closed rows in section 8, and they were the only executable part of the retired can-do page. Run them from /home/loca/dev/wrdp. Expected values are dated where the recipe is historical: German stages moved from 1,563 through 1,644, 1,650, corpus-repair 1,655 and HOLD-remediation 1,651/1,649; catalog commit d61d98c records 1,697 translated, zero fuzzy and zero untranslated, while current pushed mirror HEAD is 715474f. Current authoritative gate and residue figures are in the probe harness and the amended receipt.

  • finding_6_asset_version_coverage:
python3 - <<'PY'
from pathlib import Path
import re
 
root = Path('wp/wp-content/plugins/quizwizz')
start = re.compile(r'\bwp_(?:enqueue|register)_(?:script|style)\s*\(')
calls = []
for path in sorted(root.rglob('*.php')):
    text = path.read_text(encoding='utf-8')
    for match in start.finditer(text):
        depth = 0
        quote = None
        escaped = False
        end = match.end() - 1
        for end in range(match.end() - 1, len(text)):
            char = text[end]
            if quote:
                if escaped:
                    escaped = False
                elif char == '\\':
                    escaped = True
                elif char == quote:
                    quote = None
                continue
            if char in "'\"":
                quote = char
            elif char == '(':
                depth += 1
            elif char == ')':
                depth -= 1
                if depth == 0:
                    break
        body = text[match.start():end + 1]
        calls.append((path.relative_to(root), text.count('\n', 0, match.start()) + 1, 'asset_version(' in body, body.splitlines()[0].strip()))
print(f'total={len(calls)} asset_version={sum(c[2] for c in calls)} inherited={sum(not c[2] for c in calls)}')
for path, line, versioned, first in calls:
    if not versioned:
        print(f'inherited {path}:{line}: {first}')
PY
sed -n '36,48p' wp/wp-content/plugins/quizwizz/includes/Plugin.php
sed -n '47,53p' wp/wp-content/plugins/quizwizz/includes/Frontend/QuizEmbed.php
  • expected at the 2026-08-31 re-derivation: total=52 asset_version=50 inherited=2; the inherited calls are includes/Frontend/QuizEmbed.php:104 (qwizz-player) and includes/Frontend/UserSurfaces.php:224 (qwizz-rest), whose registrations at QuizEmbed.php:102 and UserSurfaces.php:223 already supply Plugin::asset_version().
  • finding_8_german_catalog_parity:
python3 - <<'PY'
from ast import literal_eval
from pathlib import Path
import re
 
root = Path('wp/wp-content/plugins/quizwizz/languages')
 
def catalog(path):
    entries, entry = [], []
    for line in path.read_text(encoding='utf-8').splitlines() + ['']:
        if line.strip():
            entry.append(line)
        elif entry:
            entries.append(entry)
            entry = []
    parsed = {}
    obsolete = 0
    fuzzy = set()
    for lines in entries:
        if any(line.startswith('#~') for line in lines):
            obsolete += 1
            continue
        flags = {flag.strip() for line in lines if line.startswith('#,') for flag in line[2:].split(',')}
        fields, key = {}, None
        for line in lines:
            match = re.match(r'(msgid_plural|msgid|msgstr(?:\[\d+\])?)\s+(.*)', line)
            if match:
                key = match.group(1)
                fields[key] = literal_eval(match.group(2))
            elif key and line.startswith('"'):
                fields[key] += literal_eval(line)
        msgid = fields.get('msgid', '')
        if not msgid:
            continue
        parsed[msgid] = fields
        if 'fuzzy' in flags:
            fuzzy.add(msgid)
    return parsed, fuzzy, obsolete
 
pot, pot_fuzzy, pot_obsolete = catalog(root / 'quizwizz.pot')
po, po_fuzzy, po_obsolete = catalog(root / 'quizwizz-de_DE.po')
untranslated = {
    msgid for msgid, fields in po.items()
    if not fields.get('msgstr', '') and not any(value for key, value in fields.items() if key.startswith('msgstr['))
}
formal = re.compile(r'\b(?:Sie|Ihnen|Ihr(?:e|en|er|es|em)?)\b')
formal_hits = {msgid for msgid, fields in po.items() if formal.search(' '.join(value for key, value in fields.items() if key.startswith('msgstr')))}
print({
    'pot_active': len(pot), 'po_active': len(po),
    'untranslated': len(untranslated), 'fuzzy': len(po_fuzzy),
    'obsolete': po_obsolete, 'pot_missing_from_po': len(set(pot) - set(po)),
    'po_only': len(set(po) - set(pot)), 'formal_address': len(formal_hits),
})
PY
  • expected: pot_active=1563, po_active=1563, and every defect count 0.

Retracted 2026-08-19. This measured catalog against catalog. Against installed source the shipped quizwizz.pot was missing 153 msgids and carried 76 obsolete ones (wp i18n make-pot → comm -23 / comm -13, 2026-08-19). Parity was restored that day at the then-current 1,650-entry stage. The pot_active=1563 expectation above remains the 2026-07-31 state, not current. The later corpus-repair refresh at f79feb6 recorded 1,655 active entries; the superseding HOLD-remediation refresh at 87a0e61 records 1,651 active entries, 1,649 distinct bare msgids, 6 context-bearing entries across 4 context values and zero fuzzy, untranslated, obsolete or POT-missing entries. See 2026-08-31 HOLD remediation, 2026-08-31 corpus repair and task log completed record 2.1.1.

  • finding_9_existing_bench_fixtures_and_settings:
sudo -n docker compose --profile cli run --rm wpcli eval '
$terms = get_terms(array("taxonomy" => "qw_subject", "hide_empty" => false));
$zero = array_values(array_map(
    static fn($term) => array("term_id" => (int) $term->term_id, "slug" => $term->slug),
    array_filter($terms, static fn($term) => 0 === (int) $term->count)
));
$counts = wp_count_posts("qw_quiz");
$settings = get_option("qw_exposure_settings", array());
var_export(array(
    "subjects_total" => count($terms),
    "subjects_zero_questions" => $zero,
    "quiz_statuses" => array(
        "publish" => (int) $counts->publish,
        "private" => (int) $counts->private,
        "draft" => (int) $counts->draft,
    ),
    "auto_advance_ms" => $settings["player"]["auto_advance_ms"] ?? null,
    "page_on_front" => (int) get_option("page_on_front"),
));
'
sudo -n docker compose --profile cli run --rm wpcli post list --post_type=qw_quiz --post_status=private --field=ID
printf '%s\n' 'https://wrdp.loca.zone/?page_id=57' 'https://wrdp.loca.zone/?qwizz_play=110'
  • historical expected state from the original recipe — not a present-tense corpus census: 89 subjects; 13 zero-question terms including 39 entertainment-japanese-anime-manga; quiz statuses publish=13, private=0, draft=5; auto_advance_ms=0; page_on_front=2. The inbound corpus replacement defers every content, taxonomy-content and census assertion. Any future unavailable-embed check also requires an explicit fixture instead of assuming an existing private quiz.

Resolved bench residue

The inherited account question is closed, not left unverified. On 2026-08-31 the read-only command sudo docker compose --profile cli run --rm wpcli user get qwverify-20260729 exited 1 with Error: Invalid user ID, email or login: 'qwverify-20260729'. The verification account no longer exists. This resolves the 2026-07-30 observation without rewriting it; the later historical page still says what was seen then.