2026-08-31 HOLD remediation
Quickstart / cheat sheet
Status: accepted on the WRDP bench. The F1–F8 remediation is installed and measured at pushed, clean plugin source/catalog HEAD
87a0e612c358c36e1359e7324ee4f77f09cc0d39. The first fresh code review found that the browser harness left its cancelled portability row behind; the bench-level harness was corrected, replayed green, and the same reviewer then returnedACCEPT. A separate evidence/runtime adversarial audit also returnedACCEPT. The prior remediationHOLDis therefore closed within the bench-only boundary below.Final gates: Wave 11
17/17; all shell waves93/93; superseding cache-disabled browser smoke at2026-08-31T16:40:11.214Zpassed45/45,consoleErrors=[],pageErrors=[], both restoration flags true; catalog1,651active entries /1,649distinct bare msgids /6context entries /4context values; immediate portability-jobs count0, matching cron events0, debug-log delta0 bytes. Exact commands and authority anchors are in Final gate receipt.Release boundary:
releaseEligible: false. These are bench changes and evidence for the release owner, not a release or release authorisation. Read Finding ledger for the matched red→green facts and Exclusions and next transaction before reusing any conclusion.
Status and traceability
The repaired plugin mirror advances from reviewed baseline f79feb6 through four runtime commits and the closing catalog commit: F1 464fb78, F2 c8d7c10, F3 dcdb1a2, F4 d66f1a9, then catalog 87a0e61. Plugin source/catalog HEAD remains pushed and clean at 87a0e61. F5’s shell assertion and the post-review browser zero-residue correction are bench-level harness changes under scripts/, outside the plugin mirror; neither advances that HEAD, and this receipt does not claim either harness correction was committed or pushed by qwgit.
The coordinating issue #9 and FL-002 issue #4 are closed with the evidence below. Lifecycle issue #10 remains open. Closing #9 records completion of the remediation transaction; the fresh code and evidence reviews independently accepted that transaction after the zero-residue harness correction.
Finding ledger
Every F1–F5 browser or shell assertion was replayed against one targeted regression, observed red, restored to the exact fixed file, then observed green. Rendered claims below are cache-disabled observations at https://wrdp.loca.zone/wp-admin/admin.php?page=qw-settings; the final full browser authority is the superseding OMP browser.run execution started 2026-08-31T16:40:11.214Z against the corrected bench-level scripts/quizwizz-browser-smoke.js. F6–F8 are evidence-truth corrections, so their table cells say explicitly where a runtime mutation is not applicable.
| ID | HOLD finding and correction | Behavioral gate and mutation evidence |
|---|---|---|
| F1 | A duplicate portability request returned HTTP 409 with an active job_id, but the client rendered the conflict and abandoned polling. Commit 464fb78 validates and adopts the conflict UUID before restarting polling at wp/wp-content/plugins/quizwizz/assets/js/qwizz-admin-settings.js:1662-1684; import uses the same path at :1699-1713. | Gate: scripts/quizwizz-browser-smoke.js:447-528. Red: the regression received 409, stayed on the frozen conflict for 1.8 seconds and reported resumed=false. Green: the restored fix rendered the conflict and then resumed export: queued (preflight; 0/0). The corrected gate also makes zero residue part of the run: cancel success and exact-row cleanup are mandatory, not a manual afterthought. |
| F2 | The mobile sticky-offset path could use the stale fallback and treat a target below the 276 px shelf as visible. Commit c8d7c10 reads resolved scrollMarginTop, keeps a guarded 172 px desktop fallback, and rebuilds the observer on resize at wp/wp-content/plugins/quizwizz/assets/js/qwizz-admin-settings.js:994-1017,1305-1321. | Gate: scripts/quizwizz-browser-smoke.js:510-540. Red: resolvedScrollMarginTop=276, targetTop=141.296875, clears=false. Green: resolvedScrollMarginTop=276, targetTop=288.296875, clears=true. |
| F3 | Multi-section settings search routed every fallback through the first matching section. Commit dcdb1a2 emits one section-specific fallback from each deduplicated section at wp/wp-content/plugins/quizwizz/assets/js/qwizz-admin-settings.js:1132-1169. | Gate: scripts/quizwizz-browser-smoke.js:542-565. Red: query print returned four rows all labelled ONLINE PLAYER, unique=1, pdfRowFound=false. Green: it returned four unique rows, pdfRowFound=true, with both current workspace and highlighted target equal to qw-pdf. |
| F4 | Export, import and cancel overrode their visible labels with accessible names that did not contain those labels. Commit d66f1a9 removes those overrides while retaining Download’s containing name at wp/wp-content/plugins/quizwizz/includes/Admin/views/settings-page.php:897-910. | Gate: scripts/quizwizz-browser-smoke.js:567-582. Red: export had visible Create export, accessible Create portability export, contains=false. Green: restored export reported contains=true; the full gate also passed import, Download and cancel. |
| F5 | Wave 11’s old source-token check could not prove that the rendered usable-count column used the same authority as the supply filter. The replacement creates real question, quiz and taxonomy fixtures, checks core count 1 against usable count 0, exercises the registered empty-supply filter and renders the real column at scripts/quizwizz-probe.sh:2847-3014; production rendering reads the usable-count payload at wp/wp-content/plugins/quizwizz/includes/Subject/SubjectSupplyFilter.php:227-258. No plugin source fix was needed. | Gate: Wave 11 assertion supply count column renders usable authority. Red: the $term->count mutant exited 1 with one failure and rendered <bdi class="qwizz-list-count" dir="auto">1</bdi> where zero was required. Green: the restored renderer emitted <bdi class="qwizz-list-count" dir="auto">0</bdi> and Wave 11 returned 17/17, failures 0. |
| F6 | Standing TOUR-07 prose conflated a not-reproduced occlusion report with a visual fix. The corrected q5vault/now.md states that the earlier item closed as not reproduced, retains ebf4f2c / f02cba9 only as source-debt removal, and points to this receipt for the separately proven F2 NaN/fallback defect. | Documentation-truth correction; no separate code mutation applies. Its live falsifier is the F2 geometry gate above: the targeted regression lands at 141.296875, while the restored implementation lands at 288.296875 beneath a resolved 276 px contract. |
| F7 | Standing catalog figures still described the 2026-08-27 stage. q5vault/now.md now records the post-remediation catalog at 87a0e61 and explains the active-entry versus distinct-bare-msgid gap. | Catalog recount keyed records by msgctxt plus msgid: 1,651 active, 1,649 distinct bare msgids, 6 context entries, 4 context values, and zero fuzzy, untranslated, POT-missing or obsolete entries. This is a measurement correction, not a runtime behavior; a code mutation is not applicable. |
| F8 | W1 prose overstated the durable browser smoke as site-wide. q5vault/audits/qwizz/masterplan.md now limits the claim to the Builder route and keeps W1 open — partly re-proven. | The executable boundary is scripts/quizwizz-browser-smoke.js:128-155: only /?page_id=57, one page H1, visible #qwizz-builder-title, resolved aria-labelledby, and horizontal overflow are checked at the two viewports declared at :14-17. No root/static-front, account, footer, Privacy, Terms or Operator-Contact route is exercised, so a mutation is not applicable to this scope correction. |
Final gate receipt
| Gate | Exact observed receipt | Authority |
|---|---|---|
| Wave 11 | ./scripts/quizwizz-probe.sh --wave 11 exited 0: # Wave 11 corpus-repair assertions=17 failures=0; 1..17; # assertions=17 failures=0. | The behavioral supply packet is invoked at scripts/quizwizz-probe.sh:3008-3014; the dynamic summary, TAP plan and non-zero-on-failure exit are at :3040-3060. |
| All shell waves | ./scripts/quizwizz-probe.sh --wave all exited 0: # Wave 11 corpus-repair assertions=17 failures=0; 1..93; # assertions=93 failures=0. | The all dispatcher runs waves 1–11 at scripts/quizwizz-probe.sh:3043-3056; totals are computed from actual results at :3058-3060. |
| Browser | Superseding cache-disabled OMP browser.run, started 2026-08-31T16:40:11.214Z, returned 45 assertion objects and all passed: consoleErrors=[], pageErrors=[], restoration.settingsRestored=true, restoration.editorRestored=true, overallPass=true. Its restoration note says portability smoke job 2b710ef4-938c-44c7-80b3-1bf4d2a7c282 cancelled and deleted; the immediate table count returned 0. | Observed against https://wrdp.loca.zone; F1–F4 contracts are scripts/quizwizz-browser-smoke.js:447-604. Cleanup rejects a non-canonical UUID, requires cancel HTTP success, exact-deletes only the named UUID with status='cancelled' and result_file_id IS NULL, exact-queries absence and throws on failure at :85-100,505-528; body errors make overallPass false and throw at :670-675,707-715. The script requires the OMP page object at :4-9; direct node startup is not the browser gate. |
| Catalog | At mirror 87a0e61: 1,651 active entries representing 1,649 distinct bare msgids; 6 entries carry msgctxt across 4 context values; fuzzy 0, untranslated 0, POT-missing 0, obsolete 0. | Post-regeneration recount of wp/wp-content/plugins/quizwizz/languages/quizwizz.pot and quizwizz-de_DE.po, keyed by msgctxt plus msgid; the commit contains the POT/PO/MO refresh. This is catalog truth, not a rendered-language claim. |
| Residue | Immediate post-replay SELECT COUNT(*) FROM wp_qwizz_portability_jobs returned 0; the exact qw_process_portability_job cron query returned only its CSV header, hence 0 events; final stat -c %s logs/debug.log stayed 7043202, equal to the pinned baseline, hence a 0-byte delta. | The hook is registered at wp/wp-content/plugins/quizwizz/includes/Admin/Portability/PortabilityController.php:19-22 and scheduled at includes/Admin/Portability/PortabilityStore.php:97-103. The cleanup is deliberately narrower than a table sweep: only the canonical smoke UUID may be deleted, and only while cancelled with no result file; its exact absence is then queried (scripts/quizwizz-browser-smoke.js:85-100). No unrelated row is claimed as residue or cleanup. |
Post-review zero-residue correction
The first fresh reviewer found that the earlier 2026-08-31T15:36:15.371Z smoke had cancelled its portability job but left the cancelled database row behind. That run is superseded as final browser evidence. The correction makes the smoke transaction self-policing: it takes the UUID from the 409 payload, rejects a non-canonical value, requires the cancel response to be successful, invokes WP-CLI through sudo docker compose, deletes only the exact UUID when status='cancelled' and result_file_id IS NULL, exact-queries that UUID’s absence, and throws on cancellation, command, validation or absence failure (scripts/quizwizz-browser-smoke.js:85-100,505-528,670-675,707-715).
The cache-disabled replay started 2026-08-31T16:40:11.214Z passed 45/45 with consoleErrors=[], pageErrors=[], both restoration flags true and overallPass=true; its restoration note records job 2b710ef4-938c-44c7-80b3-1bf4d2a7c282 cancelled and deleted, and the immediate table count was 0. This correction lives only in the bench-level scripts/ directory, outside the plugin mirror: it is not a plugin commit or pushed harness claim, and pushed clean plugin source/catalog HEAD remains 87a0e612c358c36e1359e7324ee4f77f09cc0d39. The original code reviewer re-read the corrected helper and caller, confirmed the completed-job/artifact race fails safely rather than deleting an artifact-bearing row, and returned ACCEPT, superseding the earlier HOLD.
Exclusions and next transaction
- Fresh verdict accepted. The final read-only evidence/runtime adversarial audit returned
ACCEPTafter checking F6–F8 truth, current 93/93 and 45/45 totals, issue lifecycle, clean pushed plugin HEAD, live residue and thereleaseEligible: falseboundary. The original code reviewer returnedACCEPTafter re-reading the corrected exact-row cleanup seam, superseding its earlier cancelled-rowHOLD; a second narrow reviewer independently returnedACCEPTon the same seam. Those reviewers inspected current source and evidence but did not rerun the shell or browser gates themselves, so the executable authority remains the observed receipts above. - Lifecycle follow-up. Reload rehydration and recovery after the client polling ceiling are excluded here and remain open in issue #10. The conflict-continuity fix does not claim either behavior.
- Corpus untouched. No corpus, taxonomy-content or census row was changed. The eleven rows classified
deferred — corpus replacement inboundremain the set recorded atq5vault/audits/qwizz/open-work.md:40-46,240-254. - Production wiki not built. This transaction created wiki source evidence only. It did not run a production wiki build or deploy, and this page does not claim to be live.
- Release remains ineligible.
releaseEligible: false; the bench mirror and its gates do not bypass the release owner’s locked source and release pipeline.