2026-09-01 QuizWizz mega-polish drive
Close-out status
ACCEPT with waived residuals — all four review P1s resolved; residuals: Gitea #13 (endpoint non-atomic response revision, pre-existing product defect, out of drive scope), external process kill bypasses in-process harness cleanup, benign per-run operator session tokens (never prune blindly), content-identical foreign saves indistinguishable by construction. Plugin scope is accepted at clean mirror HEAD
2da4b577; harness blocker 3 is resolved on final bytes SHA-256deb5266f…. Evidence:scripts/quizwizz-browser-smoke.js:887-907,991-1015,1094-1140,1180-1220;agent://ReVerdict2; E2–E4, E8.Backup-table correction and recovery. A 300-second-clamped browser run was externally killed, bypassing in-process cleanup. It leaked nine owner-1 harness rows and the per-writer cap displaced pre-existing history. The nightly root backup
/home/loca/backups/wrdp/20260901T013013Zdid exist: an operator-approved, eyes-on recovery verified the ten recoverable pre-drive payload SHAs before any live write, deleted exactly the nine leaked rows, restored those ten rows byte-exact and preserved the legitimate later survivor. The accepted table is now 95 rows, ordered-JSON SHA-25686100bbc…, identity SHA-256270478b9…. Intermediate drive-era rows displaced after the root backup remain unrecoverable. Evidence:/tmp/s10-drill-owner1-verified.json,/tmp/s10-live-before-recovery-summary.json,/tmp/s10-live-after-delete-summary.json,/tmp/s10-live-recovered-summary.json,/tmp/s10-post-recovery-baseline.json; E8.Release boundary:
releaseEligible: false. This receipt records bench evidence; it is not a canonical release, release authorisation, or substitute for the release owner’s locked source/release pipeline.
Evidence register
| ID | Evidence used by this receipt |
|---|---|
| E1 | Orchestrator close-out dossier, /tmp/drive-evidence-dossier.md, including S0–S10 verdicts, operator rulings, commit ordering, the earlier bounded browser execution, catalog recount, S9 deviations and gate-close observations. Its browser behavior remains historical evidence; its Settings baseline is superseded by E2–E5 below. |
| E2 | Consolidated gate authority /tmp/s10-gates-evidence.md, including § Final harness re-gate and § Mutation replay on final harness: bounded 46+8+12 browser results, final-byte mutations 2/10/11, exact Settings/backup parity, zero residue, plus shell 94/94 and recovery history. |
| E3 | Final-harness-byte browser authority /tmp/s10-final-harness-browser-{legacy,player,admin-trivia,aggregate}.json plus /tmp/s10-final-harness-regate-{before,after,state-comparison,residue}.json: 60/60 unique, all chunks passing, zero console/page errors, restoration complete and exact state parity. Mutation authority /tmp/s10-final-harness-row{2,10,11}-{red,green}.json: each intended red only, SHA-exact restore, green, all six with complete restoration. Shell authority remains /tmp/s10-post-review-wave-all.tap. |
| E4 | Shell authority scripts/quizwizz-probe.sh:2303-2322,3238-3257; browser selection at scripts/quizwizz-browser-smoke.js:22-55; disposable administrator lifecycle at :648-856; accepted-head predecessor refusal, sealed-response attribution, follow-up equality and guarded restoration at :887-907,991-1015,1094-1140,1180-1220; harness-row-only backup cleanup at :451-532; external-kill limitation at :1-7; endpoint residual at wp/wp-content/plugins/quizwizz/includes/Rest/SettingsController.php:101-107,148-157. |
| E5 | Initial read-only S10.6 facts plus Settings repair/audit artifacts /tmp/s10-settings-final-browser-rest.json, /tmp/s10-settings-final-wpcli.json, /tmp/s10-settings-final-diff-vs-wave7.json, /tmp/s10-settings-backup-residue-before.json, /tmp/s10-attempt-residue-audit.json, /tmp/s10-attempt-residue-cleanup.txt and /tmp/s10-final-residue-audit.json. That initial 94-row limitation is superseded for current state by the recovery evidence in E3/E8. Live lifecycle anchors remain wp/wp-content/plugins/quizwizz/includes/QuizService.php:56-60,151-161,218-220, includes/Frontend/Craft/CraftService.php:286-296, includes/Frontend/EphemeralQuizCleanup.php:10-15. |
| E6 | Archive miner /tmp/mess-miner-report.md:5-12: 13,961 extracted files inventoried; case-insensitive text scan of the whole archive returned no Macarena match. |
| E7 | 14-product WPQP scan and QuizWizz design board, including the 50/50 image ledger, frozen contracts, boundary rulings, corrected dedup map and 8/8 S9 preflight. |
| E8 | Review reports: agent://FinalAuditor (first-lane ACCEPT), agent://FinalReviewer (initial four-P1 HOLD), agent://PluginFixer, agent://HarnessFixer, agent://BackupProbe, agent://ReGate, agent://ReGateFinish, agent://ReVerdict, agent://ReGate2 and agent://ReVerdict2. Final exact status: “ACCEPT with waived residuals — all four review P1s resolved; residuals: Gitea #13 (endpoint non-atomic response revision, pre-existing product defect, out of drive scope), external process kill bypasses in-process harness cleanup, benign per-run operator session tokens (never prune blindly), content-identical foreign saves indistinguishable by construction.” |
S0a–S10 slice receipt
| Slice | Accepted result | Evidence |
|---|---|---|
| S0a — product scan | The 14-product WPQP scan distilled product-specific leads and explicit avoid calls without converting competitor observations into QuizWizz behavior claims. | E7; scan receipt. |
| S0b — design board and preflight | The board reconciles 50 expected captures to 50 present images, freezes behavioral contracts, keeps Admin Lab a non-production lab and recovery a separate boundary, corrects the HTML dedup map, records the archive-wide Macarena negative, and passes the S9 historical-version preflight 8/8. | E7; design-board.md:31-44,256-279,283-303,659-677; E6. |
| S1 — player friction | Commit 4a0a313 adds ceiling-gated sound state, direct resume and Start over behavior, player.autostart, block-inspector autostart control and the auto-advance consequence note. The auto-advance investigation is qualified in the next section. | Mirror commit and E1 §§ S1.1, Mirror status. |
| S2 — play destination | Commit f52f3cd adds player.play_page_id, the shared destination resolver, migrated Library/Craft links, in-page themed rendering and the Tier-1 page selector. | Mirror commit and E1 § Mirror status. |
| S3 — config diet | Commit 9f6d9a2 adds the canonical settings-tier file, Screen Options disclosure, data-tier stamping, hash-tier raising and search-time suspension. | Mirror commit; E4 tier contract. |
| S4 — operator defaults | Commit ed215c5 adds the JSON defaults loader, allowlist tree and schema-aware nested merge with precedence stored > file > shipped. | Mirror commit; E4 defaults contract. |
| S5 — fixed frontend polish | Commit 1c3f68c links Library titles, gates the language badge by count and suppresses the duplicate Craft block title. This is fixed-step delivery only: no operator glitch list arrived, so broader frontend polish is not claimed complete and GLITCH-INTAKE remains open. | Mirror commit; E1 § Operator decisions and wording. |
| S6 — Welcome and dashbar | Commit c29ac2d adds the one-time Welcome frame lifecycle and one five-segment statistics rail across native screens, with cards, bar and slim styles. | Mirror commit; E2 Welcome and superglued-rail gates. |
| S7 — manager love | Commit 6c46a56 adds the one-column Settings layout, inset selection treatment, balanced theme cards, shelf styling and combobox ARIA cleanup. | Mirror commit; E2 single-column and selection-borders gates. |
| S8 — trivia HTML | Commit a08b9d6 adds the policy-gated qw_trivia_html exporter and entry points on list shelves, rows and editor. | Mirror commit; E2 four Trivia HTML assertions. |
| S9 — historical-version guinea pigs | Eight isolated WPQP clones were installed and health-checked without altering the pinned archive roster. One documented 1.3.1 installed-clone-only packaging workaround and the dirty/no-remote deviations remain explicit below. | E1 § S9; E7 S9 preflight. |
| S10 — catalogs, proof, adversarial close | Catalog commit d61d98c closed catalogs; plugin HEAD 2da4b577 resolves the two plugin P1s; bench-harness hardening resolves Settings isolation and backup-history P1s. Shell 94/94, bounded browser 60/60, mutation replays 2/10/11 and the recovered 95-row baseline remain accepted evidence. Final verdict: ACCEPT with four explicit waived residuals, including pre-existing endpoint issue #13. | Mirror commits; scripts/quizwizz-browser-smoke.js:887-907,991-1015,1094-1140,1180-1220; E2–E5, E8. |
S1 auto-advance verdict
The reported downgrade was a site-default-0 outcome, not a JavaScript defect. Quiz 11755 retained a Craft study profile with qw_experience.auto_advance_ms=0, while the live site option held player.auto_advance_ms=2500. Fresh quizzes 11757 and 11801 showed 3-2-1-0, advanced after approximately 2.5 seconds and produced zero console errors. The delivered correction is behavioral clarity: Tier-1 controls plus an ARIA-linked consequence note. ExperienceOptions precedence was deliberately not changed; the current ceiling rule remains visible at includes/Frontend/Craft/ExperienceOptions.php:45-46 and the consequence note at includes/Admin/views/settings-page.php:453-473. Evidence: E1 § S1.1; live DOM observations there identify https://wrdp.loca.zone/?qw_quiz=11757 and ?qw_quiz=11801 and the observed countdown/advance.
Shell red → re-contract → green
The post-S1 run correctly made the obsolete contract red: not ok 48 - passive embed still asks. The contract was then rewritten around the stored setting instead of preserving the old always-ask behavior. Current Wave 7 contributes six outer assertions and its three entry-mode checks are exactly:
passive embed follows autostart settingpassive embed asks under stored autostart=falseplay route forces autostart under stored false
They execute at scripts/quizwizz-probe.sh:2303-2322. After the red/re-contract pair, qw_exposure_settings was restored byte-for-byte at 2,308 bytes. The post-review all-wave run is TAP 1..94, # assertions=94 failures=0, with wave contributions 17, 3, 6, 4, 2, 14, 6, 4, 17, 4, 17; evidence is /tmp/s10-post-review-wave-all.tap. The shell harness’s EXIT/INT/TERM restoration remains the shell safety contract. The current browser-harness baseline is the recovered 95-row table in /tmp/s10-post-recovery-baseline.json, not the superseded 94-row snapshot. Evidence: E2 § Post-review re-gate close-out; E3; E4 shell source.
Browser authority: 60/60, ten new gates
The current cache-disabled authority is three serial bounded chunks: legacy passed 46/46; autostart,auto-resume,sound-toggle,play-destination,tier-selector passed 8/8; and welcome,superglued-rail,single-column,selection-borders,trivia-html passed 12/12. Their aggregate is 60/60 unique assertions, failed=0, consoleErrors=0, pageErrors=0, and restoration complete in all three. Evidence: /tmp/s10-post-review-browser-{legacy,player,admin-trivia,aggregate}.json; E2 §§ Bounded browser chunks and Backup-table recovery and fixed baseline.
| Gate token | Browser-authoritative contract |
|---|---|
autostart | stored player.autostart controls ordinary embedded quiz entry — ordinary embed honors stored state while the explicit play route forces entry. |
auto-resume | stored attempt automatically resumes beyond question one without intro — the rendered player resumes stored progress rather than returning to the intro. |
sound-toggle | sound_default controls one visible sound toggle and its pressed state changes — one visible control, correct initial state, interactive pressed-state transition. |
play-destination | Library CTA honors configured themed play page and zero fallback is accepted — configured and zero-fallback destination behavior is checked from the real admin/player URLs. |
tier-selector | settings tiers hide Expert rows, reveal them at Expert, and suspend during search — rendered Settings visibility and search suspension, not source-token presence. |
welcome | Welcome frame appears once with required copy and stays dismissed — real per-user lifecycle through the rendered admin frame. |
superglued-rail | one superglued statistics rail spans native screens, sticks at admin chrome, and swaps skin in place — node identity, geometry and computed sticky/skin state across native screens. |
single-column | Settings sections remain one measured column at 1280px — rendered geometry at the named viewport. |
selection-borders | fully deselected theme card has no stale selection border or focus; collapsed quiz search clears selected option and active descendant — computed paint plus live combobox ARIA state. |
trivia-html | Trivia HTML generates a downloadable attachment; Trivia HTML playback data is valid and self-contained; Trivia HTML playback makes no HTTP(S) requests; Trivia HTML score arithmetic matches independent canonical answers. |
Corrected execution provenance
Never run the browser gate as one
allinvocation. The accepted execution contract is bounded 46 + 8 + 12 because an external kill can bypass cleanup. Final harness bytes close the attribution race: direct writes refuse a predecessor unequal toacceptedHeadbefore POST; UI writes require that exact head, adopt only the sealed accepted response, enforce post-write GET equality and refuse restoration on a foreign head (scripts/quizwizz-browser-smoke.js:887-907,991-1015,1094-1140,1180-1220). Endpoint response atomicity remains separate open issue #13.
Eleven-row mutation matrix
Each row used an attested live mutant SHA, failed only the named contract, restored the pristine file to the exact recorded SHA and replayed the targeted gate green. Common fixture/precondition assertions stayed green in every red artifact. Evidence: E2 § Eleven-row mutation matrix; E3 mutation manifest and per-row red/green artifacts.
| Row | Gate and mutated seam | Only named red observed |
|---|---|---|
| 1 | autostart — force the ordinary-entry fallback to false while retaining the play-route override in includes/Frontend/QuizEmbed.php | stored player.autostart controls ordinary embedded quiz entry |
| 2 | auto-resume — make prepareIntro() ignore the stored attempt in assets/js/qwizz-player.js | stored attempt automatically resumes beyond question one without intro |
| 3 | sound-toggle — render the sound control unconditionally in assets/js/qwizz-player-renderer.js | sound_default controls one visible sound toggle and its pressed state changes |
| 4 | play-destination — force the URL base to home_url('/') while retaining query arguments in includes/Frontend/PlayDestination.php | Library CTA honors configured themed play page and zero fallback is accepted |
| 5 | tier-selector — remove the Tier-1 selector that hides Expert rows in assets/css/qwizz-admin-settings-workspace.css | settings tiers hide Expert rows, reveal them at Expert, and suspend during search |
| 6 | welcome — replace the seen-state render guard in includes/Admin/Onboarding.php | Welcome frame appears once with required copy and stays dismissed |
| 7 | superglued-rail — narrow the quiz-screen branch so the editor loses its rail in includes/Admin/AdminMenu.php | one superglued statistics rail spans native screens, sticks at admin chrome, and swaps skin in place |
| 8 | single-column — append a desktop rule forcing two Settings grid columns in assets/css/qwizz-admin-settings-layout.css | Settings sections remain one measured column at 1280px |
| 9 | selection-borders — stop collapseSearch() from removing result nodes in assets/js/qwizz-admin-editor.js | collapsed quiz search clears selected option and active descendant |
| 10 | trivia-html — inject one hidden HTTPS image into includes/Frontend/TriviaExport.php | Trivia HTML playback makes no HTTP(S) requests |
| 11 | trivia-html — rotate the first exported canonical correct_idx in includes/Frontend/TriviaExport.php | Trivia HTML score arithmetic matches independent canonical answers |
Adversarial review
Two independent lanes deliberately reached different first verdicts:
- the evidence-auditor returned ACCEPT, with no blocker or judgment finding, after independently checking each named high-risk claim against installed source/call paths, read-only runtime state and the recorded gate outputs. Its lane explicitly did not rerun mutating browser/probe waves. Evidence:
agent://FinalAuditor. - the adversarial reviewer returned HOLD with four P1 blockers. The titles below are reproduced exactly from
agent://FinalReviewer:- [BLOCKER] Preserve attempts across transient resume failures
- [BLOCKER] Authorize every source question before export
- [BLOCKER] Isolate browser gates from live Settings
- [BLOCKER] Preserve concurrent Settings-backup history
Commit 2da4b577 fixes the two plugin blockers and contains exactly assets/js/qwizz-player.js and includes/Frontend/TriviaExport.php. The player now treats only non-408/non-429 4xx responses as definitive: status 0, 408, 429 and 5xx retain the stored token, render the intro without forcing autostart into a replacement, and preserve that choice across Start retries (assets/js/qwizz-player.js:20-23,299-320,323-369). Trivia link gating and payload generation now share per-question current_user_can( 'edit_post', $question_id ) checks in export_context() (includes/Frontend/TriviaExport.php:26-28,33-60). Evidence: agent://PluginFixer; clean mirror close-out in E2.
The harness fixes are deliberately bench-level and unmirrored. Every Settings-writing run provisions a marked disposable administrator and restores the operator session (scripts/quizwizz-browser-smoke.js:648-856); backup cleanup removes only uniquely attributed harness rows and verifies every pre-existing survivor (:451-532). That resolves blocker 4. Per-run operator session tokens are benign and must never be pruned blindly; external process termination remains able to bypass in-process cleanup (:1-7).
Blocker 3 is resolved on final harness bytes SHA-256 deb5266f…. Direct Settings writes refuse any submitted predecessor unequal to the accepted head before POST (scripts/quizwizz-browser-smoke.js:887-907). UI begin requires exact head and backup head (:991-1015); finish records only the sealed accepted response as the next head before attribution, then requires the follow-up GET to match (:1094-1140); restoration checks exact head, submits CAS and re-checks a 409 before refusing (:1180-1220). Adversarial proof injected a foreign revision: the harness did not adopt it and guarded restoration refused it. Content-identical foreign saves remain indistinguishable by construction. Evidence: agent://HarnessFixer; agent://ReVerdict2.
That refusal is intentionally fail-closed and can leave harness test values live for operator repair rather than overwrite a foreign save. One adversarial proof left autostart=false and auto_advance_ms=0; both were repaired to documented true and 2500 before close-out. Evidence: agent://HarnessFixer; /tmp/s10-gates-evidence.md:368-378. Separately, the plugin endpoint’s response is not atomic: it performs save_if_revision(), then separately re-reads Settings and computes revision (wp/wp-content/plugins/quizwizz/includes/Rest/SettingsController.php:101-107,148-157). This pre-existing product defect was surfaced by review, was not introduced or fixed by the drive, and remains open out of scope as Gitea #13.
The final exact verdict is: “ACCEPT with waived residuals — all four review P1s resolved; residuals: Gitea #13 (endpoint non-atomic response revision, pre-existing product defect, out of drive scope), external process kill bypasses in-process harness cleanup, benign per-run operator session tokens (never prune blindly), content-identical foreign saves indistinguishable by construction.” Evidence: agent://ReVerdict2.
Defaults-file and tier semantics
The standing contracts are intentionally split:
- QuizWizz operator defaults is the JSON-file contract, its allowlist, precedence and diagnostics. Stored values outrank file values, which outrank shipped values. Commit
ed215c5implements it. Evidence: E4 defaults page and mirror commit. - QuizWizz settings tiers is the disclosure-only tier contract. Tiers control initial UI visibility; they do not alter defaults, persistence, validation, runtime behavior or API semantics. Commit
9f6d9a2implements it. Evidence: E4 tier page and mirror commit.
The requested YAML front end is not part of this drive. Issue #12 remains open for a first-party YAML-subset reader supporting scalars, maps, lists and comments without an external dependency; JSON remains canonical and the proposed .yaml files are twins of wp-content/quizwizz-defaults.json and config/settings-tiers.json. Evidence: issue #12; E1 § Operator/open items.
S9 historical-version guinea pigs
The eight completed showcases are:
https://wpqp.loca.zone/qw131https://wpqp.loca.zone/qw140https://wpqp.loca.zone/qw150https://wpqp.loca.zone/qw154https://wpqp.loca.zone/qw161https://wpqp.loca.zone/qw170https://wpqp.loca.zone/qw190https://wpqp.loca.zone/qw1100
The S9-only commit is 2e59f7a. The WPQP tree was already dirty on entry from an abandoned 2026-08-19 expansion; the state was classified and left untouched. Push was waived because that repository has no remote. QuizWizz 1.3.1 alone needed an installed-clone-only vendor/composer/platform_check.php floor change from PHP 8.4 to 8.3 for its packaging defect; the archive remained pristine, an amended installed-tree pin was recorded, and bench PHP was 8.3.33. The network health script remained green across all 27 sites and roster files stayed byte-untouched. Evidence: E1 § S9 deviations, hashes and health receipt; E7 design-board S9 preflight.
Macarena negative and German catalog close
The archive miner inventoried 13,961 extracted files and its case-insensitive archive-wide text search returned no occurrence of Macarena; this is a text negative, not a claim about unnamed visual resemblance. Evidence: E6.
Catalog commit d61d98c adds 51 msgids — 47 extracted plus four dynamic tier labels — and removes five stale entries. Final German truth is 1,697 translated, zero fuzzy, zero untranslated. JSON output is complete for 11 named handles plus three hashed catalogs; changed runtime handles are qwizz-block-editor-enhance and qwizz-player. The live German spot-check passed, including “Absolut alles — du wurdest gewarnt”. Evidence: E1 § S10.3; mirror commit; catalog outputs under wp/wp-content/plugins/quizwizz/languages/.
Operator rulings and follow-up intake
| Ruling or open ID | Recorded outcome | Evidence |
|---|---|---|
| Dirty WPQP tree | Investigate; classify the abandoned expansion; leave it untouched. | E1 § Operator decisions and wording; S9 receipt above. |
| WPQP push | Waived by the operator: “why bother, srsly”; the repository has no remote. | E1 §§ S9, Operator decisions and wording. |
GLITCH-INTAKE | The operator had no glitch list: “no idea what thats about”. S5 therefore delivered only its fixed steps; no general frontend-polish completion is claimed. | E1 § Operator decisions and wording. |
| QuizWizz 1.3.1 | “Patch the clone, document”: installed clone only; pristine archive retained. | E1 §§ S9, Operator decisions and wording. |
YAML-12 | Open issue #12; JSON remains canonical; YAML-subset twins are outside this drive. | Issue #12; E1 § Operator/open items. |
IDEA-DARK | Backend dark mode versus a full WizzStizzl Wiz admin theme; hidden/off by default. | E1 § Operator/open items. |
IDEA-ICONS | Emoji JollyJoy versus icon BuizzyBuzz glyph-set toggle. | E1 § Operator/open items. |
IDEA-MODIFIERS | Points economy — kingconomic/TinyQiz qConomy raffle/lottery; limited-lives hearts; per-question countdown as a shrinking line. | E1 § Operator/open items. |
IDEA-INTERLANG | Same question and correct answer across languages, with different distractors. | E1 § Operator/open items. |
IDEA-IMGGEN | Image-generation quizzes, including art styles and pattern mode. | E1 § Operator/open items. |
IDEA-MASHUP | Wizard speed-quiz mashup with high-fidelity TTS and an animated DiceBear-style wiz face. | E1 § Operator/open items. |
IDEA-TRIVIA-PLUS | Mascot, music and TTS layers on Trivia HTML. | E1 § Operator/open items. |
IDEA-STARTER | Starter-library get-started page following 002-admin-get-started.png. | E1 § Operator/open items. |
IDEA-INSPECTOR | Further block-inspector features: theme override and per-block play-page override. | E1 § Operator/open items. |
DEFERRED-S9-AUDIT | Operator follow-up: deep feature audit of all eight historical versions, including print-modifier/pre-export flow, legacy Welcome-page solutions and which old-version aspects are “solved-ish”. | E1 § Operator/open items. |
All twelve drive-intake ids remain canonical rows in the open-work ledger. Review close-out added resolved HARNESS-SETTINGS-CAS, open SETTINGS-ENDPOINT-CAS and open HARNESS-EXTKILL, producing the current census 141 = 22 shipped + 9 bench-actionable + 50 owner-decidable + 49 terminal-blocked + 11 deferred. Evidence: open-work completion classes; E8.
Issue #11 is the coordinating drive issue and is closing on this evidence; the receipt does not claim the issue-state mutation already executed. Issue #12 remains open for the defaults YAML front end; issue #13 remains open for endpoint response atomicity. Evidence: E1, E8.
S10.6 residue sweep and same-day resolution
The table below preserves the first read-only S10.6 diagnosis. Its answer-key exception is a point-in-time observation from a contaminated Settings document and is superseded by the same-day amendment below; it is not the current verdict. Evidence: the initial capture behind E1/E5, corrected by E2/E3.
| Surface | Read-only result | Classification |
|---|---|---|
| Portability/private-file tables | wp_qwizz_portability_jobs=0, wp_qwizz_private_files=0, wp_qwizz_private_file_chunks=0. Tables are registered at includes/Install/StateRegistry.php:15-27. | Clean. |
| Cron | Only standing QuizWizz hooks were present: one-off qwizz_refresh_admin_statistics, hourly qwizz_cleanup_ephemeral, hourly qwizz_cleanup_private_files, daily qwizz_cleanup_security_tables; no portability, translation, migration or test-job hook. | Clean; full cron output is the S10.6 capture behind E5. |
| Named fixtures | Pages 11822/11845, users 895/896, WelcomeEditor matches, fixture onboarding usermeta and onboarding site options all counted 0; only normal administrator user_id=1 retained its standing onboarding row. | Clean. |
| Defaults fixture | wp/wp-content/quizwizz-defaults.json was absent. | Clean. |
| Plugin bytes | Ten gate-affected files produced an empty qwgit diff; full qwgit status --short was empty; no mutant, .orig, .rej, .bak or editor-backup name was found. The wrapper targets the live tree at scripts/qwgit.sh:10-11. | Clean; no mutant bytes remain. |
| Debug window | logs/debug.log had 38,594 lines and a Sep-1 tail ending 11:18:48 UTC: routine update lines, two expected tier-file diagnostics and eight expected invalid-default diagnostics; no PHP fatal, warning or notice in that drive-window tail. Emitters: includes/Admin/SettingsPage.php:163-180, includes/Settings/SettingsSchema.php:177-178. | Explained; no unexplained severity hit in the reviewed window. |
| Settings leaves | The initial live projection returned play_page_id=0, dashbar_style="cards", answer_key_questions=true, autostart=true, sound_default=false, auto_advance_ms=2500, guest_quiz_hours=24. | Initial exception, superseded below: answer_key_questions=true exposed the contaminated Settings state that triggered the revisioned repair. |
Initial intentional guest-quiz observation
At the initial sweep, five named guest quizzes were private and ephemeral with future expiry on September 2 under the 24-hour lifecycle. This is preserved as a point-in-time observation, not a current residue claim; the final S10 audit below reports zero posts in its broad S10 residue query. Evidence: initial SQL behind E5; final /tmp/s10-final-residue-audit.json.
| Quiz | Status | qw_ephemeral | Expiry UTC at sweep | Future at sweep |
|---|---|---|---|---|
| 11756 | private | 1 | 2026-09-02 07:17:08 | 1 |
| 11757 | private | 1 | 2026-09-02 07:20:25 | 1 |
| 11775 | private | 1 | 2026-09-02 08:51:12 | 1 |
| 11801 | private | 1 | 2026-09-02 09:06:48 | 1 |
| 11824 | private | 1 | 2026-09-02 09:40:37 | 1 |
The dossier’s gate-close snapshot also recorded browser fixture posts at zero, play_page_id=0, dashbar cards and no tier localStorage. The later answer_key_questions=true observation correctly stopped the first blanket clean-state claim and triggered the correction below. It does not remain the current Settings value or current residue verdict. Evidence: E1 § Final restoration; E2 § Evidence correction history; E5.
Same-day amendment — superseded diagnosis, then recovered resolution
Settings repair and independent proof
The first full browser invocation reached Trivia’s Settings writer and was hard-killed at the 300-second runner timeout, leaving presentation.answer_key_questions=true at revision 665ed4216b38c7be90a9156611a97e74fde1fb5a02d35d8df645fef9a006586f and snapshot SHA-256 8030b791b05cf24e79f9212211d107ae30c3f598274604c811920ca5f55639a3. Later early green runs restored the dirty document they inherited. Their assertions remain behavioral history, not current execution authority. Evidence: E2 § Evidence correction history; /tmp/s10-settings-residue-before.json.
Revisioned Settings REST repair produced revision 94754dd66f8e9b25660222e61c0c264660183115ddc3272a51eb0a6ffe1242b0. Three independent surfaces agreed: cache-disabled https://wrdp.loca.zone/wp-admin/admin.php?page=qw-settings showed the control present and unchecked; revisioned REST returned presentation.answer_key_questions=false; and independent WP-CLI returned false with compact JSON SHA-256 874bb4f7eb73a1b1fe7363aa765e02123be496830e3e0c9d62f3819b330dad32. Evidence: /tmp/s10-settings-final-browser-rest.json; /tmp/s10-settings-final-wpcli.json; E2 § Final Settings proof.
Against the Wave 7 pre-drive Settings snapshot, the repaired semantic document adds only admin_ui.dashbar_style="cards" and player.play_page_id=0, both drive schema additions. It removes no leaf and changes no shared leaf. Evidence: /tmp/s10-settings-final-diff-vs-wave7.json.
Backup-table incident and operator-approved recovery
The earlier conclusion that no pre-S10 full-row snapshot existed was wrong. The nightly root backup /home/loca/backups/wrdp/20260901T013013Z existed and supplied ten pre-drive owner-1 rows. The incident itself remained real: a 300-second-clamped harness run was externally killed, so the JavaScript finally/cleanup stack never ran; it leaked nine owner-1 harness rows, and SettingsBackup::write()’s per-writer cap displaced pre-existing history. That external-kill boundary remains explicit in scripts/quizwizz-browser-smoke.js:1-7; the ten recoverable backup payloads and checksums are recorded in /tmp/s10-drill-owner1-verified.json.
With operator approval and eyes on each mutation, the recovery:
- verified all ten root-backup payload SHAs and
size_bytesbefore any live write; - deleted exactly the nine attributable leaked ids, changing no surviving row;
- restored the ten pre-drive rows byte-exact;
- preserved the legitimate later owner-1 survivor.
Machine receipts are /tmp/s10-live-before-recovery-summary.json, /tmp/s10-live-after-delete-summary.json and /tmp/s10-live-recovered-summary.json. The accepted baseline is 95 rows with 11 owner-1 rows, ordered full-row JSON SHA-256 86100bbc6dd9b7a8312ef96cbdcb8a314e9fc53092eebd384233d5573f43898f and backup-id/row-identity SHA-256 270478b9c4435de4a0bb8bed5afab8318986792f511e681510398218916884bd (/tmp/s10-post-recovery-baseline.json). Intermediate drive-era owner-1 rows created and cap-displaced after the nightly snapshot remain unrecoverable; the receipt does not claim otherwise.
Final residue and accepted close
Earlier close-out removed three blank browser auto-drafts. The final-harness-byte re-gate later found two blank qw_question auto-drafts (12144, 12145) attributable only to disposable admins 976 and 977; both were deleted under exact author/type/status/title/content guards. The final query returned zero smoke fixture posts, smoke attempts, recent orphan attempts, reserved harness users and marked harness users, while Settings and the 95-row backup baseline matched exactly before/after. Evidence: /tmp/s10-final-harness-regate-{state-comparison,residue}.json; /tmp/s10-gates-evidence.md § Final harness re-gate.
Final verdict: ACCEPT with waived residuals; all four review P1s resolved. Plugin fixes are accepted at clean mirror HEAD 2da4b577; current evidence is shell 94/94, bounded browser 60/60 unique, mutation replays 2/10/11 and the recovered 95-row baseline. The waived residuals are Gitea #13, external-kill cleanup, benign per-run operator tokens and content-identical foreign saves. releaseEligible: false.
Final mirror chain
The live mirror log and clean-tree read close this exact ordered chain; no canonical release is implied:
4a0a313 → f52f3cd → 9f6d9a2 → ed215c5 → 1c3f68c → c29ac2d → 6c46a56 → a08b9d6 → d61d98c → 2da4b577
The last commit contains exactly the two adversarial-review plugin fixes; the browser-harness hardening remains bench-level and unmirrored. Evidence: mirror commit links in the slice/review sections; /tmp/s10-gates-evidence.md § Full shell, residue, and mirror close-out.