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 decidedorpolicy open, thenimplementation shipped,partial,deferredorabsent.- evidence — the page or
path:linethat 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: falseand 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 addsUIUX-GATE-01as shipped harness hardening andUIUX-FLAKE-01as one bench-actionable diagnostic follow-up. Round F on 2026-09-14 then emptied those reviewer and metric rows out ofbench-actionable: sixUIUX-REVrows shipped on the bench,UIUX-REV-02andUIUX-REV-06closed on their own measurement as already resolved, andUIUX-METRIC-01andUIUX-METRIC-02closed by re-scoping to the round’s owned-metric set. It added seven owner-decidable ids —UIUX-P1for the four retained P1 symptoms andUIUX-VIS-01throughUIUX-VIS-06for 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-07andUIUX-SET-08arrived bench-actionable, andUIUX-SET-03throughUIUX-SET-06are owner-decidable critic residuals.UIUX-SET-02then moved toshippedthe 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 whileshippedgains one andbench-actionableloses 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.
| class | count | ids | meaning |
|---|---|---|---|
| shipped | 34 | 3.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-02 | Code, 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-actionable | 14 | 3.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-08 | The 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-decidable | 61 | Sheet 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-blocked | 49 | LEGAL-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 inbound | 11 | 3.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.
| issue | ledger row | state |
|---|---|---|
| #1 | 3.2.1 CopyAndDeadEnds | closed — fixed |
| #2 | 3.2.3 ContentProof | open — deferred, corpus replacement inbound |
| #3 | FL-001 modal inert boundary | closed — not reproduced; no code change |
| #4 | FL-002 portability polling and 409 continuity | closed — fixed by 464fb78; reload/ceiling lifecycle split to #10 |
| #5 | FL-003 provider order | open — owner-decidable and not live-probeable, because no OpenRouter key is configured on this bench |
| #6 | 3.2.7 ChoiceCardsRenderBare | closed 2026-08-30 — fixed |
| #7 | TOUR-01 question list overprints two columns | closed — fixed |
| #8 | TOUR-23 duplicate Advanced panel | closed — fixed by corrected 33989f9 |
| #9 | HOLD remediation F1–F8 | closed — commits 464fb78, c8d7c10, dcdb1a2, d66f1a9, catalog 87a0e61, final gates and F1–F5 mutation evidence in the receipt |
| #10 | portability reload rehydration and ceiling resume/messaging | open — explicit lifecycle boundary, not a reopening of FL-002’s repaired scope |
| #11 | coordinating Drive: mega-polish & config-diet (2026-09-01) issue | closing — evidence complete in the S0a–S10 receipt; the receipt does not claim the issue-state mutation already executed |
| #12 | YAML-12 operator-defaults/settings-tiers front end | open — first-party YAML-subset twins proposed; JSON remains canonical; explicitly outside the 2026-09-01 drive |
| #13 | SETTINGS-ENDPOINT-CAS — Settings save endpoint reports a non-atomic revision | open — pre-existing product defect surfaced by review, not introduced or fixed by the drive; out of drive scope |
| #14 | coordinating UI/UX perfection round (2026-09-02) issue | issue-state mutation not claimed here — evidence is complete in the receipt; the orchestrator owns closing |
| #15 | UIUX-FLAKE-01 — Wave 5 load-sensitive aggregate residue assertion | open — 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.
| id | legacy ids | item | blocked on | status | evidence |
|---|---|---|---|---|---|
| PW-01 | frontier PL-05 decision-required finding; can-do T2-06 | Decide 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-01 | policy open · implementation absent | owner decision intake; PL-05 sweep |
| LANG-FRES | frontier 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 owner | policy open · implementation deferred | W8 SSOT capability pass; masterplan W3 |
| PL-06 | can-do T2-03 | Enable 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 gate | policy open for enablement inputs; substrate boundary already decided · implementation shipped, traffic blocked | 2026-08-02 F programme; appendix A below |
| LEGAL-01 | frontier PL-17 | Operator 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 owner | policy open · implementation absent | owner decision intake |
| LEGAL-02 | frontier PL-17 | Operator contact and support routes: {contact_email, contact_url, contact_phone?, incident_contact_url?}. | Legal owner | policy open · implementation absent | owner decision intake |
| LEGAL-03 | frontier PL-17 | Operator data-retention policy: {retention_owner, retention_statement_url, data_subject_request_process}. | Legal or compliance owner | policy open · implementation absent | owner decision intake |
| PROD-DEF-01 | backlog:54 | Print 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 policy | policy open · implementation partial | backlog history records the 2026-07-30 baseline |
| PROD-IA-01 | backlog: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 SettingsIaCutover | policy open · implementation partial | admin IA strategy |
| PROD-PLAY-01 | backlog:84 | A 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 audience | policy open · implementation absent | backlog history |
| PROD-SE-01 | backlog:92 | Site-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 extends | policy open · implementation partial | backlog history |
| PROD-WPUI-01 | backlog:107 | Adopt 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 boundary | policy open · implementation partial | backlog history |
| PROD-REV-01 | backlog:110 | Reduce 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 interaction | policy open · implementation absent | backlog history W10-07 row |
| PROD-XOUT-01 | backlog:111 | Redesign 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 surfaces | policy open · implementation partial | backlog history |
| PROD-ICON-01 | backlog:112 | Replace 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 preserved | policy open · implementation partial | backlog history |
| PROD-FT-01 | backlog:150 | Full 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 set | policy open · implementation partial | backlog history |
| PROD-FT-02 | backlog:152 | Per-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 limits | policy open · implementation absent | backlog history |
| PROD-HELP-01 | backlog:158 | Fuse 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 decision | policy open · implementation absent | backlog history |
| PROD-AI-01 | backlog:165 | A 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 behaviour | policy open · implementation absent | backlog history; appendix A below |
| UX-ANSUI-01 | tasklist 3.2.11 residue; UX-ANS-01 follow-on | The 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 shape | policy decided — precedence settled by D005 · implementation absent | Answer 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.
| id | legacy ids | item | blocked on | status | evidence |
|---|---|---|---|---|---|
| UX-01 | frontier UX-01 | Public 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-03 | policy open · implementation partial | 2026-08-17 launch readiness |
| PL-07 | can-do T2-04 | External-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-01 | policy open · implementation shipped for the local tier | Service Operations; owner decision intake |
| PL-12 / OPS-LOG-01 | can-do T4-01 | Access-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-01 | policy open · implementation shipped for the control, absent for the governance | Service Operations; owner decision intake |
| PL-13 / OPS-BACKUP-01 | can-do T4-02 | Off-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-01 | policy open · implementation absent off-host | 2026-08-17 launch readiness |
| PL-14 / IMG-01 | can-do T4-03 | Image 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-01 | policy open · implementation absent | owner decision intake |
| PL-15 / OPS-ALERT-01 | can-do T4-04 | Health 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-01 | policy open · implementation absent | 2026-08-17 launch readiness |
| DEBUG-01 | frontier DEBUG-01 | Public-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-01 | policy open · implementation shipped for the bench posture | owner decision intake |
| PL-17 | frontier PL-17 | Public legal drafts are comprehensive and live, but every legal and operator value in them is still a placeholder. | LEGAL-01, LEGAL-02, LEGAL-03 | policy open · implementation partial | 2026-08-17 launch readiness |
| PL-18 | frontier PL-18 | The Terms draft states best-effort service with no SLA. Effective date, operator identity, jurisdiction and legal review remain owner-supplied. | LEGAL-01, LEGAL-03 | policy open · implementation partial | owner 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
| id | legacy ids | item | blocked on | status | evidence |
|---|---|---|---|---|---|
| REL-01 | frontier PL-08; can-do T3-25 | Canonical repository identity: {canonical_repo_url, immutable_commit_sha, protected_ci_workflow_url}. Unblocks source lineage, change review and commit-bound release provenance. | Canonical release owner | policy open · implementation absent | owner decision intake |
| REL-02 | frontier PL-08 | Locked 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 owner | policy open · implementation absent | owner decision intake |
| REL-03 | frontier PL-08 | Quality, 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 owner | policy open · implementation absent | owner decision intake |
| REL-04 | frontier PL-08 | Signing 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 owner | policy open · implementation absent | owner 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.
| id | legacy ids | item — unblocks → consumers | blocked on | status | evidence |
|---|---|---|---|---|---|
| T3-01 | can-do T3-01 | package.json — scripts, package constraints and the block/icon build entry points → FE-5, W9-07 | REL-02 | policy decided · implementation absent | BUILDING.md:7-12,88-91 |
| T3-02 | can-do T3-02 | package-lock.json — deterministic dependency installation and reproducible Node-backed builds; do not synthesize a lock from guesses → FE-5, W9-07 | REL-02 | policy decided · implementation absent | BUILDING.md:7-12,88-91 |
| T3-03 | can-do T3-03 | composer.json — declared PHP dependency constraints, autoload intent and package tooling | REL-02 | policy decided · implementation absent | BUILDING.md:29-35 |
| T3-04 | can-do T3-04 | composer.lock — deterministic PHP dependency reconstruction and review; do not infer it from vendor/ → BE-1, BE-9, FE-5 | REL-02 | policy decided · implementation absent | BUILDING.md:7-12,37-45 |
| T3-05 | can-do T3-05 | tools/quality-gate.sh — the aggregate quality and release-eligibility check → BE-4, BE-5, BE-6, FE-5 | REL-03 | policy decided · implementation absent | BUILDING.md:14-35 |
| T3-06 | can-do T3-06 | tools/build-release.py — production of the policy-defined install artifact → REL-03 | REL-02 | policy decided · implementation absent | BUILDING.md:64-91; SOURCE-PROVENANCE.md:23-27 |
| T3-07 | can-do T3-07 | tools/build-source-archive.py — a reviewable source artifact assembled under explicit policy | REL-02 | policy decided · implementation absent | BUILDING.md:93-104 |
| T3-08 | can-do T3-08 | tools/verify-release.sh — repeatable structural and integrity checks against a built release → REL-04 | REL-02 | policy decided · implementation absent | BUILDING.md:69-76,108-111 |
| T3-09 | can-do T3-09 | tools/sign-release.sh — policy-controlled signature generation once the protected key exists → REL-04 | REL-04, T3-27 | policy decided · implementation absent | BUILDING.md:106-117 |
| T3-10 | can-do T3-10 | tools/compare-releases.py — reproducibility and drift comparison between independently built artifacts → REL-04 | REL-04 | policy decided · implementation absent | BUILDING.md:106-117 |
| T3-11 | can-do T3-11 | tools/scope-dependencies.php — collision and scoping analysis, and the intended transformed dependency build → BE-1 | REL-02 | policy decided · implementation absent | BUILDING.md:37-52; SOURCE-PROVENANCE.md:23-27 |
| T3-12 | can-do T3-12 | tools/toolchain.json — reproducible selection of build tools and versions; do not invent pins → REL-02, W9-07 | REL-02 | policy decided · implementation absent | BUILDING.md:7-12 |
| T3-13 | can-do T3-13 | tools/dependency-policy.json — enforceable allow, deny and review rules for shipped dependencies → BE-9 | REL-02 | policy decided · implementation absent | BUILDING.md:37-45 |
| T3-14 | can-do T3-14 | tools/scoping-policy.json — deterministic namespace and scoping decisions → BE-1 | REL-02 | policy decided · implementation absent | BUILDING.md:37-45 |
| T3-15 | can-do T3-15 | tools/release-policy.json — machine-checkable release contents and authorization gates → BE-8 | REL-03 | policy decided · implementation absent | BUILDING.md:54-57,78-91 |
| T3-16 | can-do T3-16 | tools/source-archive-policy.json — machine-checkable inclusion and exclusion rules for the source artifact | REL-03 | policy decided · implementation absent | BUILDING.md:93-104 |
| T3-17 | can-do T3-17 | tools/build-icons.mjs — reproducible regeneration of the shipped icon assets | REL-02 | policy decided · implementation absent | provenance/assets.json:18-29,32-42; SOURCE-PROVENANCE.md:18-21 |
| T3-18 | can-do T3-18 | tools/lucide-icons.json — reviewable, reproducible icon selection; do not infer a manifest from output | REL-02 | policy decided · implementation absent | provenance/assets.json:18-29; SOURCE-PROVENANCE.md:18-21 |
| T3-19 | can-do T3-19 | tests/ — the absent runtime regression gate → BE-4, BE-5, BE-6 | REL-03 | policy decided · implementation absent | BUILDING.md:29-35,64-91 |
| T3-20 | can-do T3-20 | phpunit.xml — the PHP test bootstrap, suites and execution contract | REL-03 | policy decided · implementation absent | BUILDING.md:29-35 |
| T3-21 | can-do T3-21 | phpcs.xml — the coding-standard gate and its exclusions | REL-03 | policy decided · implementation absent | BUILDING.md:29-35 |
| T3-22 | can-do T3-22 | .github/ workflow — automated execution of the restored build, test and release gates → BE-2, BE-8 | REL-01, REL-03 | policy decided · implementation absent | SOURCE-PROVENANCE.md:7-16; BUILDING.md:64-91 |
| T3-23 | can-do T3-23 | src/ — maintainable, reproducible Gutenberg rebuilds including A71, A73 and A77 without the sanctioned companion override; readable build/ is not a substitute → W9-07 | REL-02 | policy decided · implementation absent | BUILDING.md:3-12,93-104; build/quiz/index.js:1-9,43-337,339 |
| T3-24 | can-do T3-24 | vendor/composer/installed.json — reconstruction and audit of the installed dependency graph; only the Composer runtime autoload files exist, and vendor/ is never hand-edited | REL-02 | policy decided · implementation absent | BUILDING.md:37-45; SOURCE-PROVENANCE.md:23-27 |
| T3-25 | can-do T3-25 | Git 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-01 | REL-01 | policy decided · implementation absent | SOURCE-PROVENANCE.md:3-16,23-27 |
| T3-26 | can-do T3-26 | provenance/* 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-03 | REL-03 | policy decided · implementation absent | provenance/assets.json:12,29,42,63; SOURCE-PROVENANCE.md:18-21 |
| T3-27 | can-do T3-27 | A 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-04 | REL-04 | policy decided · implementation absent | BUILDING.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.
| id | legacy ids | item | blocked on | status | evidence |
|---|---|---|---|---|---|
| FE-5 | masterplan resolution ledger | Studio 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-05 | policy decided · implementation absent | masterplan resolution ledger |
| BE-1 | masterplan resolution ledger | mPDF and vendor pruning. | T3-04, T3-11, T3-14 | policy decided · implementation absent | masterplan resolution ledger |
| BE-2 | masterplan resolution ledger | PHP floor and compatibility claims, which require CI configuration. | T3-22 | policy decided · implementation absent | masterplan resolution ledger |
| BE-4 | masterplan resolution ledger | GenerateController decomposition — source work gated on the absent quality gate and tests. | T3-05, T3-19 | policy decided · implementation absent | masterplan resolution ledger |
| BE-5 | masterplan resolution ledger | PdfGenerator injection, tied to BE-4 and the same absent gate. | BE-4, T3-05, T3-19 | policy decided · implementation absent | masterplan resolution ledger |
| BE-6 | masterplan resolution ledger | OpenRouter settle and release deduplication — refactor work gated on the absent tests and quality gate. | T3-05, T3-19 | policy decided · implementation absent | masterplan resolution ledger |
| BE-8 | masterplan resolution ledger | Tested up to must come from compatibility CI and release metadata, not from an assertion. | T3-15, T3-22 | policy decided · implementation absent | masterplan resolution ledger |
| BE-9 | masterplan resolution ledger | random_compat removal. | T3-04, T3-13 | policy decided · implementation absent | masterplan resolution ledger |
| W9-07 | masterplan 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-12 | policy decided · implementation absent | masterplan 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.
| id | legacy ids | item | blocked on | status | evidence |
|---|---|---|---|---|---|
| 3.2.1 CopyAndDeadEnds | tasklist 3.2.1; loca/quizwizz#1 | Settings 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-31 | policy decided · implementation shipped — closed 2026-08-31 | 2026-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 SettingsIaCutover | tasklist 3.2.2; overlaps PROD-IA-01 | Execute 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 B | policy open · implementation absent | admin IA strategy; restated with a recommendation and a cost in Sheet B of 2026-08-31 corpus triage |
| 3.2.3 ContentProof | tasklist 3.2.3; loca/quizwizz#2 | Publish 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 replacement | policy decided · implementation deferred — corpus replacement inbound | retired 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-001 | tasklist 3.2.4; loca/quizwizz#3 | Incomplete 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 reproduced | policy decided · implementation absent — refuted on measurement, no change required | 2026-08-31 corpus repair; 2026-08-31 corpus triage. Gitea loca/quizwizz#3 closed as not reproduced |
| FL-002 | tasklist 3.2.4; loca/quizwizz#4 | Bound portability polling and preserve continuity when a second export or import returns the active job. | reload rehydration and ceiling-resume messaging split to issue #10 | policy decided · implementation shipped — repaired scope closed | Polling 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-003 | tasklist 3.2.4; loca/quizwizz#5 | Provider 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 bench | policy open · implementation absent | retired 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 WalkNotesToWiki | tasklist 3.2.5 | Distil 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 measurement | policy decided · implementation absent — terminal-blocked on the absent walk-event store | retired task log 3.2.5; the search and its result are on 2026-08-31 corpus triage |
| 3.2.7 ChoiceCardsRenderBare | tasklist 3.2.7; loca/quizwizz#6 | fieldset.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-30 | policy decided · implementation shipped — closed 2026-08-30 | 2026-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 IaMockupAsScratchpad | tasklist 3.2.8 | A 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 B | policy open · implementation absent | retired 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
Wizzardmisspelling 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.
| id | legacy ids | item | blocked on | status | evidence |
|---|---|---|---|---|---|
| TOUR-01 | 2026-08-25 corpus finding 1; loca/quizwizz#7 | The 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-31 | policy decided · implementation shipped — closed | 2026-08-31 corpus repair, slice A; original UI tour:102 |
| TOUR-02 | 2026-08-25 corpus finding 2; loca/quizwizz#8 | The empty-state block now renders in tbody, is absent from top tablenav, and no longer paints over thead. | nothing — closed 2026-08-31 | policy decided · implementation shipped — closed | 2026-08-31 corpus repair, slice A, 92ea358; original UI tour:103 |
| TOUR-03 | 2026-08-25 corpus finding 3 | Active-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 A | policy open · implementation absent | Sheet A of 2026-08-31 corpus triage; predicates and renderer at includes/Admin/ListTables.php:235-312,451-464 |
| TOUR-04 | 2026-08-25 corpus finding 4 | Editor labels and helper descriptions now occupy separate block lines with a measured 5 px gap. | nothing — closed 2026-08-31 | policy decided · implementation shipped — closed | 2026-08-31 corpus repair, slice F, b3ee3df |
| TOUR-05 | 2026-08-25 corpus finding 5 | All four answer flags are visible at rest; selection is emphasis, not visibility. | nothing — closed 2026-08-31 | policy decided · implementation shipped — closed | 2026-08-31 corpus repair, slice F, b3ee3df |
| TOUR-06 | 2026-08-25 corpus finding 6 | Type-specific helper copy now follows the selected question type and updates when the type changes. | nothing — closed 2026-08-31 | policy decided · implementation shipped — closed | 2026-08-31 corpus repair, slice F, b3ee3df |
| TOUR-07 | 2026-08-25 corpus finding 7 | Settings sticky-bar occlusion was not reproduced; a separate JS geometry defect was later repaired. | nothing — reported visual defect closed as not reproduced | policy decided · implementation absent — refuted on measurement, no change required | The 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-08 | 2026-08-25 corpus finding 8 | Global 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 acceptance | policy decided · implementation partial | Commit 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-09 | 2026-08-25 corpus finding 9 | The 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 superseded | policy open · implementation absent — the 3.2.7 card treatment is deliberately unchanged | Sheet A of 2026-08-31 corpus triage; card rules assets/css/qwizz-admin-settings-layout.css:243-305 |
| TOUR-10 | 2026-08-25 corpus finding 10 | At 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-31 | policy decided · implementation shipped — closed | 2026-08-31 corpus repair, slices E and F, f02cba9 and b3ee3df |
| TOUR-11 | 2026-08-25 corpus finding 11 | Supply copy now uses _n() and renders has 1 usable question versus has 2 usable questions. | nothing — closed 2026-08-31 | policy decided · implementation shipped — closed | 2026-08-31 corpus repair, slice A, 92ea358; includes/Subject/SubjectSupplyFilter.php:144-151 |
| TOUR-12 | 2026-08-25 corpus finding 12 | The 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-31 | policy decided · implementation shipped — closed | 2026-08-31 corpus repair, slice A, 92ea358 |
| TOUR-13 | 2026-08-25 corpus finding 13 | The German archive search-miss string is emitted by the Twenty Twenty-Five theme, not QuizWizz. | Owner/site content — Sheet A | policy open · implementation absent — theme-owned, deliberately not overridden | Sheet A of 2026-08-31 corpus triage; wp/wp-content/themes/twentytwentyfive/templates/archive.html:1-11 |
| TOUR-14 | 2026-08-25 corpus finding 14 | Whole search-result bodies and the foreign [ays_quiz] shortcode come from the Twenty Twenty-Five query-loop pattern, not QuizWizz. | Owner/site content — Sheet A | policy open · implementation absent — theme-owned, deliberately not overridden | Sheet 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-15 | 2026-08-25 corpus finding 15 | Split 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 A | policy open · implementation partial — misspelling repair shipped, canonical naming absent | 2026-08-31 corpus repair, slice B; Sheet A of corpus triage |
| TOUR-16 | 2026-08-25 corpus finding 16 | The 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-31 | policy decided · implementation shipped — closed | 2026-08-31 corpus repair, slices B and E, 6a28df6 and f02cba9 |
| TOUR-17 | 2026-08-25 corpus finding 17 | Corrected 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-31 | policy decided · implementation shipped — closed | 2026-08-31 corpus repair, slice B, 6a28df6 |
| TOUR-18 | 2026-08-25 corpus finding 18 | The question-row remove action now computes a destructive rest colour while retaining its 44 px target and unchanged action contract. | nothing — closed 2026-08-31 | policy decided · implementation shipped — closed | 2026-08-31 corpus repair, slice F, b3ee3df |
| TOUR-19 | 2026-08-25 corpus finding 19 | Per-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-02 | policy decided · implementation shipped — browser acceptance closed; supersedes the 2026-08-31 fixture limitation | UX receipt; agent://SliceE2:96-105; local://qwizz-mutation-matrix.md:95-103 |
| TOUR-20 | 2026-08-25 corpus finding 20 | The 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 route | policy decided · implementation shipped in source — browser acceptance open, no locked-quiz fixture | 2026-08-31 corpus repair, slice G, 2327946; fixture limitation on corpus triage |
| TOUR-21 | 2026-08-25 corpus finding 21 | Test 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 replacement | policy decided · implementation deferred — corpus replacement inbound | 2026-08-31 corpus triage; original UI tour:122 |
| TOUR-22 | 2026-08-25 corpus finding 22 | Duplicate subject names on different slugs. Taxonomy-content cleanup is intentionally not measured against the set being replaced. | inbound corpus replacement | policy decided · implementation deferred — corpus replacement inbound | 2026-08-31 corpus triage; original UI tour:123 |
| TOUR-23 | 2026-08-25 corpus finding 23 | The 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-31 | policy decided · implementation shipped — closed | 2026-08-31 corpus repair, accepted slice H proof after 33989f9 |
| TOUR-24 | 2026-08-25 corpus finding 24 | Split 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 case | policy open for 24a · implementation partial — 24b shell theme shipped in 2327946, 24a composition undecided | 2026-08-31 corpus repair, slice G; Sheet A and fixture limitation on corpus triage |
| TOUR-25 | 2026-08-25 corpus finding 25 | An invalid share-play token serves the front page | nothing — closed by Cluster 5 on 2026-08-27 | policy decided · implementation shipped — closed 2026-08-27 | 2026-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.
| id | legacy ids | item | blocked on | status | evidence |
|---|---|---|---|---|---|
| TNDM-02 | TNDM item 02 | Taxonomy 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 meant | policy open · implementation absent | 2026-08-25 TNDM UI review:453 |
| TNDM-15 | TNDM item 15, second half | Hide “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 now | policy open · implementation absent by design | 2026-08-25 TNDM UI review:455 |
| TNDM-09R | TNDM item 09 reachability | The 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 two | policy open · implementation shipped but unreachable | 2026-08-25 TNDM UI review:457 |
| TNDM-RAIL | mobile statistics rail | A 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-so | policy open · implementation shipped, collapse behaviour absent | 2026-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.
| id | legacy ids | item | blocked on | status | evidence |
|---|---|---|---|---|---|
| 3.1.2 SourceInventoryAndProvenance | tasklist 3.1.2 | Register 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 replacement | policy decided · implementation deferred — corpus replacement inbound | question corpus strategy |
| 3.1.3 CanonicalNormalisationAndLanguageTags | tasklist 3.1.3 | Normalize 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.2 | policy decided · implementation deferred — corpus replacement inbound | question corpus strategy |
| 3.1.4 CrossDatasetDeduplication | tasklist 3.1.4 | Cluster likely duplicates across sources and retain winner, loser, rule, reviewer state and both provenances. | inbound corpus replacement after 3.1.3 | policy decided · implementation deferred — corpus replacement inbound | question corpus forensics |
| 3.1.5 QualityGateAndGoldSelection | tasklist 3.1.5 | Score canonical records and retain named reasons for gold, usable and reject buckets. | inbound corpus replacement after 3.1.4 | policy decided · implementation deferred — corpus replacement inbound | question corpus strategy |
| 3.1.6 PackV1Emission | tasklist 3.1.6 | Emit accepted records as importer-valid pack-v1 files with their projection manifest. | inbound corpus replacement after 3.1.5 | policy decided · implementation deferred — corpus replacement inbound | 2026-08-19 corpus import |
| 3.1.7 RichTypeConsumerGate | tasklist 3.1.7 | Name an authorising game or screen before building any type beyond supported multiple and boolean; document authoring, storage, player and scoring contracts. | inbound corpus replacement | policy open · implementation deferred — corpus replacement inbound | question corpus strategy |
| 3.1.8 FrEsShipOrDrop | tasklist 3.1.8; see LANG-FRES | Decide 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-FRES | policy open · implementation deferred pending decision | W8 SSOT capability pass; Sheet E of 2026-08-31 corpus triage |
| 3.1.9 SubjectTaxonomyShape | tasklist 3.1.9; overlaps TNDM-02 | Decide intended qw_subject depth and minimum questions per subject while preserving importable real slugs. | inbound corpus replacement | policy open · implementation deferred — corpus replacement inbound | subject sufficiency census, a dated pre-replacement measurement |
| B002 | now.md open item 3 | Sufficiency 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 census | policy open · implementation deferred — corpus replacement inbound | 2026-08-19 question corpus audit |
8. Documentation, truth and recurring verification
| id | legacy ids | item | blocked on | status | evidence |
|---|---|---|---|---|---|
| ArchiveFolder | tasklist 1.1.2 | Decide 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 E | policy open · implementation partial by design | QuizWizz audits; Sheet E of 2026-08-31 corpus triage |
| ReverifyClosedRows | tasklist 2.2.1 | Every 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-31 | policy decided · implementation shipped — documentation complete 2026-08-31 | masterplan, Closed-row reverification |
| ArchiveVsLiveWarning | tasklist 2.2.2 | The 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-31 | policy decided · implementation shipped — documentation complete 2026-08-31 | 📍 Now, Archive versus live source |
| ProbeBaseline | tasklist 2.2.3 | Current-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-02 | policy decided · implementation shipped — documentation current 2026-09-02 | probe harness; amended 2026-09-02 receipt |
| W0 fixture discipline | masterplan W0 | Establish 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-actionable | policy decided · implementation partial | masterplan ordered waves; fixture boundaries on 2026-08-31 corpus repair |
| W6 recurring discovery | masterplan W6; frontier PL-05 | Run 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 — recurring | policy decided · implementation recurring | masterplan 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.
| id | item | reopen when | evidence |
|---|---|---|---|
| T4-05 | CDN 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 SegmentedControlMarkupMismatch | Segmented 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.
| id | subject | evidence |
|---|---|---|
| T5-01 | W5 Site Health and Privacy expanded-state captures, 2026-07-31 | masterplan retained-defects table |
| T5-02 | W4 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-03 | German 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-04 | U-9 duplicate static-front-page heading, corrected with one-h1 desktop and mobile hard-reload evidence | 2026-07-31 W6 regression sweep:13 |
| T5-05 | PL-04 Site Health and Privacy integration disposition, 2026-07-31; the core log-location recommendation is not a failed QuizWizz integration | masterplan retained-defects table |
| T5-06 | Six direct admin cache paths: after mtime-only reinstalls all six Dashboard and MetaBoxes ?ver= URLs changed and transferred nonzero fresh bytes | W8 SSOT capability pass:145-154 |
9. Browser tooling and tandem showcase
| id | legacy ids | item | blocked on | status | evidence |
|---|---|---|---|---|---|
| SingleSignOnSomeday | tasklist 1.4.7 | Use 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 F | policy open · implementation absent, unscheduled by decision | Sheet F of 2026-08-31 corpus triage; retired task log 1.4.7, recorded 2026-08-18; the task log completed record |
| EgoVersusRelay | tasklist 4.1.3 | A 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 default | policy decided · implementation shipped — documentation complete, closed 2026-08-31 | Service Operations:151-209 |
| HARNESS-SETTINGS-CAS | adversarial-review blocker 3 | Bind 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 satisfied | policy decided · implementation shipped — bench harness only; P1 resolved | scripts/quizwizz-browser-smoke.js:887-907,991-1015,1094-1140,1180-1220; agent://HarnessFixer; agent://ReVerdict2. |
| SETTINGS-ENDPOINT-CAS | Gitea #13 | Make 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-up | policy decided · implementation absent; open #13 | wp/wp-content/plugins/quizwizz/includes/Rest/SettingsController.php:101-107,148-157; #13; agent://ReVerdict2. |
| HARNESS-EXTKILL | post-review browser-harness limitation | Eliminate 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-actionable | policy decided · implementation partial; guarded in-process cleanup shipped, external-kill cleanup absent | scripts/quizwizz-browser-smoke.js:1-13,660-868,2763-2820; probe harness; review close-out. |
| TenStopAcceptance | tasklist 4.2.2 | Run 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 F | policy decided · implementation partial, 3 of 10 | Sheet F of 2026-08-31 corpus triage; tandem showcase guide |
| ResumeAndRecovery | tasklist 4.2.3 | Settle 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 F | policy open · implementation absent | Sheet F of 2026-08-31 corpus triage; tandem showcase guide |
| SpeechSynchronization | tasklist 4.2.4 | Ensure 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 F | policy decided · implementation absent | Sheet F of 2026-08-31 corpus triage; tandem showcase guide |
| EvidenceReconciliation | tasklist 4.2.5 | Reconcile 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.5 | policy decided · implementation absent — terminal-blocked behind 3.2.5 on the absent walk-event store | 2026-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.
| id | legacy ids | item | blocked on | status | evidence |
|---|---|---|---|---|---|
| YAML-12 | Gitea #12 | Add 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 issue | policy decided for canonical JSON and YAML-subset boundary · implementation absent | issue #12; polish-drive receipt |
| GLITCH-INTAKE | S5 operator intake | Supply 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 list | policy open · implementation partial — fixed steps shipped, intake absent | operator ruling |
| IDEA-DARK | 2026-09-01 idea intake | Backend dark mode versus a full WizzStizzl Wiz admin theme; hidden/off by default. | product owner choosing scope and appearance | policy open · implementation absent | operator intake |
| IDEA-ICONS | 2026-09-01 idea intake | Emoji JollyJoy versus icon BuizzyBuzz glyph-set toggle. | product owner choosing the sets and toggle contract | policy open · implementation absent | operator intake |
| IDEA-MODIFIERS | 2026-09-01 idea intake | Points economy — kingconomic/TinyQiz qConomy raffle/lottery; limited-lives hearts; per-question countdown as a shrinking line. | product owner defining rules, accounting and failure behavior | policy open · implementation absent | operator intake |
| IDEA-INTERLANG | 2026-09-01 idea intake | Same question and correct answer across languages, with different distractors. | product and content owner defining cross-language identity and validation | policy open · implementation absent | operator intake |
| IDEA-IMGGEN | 2026-09-01 idea intake | Image-generation quizzes, including art styles and pattern mode. | product, provider, safety and provenance decisions | policy open · implementation absent | operator intake |
| IDEA-MASHUP | 2026-09-01 idea intake | Wizard speed-quiz mashup with high-fidelity TTS and an animated DiceBear-style wiz face. | product, audio/provider and animation decisions | policy open · implementation absent | operator intake |
| IDEA-TRIVIA-PLUS | 2026-09-01 idea intake | Mascot, music and TTS layers on Trivia HTML. | product owner plus self-contained-export and media-rights contracts | policy open · implementation absent | operator intake |
| IDEA-STARTER | 2026-09-01 idea intake | Starter-library get-started page following 002-admin-get-started.png. | product/IA acceptance for the reference behavior | policy open · implementation absent | operator intake |
| IDEA-INSPECTOR | 2026-09-01 idea intake | Further block-inspector features: theme override and per-block play-page override. | product owner deciding precedence and override scope | policy open · implementation absent | operator intake |
| DEFERRED-S9-AUDIT | S9 operator follow-up | Deep 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-up | policy decided for audit scope · implementation deferred | S9 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.
| id | legacy ids | item | blocked on | status | evidence |
|---|---|---|---|---|---|
| UIUX-REV-01 | reviewer findings 2 and 10 | Normalize 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-14 | policy decided · implementation shipped — installed on the bench in round F, releaseEligible: false | wp/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-02 | reviewer finding 3 | Delete shadowed/orphaned Settings toolbar declarations and define the shelf geometry once rather than across core, layout and workspace sheets. | nothing — closed 2026-09-14 | policy decided · implementation absent — precondition already gone on measurement, no change required | Round 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-03 | reviewer finding 4 | Remove the now-styleless fine-tune qwizz-editor-item__number--gutter branch and dead .qwizz-editor__count selector. | nothing — closed 2026-09-14 | policy decided · implementation shipped — installed on the bench in round F, releaseEligible: false | wp/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-04 | reviewer finding 5 | Delete the shadowed minified category prelude instead of depending on later selectors to override it. | nothing — closed 2026-09-14 | policy decided · implementation shipped — installed on the bench in round F, releaseEligible: false | wp/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-05 | reviewer finding 6 | Use translatable source copy Your quiz; retain uppercase only as presentation through CSS. | nothing — closed 2026-09-14 | policy decided · implementation shipped — installed on the bench in round F, releaseEligible: false | wp/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-06 | reviewer finding 7 | Remove the phantom public --qw-brand branch and use the resolving --qw-v token directly. | nothing — closed 2026-09-14 | policy decided · implementation absent — precondition already gone on measurement, no change required | Round 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-07 | reviewer finding 8 | Fold appended admin-editor overrides into their owning declarations so source order is not the behavior contract. | nothing — closed 2026-09-14 | policy decided · implementation shipped — installed on the bench in round F, releaseEligible: false | wp/wp-content/plugins/quizwizz/assets/css/qwizz-admin-editor.css; UX repair round section 2; original finding agent://FinalReviewer-2:69-77 |
| UIUX-REV-08 | reviewer finding 9 | Add screen-reader expansion for the non-focusable +N subject-overflow badge, matching the dashbar’s title-plus-assistive-text pattern. | nothing — closed 2026-09-14 | policy 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 round | Marker 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-01 | recovery hazard | Owner 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-up | policy 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-01 | auditor first-control waiver | Re-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-14 | policy decided · implementation shipped — re-scoped to the round-F owned-metric set, releaseEligible: false | Owned-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-02 | auditor Details-cell waiver | Re-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-14 | policy decided · implementation shipped — re-scoped to the round-F owned-metric set, releaseEligible: false | Owned-metric tables in UX repair round sections 3 and 6; metrics.md; original waiver agent://FinalAuditor3 |
| UIUX-GATE-01 | SET-07 post-publication gate correction | Browser 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-02 | policy decided · implementation shipped — harness hardened and mutation-proved; releaseEligible: false | scripts/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-01 | Wave 5 assertion 12; loca/quizwizz #15 | Add 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-actionable | policy 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 stands | Wave 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.
| id | legacy ids | item | blocked on | status | evidence |
|---|---|---|---|---|---|
| UIUX-P1 | round-F retained P1 group — 4 symptoms across 7 findings | Accept 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 owner | policy open · implementation shipped — the sticky bars are the installed design and were deliberately left unchanged; the critique is unresolved judgement | UX repair round section 8; end padding at wp/wp-content/plugins/quizwizz/assets/css/qwizz-finetune.css:110,113,805 |
| UIUX-VIS-01 | round-F new P2, J1-desktop | Category 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 owner | policy open · implementation absent — unresolved critic judgement, no measured defect | UX repair round section 9; findings-after.json |
| UIUX-VIS-02 | round-F new P2, J1-mobile | The Surprise me tile reads the same way at the mobile viewport. | Product or design owner | policy open · implementation absent — unresolved critic judgement, no measured defect | UX repair round section 9; findings-after.json |
| UIUX-VIS-03 | round-F new P2, J1-mobile | The collapsed Customize disclosure gives no indication of what it contains. | Product or design owner | policy open · implementation absent — unresolved critic judgement, no measured defect | UX repair round section 9; findings-after.json |
| UIUX-VIS-04 | round-F new P2, Q1-mobile | The 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 owner | policy open · implementation absent — unresolved critic judgement, no measured defect | UX repair round section 9; findings-after.json |
| UIUX-VIS-05 | round-F new P2, D1-mobile | Subject names repeat across the dashboard cards. | Product or design owner | policy open · implementation absent — unresolved critic judgement, no measured defect | UX repair round section 9; findings-after.json |
| UIUX-VIS-06 | round-F new P2, S1-mobile | The imports card composition is called out. | Product or design owner | policy open · implementation absent — unresolved critic judgement, no measured defect | UX 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.
| id | legacy ids | item | blocked on | status | evidence |
|---|---|---|---|---|---|
| UIUX-SET-01 | phase G deferred item 1; critic top residual from round 4 | Search-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 only | policy decided · implementation deferred — recorded instead of made, and the approved JavaScript change did not extend to this row | wp/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-02 | phase G deferred item 2; mobile keyboard-walk residual | The 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 released | policy decided · implementation shipped — approved JavaScript fix, bench-only and releaseEligible: false | wp/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-03 | phase G round-6 P2 theme | Partially 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 owner | policy open · implementation shipped — the fade mask is the installed design and was deliberately left as shipped; the critique is unresolved | evidence/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-04 | phase G round-6 P2 theme | Helper, 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 owner | policy open · implementation shipped — the installed type scale meets the specification floor; the critique asks for a different scale | evidence/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-05 | phase G round-6 P2 theme | Section-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 owner | policy open · implementation absent — unresolved critic judgement, no measured defect | evidence/2026-09-14-uiux-round/settings/critique-round-6.json (settings-top-desktop.png, element Section header insets) |
| UIUX-SET-06 | phase G round-6 P2 theme | The 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 owner | policy open · implementation absent — core chrome, unresolved critic judgement, no measured overlap | evidence/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-07 | phase G gate-coverage caveat | The 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 work | policy decided · implementation absent — coverage gap measured against installed harness bytes | scripts/quizwizz-browser-smoke.js:3173-3179, assertions at :3081, :3157, :3166; Settings panel premium restyle section 5 |
| UIUX-SET-08 | phase G documentation drift | The 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 work | policy 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 said | what is true | disposition |
|---|---|---|
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|craftallowlist, 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_auditrecords 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 areincludes/Frontend/QuizEmbed.php:104(qwizz-player) andincludes/Frontend/UserSurfaces.php:224(qwizz-rest), whose registrations atQuizEmbed.php:102andUserSurfaces.php:223already supplyPlugin::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 count0.
Retracted 2026-08-19. This measured catalog against catalog. Against installed source the shipped
quizwizz.potwas 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. Thepot_active=1563expectation above remains the 2026-07-31 state, not current. The later corpus-repair refresh atf79feb6recorded 1,655 active entries; the superseding HOLD-remediation refresh at87a0e61records 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 statusespublish=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.
- current status authority: Program Masterplan
- measured state today: 📍 Now · runtime proof boundaries: probe harness
- preserved history of the pages this ledger replaced: Backlog history · Task log completed record
- family index: QuizWizz audits
- release boundary of record:
releaseEligible: false