đź§° 2026-08-31 corpus repair
Historical record — 2026-08-31
This page preserves the drive’s point-in-time observations and states later corrections or completion receipts explicitly. It is the execution half of the 2026-08-31 completion drive; the decision half is the 2026-08-31 corpus triage. Current work state lives on the program masterplan, the executable contract on the probe harness, and the row-by-row status on the open-work ledger.
Release boundary
releaseEligible: false. Every change recorded here lives on the WRDP bench and in its Gitea mirror. Nothing here is released, shipped to canonical source, or eligible for it; canonical release eligibility stays false until the release owner carries the source changes through the locked source and release pipeline. The initial authoring snapshot had all nine drive commits local: ./scripts/qwgit.sh status -sb reported ## main...origin/main [ahead 9] with an empty --porcelain status. A completion readback later on 2026-08-31 records ## main...origin/main: mirror main is pushed through closing catalog commit f79feb6. Nine commits cover seven slices plus one catalog refresh because slice H was implemented incorrectly once, rejected, and superseded inside the drive.
W0 baseline pins
Recorded before any file changed, so a later red assertion can be told apart from a pre-existing one.
| Pin | Observed value |
|---|---|
| Backup snapshot | /home/loca/backups/wrdp/20260831T015916Z, drwx------ root root, members content.tar.gz, db.sql.gz, manifest.sha256, meta.txt, nginx.tar.gz |
| Snapshot metadata | wp_version=7.1, quizwizz_version=1.10.0, db_bytes=1796956, content_bytes=97454479, snapshot_table_count=41, snapshot_quizwizz_table_count=15, snapshot_quiz_count=107, snapshot_siteurl=https://wrdp.loca.zone |
| Pinned images | wordpress@sha256:b2ceeaabb8fa90e12f32fdf5c2479f4cef4508255fb406bd19aa23b1ce59bc46, mariadb@sha256:a794d9eb009e20de605858a11f32f63b4075cbd197c650436f0e3b457e4caed7 |
| Shell gate | ./scripts/quizwizz-probe.sh --wave all returned 1..76 and # assertions=76 failures=0 |
| Browser gate | 30/30, overallPass=true, consoleErrors=0, pageErrors=0, settings restored 10 to 10, editor row restored |
| Mirror sha | cf0753043e196c52d3a9df807a3a84ce895d9330 — Define missing Settings choice-card styles and accessible states, tree clean |
| Debug window origin | wc -c logs/debug.log = 7042962 bytes |
| Wiki rollback target | readlink /home/loca/dev/wikis/wrdp/current = dist-1788129513.061920758-1839651 |
No separate row-level database preimage was taken because no product-content mutation was planned at W0; the backup above nevertheless contains the full db.sql.gz. The drive later restored probe-only zero-question draft 11622 as Wave 8’s control and created then deleted transient draft 11670 for the block-editor observation; neither rewrote the published question corpus. The backup run reported every step ok including its scratch-database restore drill.
One harness correction preceded the baseline and is on the record because it changed the measurement, not the product. scripts/quizwizz-browser-smoke.js:206 asserted the dirty-tab copy with an English-only regex; the bench administrator inherits German, so the correct screen-reader copy nicht gespeicherte Änderungen failed a green behaviour. The regex now accepts either locale — the installed line reads /unsaved|nicht gespeichert/i — and the suite went 29/30 to 30/30. No plugin file changed.
Assertions authored red before the fixes
Every contract below was written and run before its fix existed, so each proof is a real red-to-green transition rather than a tautology. Both harness files are Main-owned; no slice agent edited either.
Wave 11 is wave11() at scripts/quizwizz-probe.sh:2847, printing # Wave 11: corpus-repair contracts at :2848, dispatched by 11) wave11 ;; at :2911 and appended to the all) arm at :2912. The plan line is computed from $RESULTS at :2914, so no count literal exists to maintain. The installed wave now holds seventeen assertions at :2861-2894:
| Assertion name | Row |
|---|---|
empty actions are absent from top tablenav | TOUR-02 |
question type helper is state-specific | TOUR-06 markup |
question type change updates helper | TOUR-06 script |
dashboard usable count has a singular branch | TOUR-11 |
supply count column uses usable authority | TOUR-12 |
misspelled product name is absent from settings source | TOUR-15 |
danger row exposes its active state | TOUR-16 |
portability export has visible copy | TOUR-17 |
portability import has visible copy | TOUR-17 |
portability download has visible copy | TOUR-17 |
portability cancel has visible copy | TOUR-17 |
pre-hydration player shell carries theme | TOUR-24b |
block editor removes duplicate Advanced panel | TOUR-23, replacing a superseded slice-H assertion |
site ceilings share one explanation | 3.2.1-CEIL |
exposure controls qualify accessible names | 3.2.1-SCOPE |
subjects screen registers supply views | 3.2.1-VIEWS |
dashboard labels identify event basis | 3.2.1-RUNS |
Sixteen of those were authored in W2 and all sixteen ran red: 1..16, failures=16. The seventeenth landed with Batch 2, which is why the Batch-1 aggregate plan was 1..92 and the closing plan is 1..93 — the W0 baseline 76 plus 17. That seventeenth slot then changed hands without changing the count: the assertion it originally held defended slice H’s wrong behaviour, and block editor removes duplicate Advanced panel replaced it in place, proved red against the pre-slice baseline f02cba9 and green after the fix was restored.
The durable browser suite gained its new contracts through the file’s own add() helper. The first run preserved every pre-existing check and both restoration paths and failed exactly eight new contracts: TOUR-01, TOUR-04, TOUR-05, TOUR-08, TOUR-16, TOUR-18, FL-001 and FL-002, with zero console and zero page errors.
Candidate contracts were dropped rather than kept as tautologies, each on a measurement:
- FL-001’s candidate changed a source marker without changing observable picker behaviour. Its request-path premise was refuted, the candidate was removed from the browser suite, and no product fix was installed; the full disposition is below.
- TOUR-07 did not reproduce at either viewport on 2026-08-31 — 0 of 9 anchor headings occluded, clearance 40.67 to 434.58 px on desktop and 38.67 to 91.11 px at 390 px.
- TOUR-09 and TOUR-24a are design-class rows and were never eligible.
- TOUR-20 has no live locked-quiz fixture on this bench, so no runtime assertion could observe it.
- TOUR-23 has no durable selected-block fixture, so its duplicate-panel contract is a shell
assert_not_matchon source rather than a browser assertion; the rendered proof was taken once on a transient fixture, see slice H. - TOUR-18’s shell class check was already green before any fix, so only the computed-paint contract was kept.
Shipped fixes
Twenty-two plugin files were installed across seven slices, plus five translation catalogs in a closing refresh. Slice H took two commits because its first implementation was wrong. Anchors below were re-read from installed source for this page, not copied from the slice reports.
Slice A — admin lists and supply metrics, commit 92ea35894f69df414a96b99971f323fe93cf0f22
Five PHP files: includes/Admin/AdminStatistics.php, includes/Admin/DashboardPresenter.php, includes/Admin/ListTables.php, includes/Subject/SubjectAdminUi.php, includes/Subject/SubjectSupplyFilter.php.
- TOUR-01 — the source badge is bounded inside its own column instead of by a global override: the column-width and badge-wrapping declarations sit in
ListTables::styles()atincludes/Admin/ListTables.php:363, giving.column-qw_sourcea fixed share and its badgemax-width: 100%,white-space: normalandoverflow-wrap: anywhere. - TOUR-02 — the empty-state block no longer renders into
div.tablenav.top. Themanage_posts_extra_tablenavregistration is gone;stage_empty_stateis now hooked onadmin_head-edit.phpat:38, and:317-323records why the not-found placeholder cell is the only seam core leaves betweentheadand the rows. - TOUR-11 —
_n()replaces the fixed plural: subject rows atincludes/Admin/DashboardPresenter.php:69-72, language rows at:94-97, and the supply notice atincludes/Subject/SubjectSupplyFilter.php:159-162. - TOUR-12 — the displayed count is now the usable authority the filter uses.
qw_usable_countis registered atincludes/Subject/SubjectSupplyFilter.php:25-26and:213-218with the renderer at:227-259, which links throughqw_valid=1and degrades to an explained em dash at:239when the payload never counted a subject. The core term-relationship total is relabelledPublished itemsatincludes/Subject/SubjectAdminUi.php:65-74, with:54-60stating that it counts every attached post type and is not the usable authority. - 3.2.1-VIEWS —
views_edit-qw_subjectis registered atincludes/Subject/SubjectSupplyFilter.php:24, so the taxonomy screen carries its own supply views. - 3.2.1-RUNS — the dashboard activity segment states each number’s event basis: the comment at
includes/Admin/AdminStatistics.php:735-741, the primary labelFinished attemptsat:745, and secondaries that name their own basis at:752,:757and:762.
Slice B — settings markup, commit 6a28df691d3aaa64eea2c1983a3b2a42faa98e84
One file: includes/Admin/views/settings-page.php.
- 3.2.1-CEIL — eight repeated ceiling labels collapse into one shared explanation. The sentence and its id are declared at
:378-379, rendered once withdata-site-ceiling-helpat:388, and referenced byaria-describedbyfrom the four named controls at:396,:400,:427,:448and the four generated completion actions at:461. The$toggleclosure gained the optional$describedbyargument at:26and emits it at:31-32, so no control lost its accessible name and nodata-pathmoved. - 3.2.1-SCOPE — every repeated state word is now qualified by its row object. The
$qualified()closure is at:44-46;data-exposure-labelis emitted on the state buttons at:49, the choice select at:65and the matrix default at:69. - TOUR-15 — the literal
Wizzardis gone from executable source. The heading now readsQuizWizz for visitorsat:826and the toggle’s accessible name matches at:833, with the provisional-spelling note recorded in-source at:825pending the owner’s canonical-name decision. The other name variants were deliberately untouched. - TOUR-16 markup half — the danger row publishes its own state:
data-qw-dangeris computed server-side at:887-888,offwhile content is preserved andonwhen uninstall would delete. Nodata-pathchanged. - TOUR-17 — the four portability controls carry visible text beside their icons:
Create exportat:900,Import JSONat:902,Downloadat:908,Cancel jobat:909. Their existingaria-labelvalues are preserved verbatim. The original finding’s wording is corrected on the record: the accessible names always existed, the visible labels did not.
Slice C — settings script, commit ebf4f2c3253c81d18c01880b005bfe9f52e17ff6
One file: assets/js/qwizz-admin-settings.js.
- TOUR-08 — a query that only names a section now collapses to a single fallback row. The rationale and the single-entry construction are at
:1134-1149and the crumb emission at:1202-1205; direct control hits are still listed individually. - TOUR-16 attribute tracking — the row’s state attribute follows the toggle client-side at
:412-417. - TOUR-07 script half — the sticky offset is read from the custom property instead of a literal, cached at
:996-1005. - FL-002 — portability polling is bounded and cancellable: the attempt counter at
:1582and:1634, the ceiling exit at:1609-1612, anAbortControllerper request at:1635-1636, and the terminal-status contract at:1622-1627, which mirrors the server’s own three-attempt cap.
Slice E — settings stylesheets, commit f02cba973792f65f243daf0990bb9f39bd084841
Four files: assets/css/qwizz-admin-responsive.css, assets/css/qwizz-admin-settings-core.css, assets/css/qwizz-admin-settings-layout.css, assets/css/qwizz-admin-settings-workspace.css.
- TOUR-07 CSS half — one custom property is now the single source of the offset.
--qw-settings-shelf-clearanceand--qw-settings-scroll-offsetare declared together atassets/css/qwizz-admin-settings-workspace.css:19-22; consumers read it at:139and:442, atassets/css/qwizz-admin-settings-core.css:164and atassets/css/qwizz-admin-settings-layout.css:1002-1003, and the mobile two-row case derives from it atqwizz-admin-settings-workspace.css:523-527. The four competing literals are gone, and:7-13records which one actually applied and why the other three were dead weight. The two remaining132pxand154pxoccurrences in the settings stylesheets are unrelated gridminmax()values, not scroll offsets. - TOUR-10 nav half — at 600 px and below the anchor strip becomes a fixed three-column grid that shows all nine sections at once, at
qwizz-admin-settings-workspace.css:487-491; the horizontally scrolling row remains for wider widths at:100and:395-401with snap alignment at:396and:409. - TOUR-16 CSS half — the destructive border is scoped to
.qwizz-danger-row[data-qw-danger="on"]atassets/css/qwizz-admin-settings-core.css:1690-1692, with the reasoning at:1677-1681; the safe state computes a neutral border.
Slice H — block editor script, superseded then replaced, commit 33989f99a170fcac0913c0373e7591dfc4ddcec7
One file: assets/js/qwizz-block-editor-enhance.js. This slice was installed twice, and the first attempt is on the record because it reached the bench and mirror before review rejected it.
The first commit, 8494823bba27d2248a582c0f2dd4b6e0b2d352b5, implemented the wrong behaviour. It installed read-only editor chrome exposing each enhanced block’s saved source attribute and left TOUR-23’s duplicate Advanced panel in place, so the craft inspector still emitted a second PanelBody titled Advanced. Its Wave 11 assertion, block editor exposes source identity, defended that wrong behaviour. Neither is claimed as a TOUR-23 fix anywhere on this page.
The superseding commit 33989f99a170fcac0913c0373e7591dfc4ddcec7, Merge craft controls into existing inspector, removes the source chrome and merges the Advanced controls into the existing plugin panel — one file, 10 insertions and 97 deletions per qwgit.sh show --stat 33989f9, installed www-data:www-data 644. Installed source now emits exactly one PanelBody in craftInspector(), at :502-503, titled Builder profile, with the merged Content, Generation, Presentation, Player and Completion groups inside it at :519-748. A search for title: __( 'Advanced' in that file returns no matches.
The Wave 11 assertion was replaced in step: block editor removes duplicate Advanced panel, an assert_not_match against title: __( 'Advanced' at scripts/quizwizz-probe.sh:2885-2886. The wave still holds seventeen assertions at :2861-2894, so the full plan is unchanged at 1..93.
| Item | Evidence |
|---|---|
| Wave 11 after the replacement | 1..17, green, reported by Main |
| Mutation pair | restoring the pre-slice baseline f02cba9 reddened only assertion 13, block editor removes duplicate Advanced panel; restoring the fix returned 1..17 green |
| Rendered proof | Main selected the craft block via list view on a transient draft page 11670: one core German Erweitert panel button, zero injected English Advanced buttons, Builder-Profil open and holding the five merged groups. The fixture was deleted afterwards |
Full --wave all after the replacement | 1..93, # assertions=93 failures=0, observed after both 33989f9 and the catalog commit f79feb6 |
| Block-editor catalog delta, measured | I18nRefresh regenerated from 33989f9 on a clean tree: the block-editor script catalogs go 94 to 93 messages against the pre-drive baseline, the single net removal being msgid Advanced. That is TOUR-23’s contract made catalog-visible — the injected duplicate panel no longer emits its own title — without needing a browser. POT references for assets/js/qwizz-block-editor-enhance.js: 100 pre-drive, 106 under 8494823, 99 now |
| Nothing German was lost | The three source-chrome msgids Source, No quiz selected and Every subject are confirmed absent from the regenerated block-editor JSON. Source and Advanced survive in the PO and MO because other files still use them — Source at includes/Admin/ListTables.php:51, :57 and :288, and Advanced at includes/Admin/SettingsPage.php:70 and includes/Admin/views/settings-page.php:972. Catalog totals at 33989f9: 1655 entries, 0 untranslated, 0 fuzzy. Net German delivered by this drive is 36 new msgids, not 38, because No quiz selected and Every subject were authored under 8494823 and retire with it |
Slice F — editor and finetune, commit b3ee3dfedb330a4d7fcfc9511e5140a9fab50ada
Seven effective files per qwgit.sh show --stat b3ee3df: three PHP views, three stylesheets, one script.
- TOUR-04 — the answer-review and answer-sheet labels and their helper sentences are separate elements:
includes/Admin/views/quiz-editor.php:8-15and:16-22, each helper aspan.descriptionoutside itslabel. - TOUR-05 — every choice row carries its own visible
Correctflag atincludes/Admin/views/question-choice-row.php:2, with the resting card and selected emphasis defined inassets/css/qwizz-admin-editor.css:3. - TOUR-06 — one helper sentence per question type is rendered and only the selected type’s sentence stays visible: markup
data-question-type-helpatincludes/Admin/views/question-editor.php:8, scriptassets/js/qwizz-admin-editor.js:49-52. - TOUR-10 index half — the narrow-width question row keeps its visible index;
assets/css/qwizz-admin-editor.css:8-9keeps the position column in the 520 px grid instead of dropping it. - TOUR-10 count-column half —
assets/css/qwizz-admin-subjects.css:344-378force-keepstd.column-qw_usable_countvisible in the compact row, labelling it from the nativedata-colnameso no new string is introduced. Description, slug and the corePublished itemstotal stay hidden at:173-174. The two halves share no selector, so slice E’s earlier nav work was not disturbed. - TOUR-18 — the remove action reads destructive at rest, with the reasoning at
assets/css/qwizz-admin-editor.css:113-116. - TOUR-19 — resting opacity is 1 and only a genuinely unavailable operation is muted:
assets/css/qwizz-finetune.css:515-518and:566-568.
Slice G — player and embed, commit 2327946d7442157ba4aef1bd3b10e5d9843f804b
Three files: assets/css/qwizz-empty.css, assets/js/qwizz-player.js, includes/Frontend/QuizEmbed.php.
- TOUR-24b — the server-rendered pre-hydration shell carries the quiz’s stored presentation:
data-themeis emitted atincludes/Frontend/QuizEmbed.php:49, and:51-56records why thesitecase drops the attribute instead of emitting it blank. JS reconciliation on start data is preserved and documented atassets/js/qwizz-player.js:384-388. - TOUR-20 — the locked-embed CTA gains the sibling button chrome at
assets/css/qwizz-empty.css:18:inline-flex, a 44 px minimum height, padding, radius and--qw-action-bg. Source-grounded only; see residue.
Matched mutation pairs
Each pair restored the slice’s pre-slice mirror state through /tmp/qwfix, observed the W2 assertion red, then restored the fix and observed it green. The restore point is always the pre-slice sha, never the W0 baseline, so a batch-1 slice landing on a shared file is never silently un-shipped.
| Slice | Pre-slice sha | Red on restore | Green after restore |
|---|---|---|---|
| A | cf075304 | Wave 11 assertions 1, 5, 15 and 16 red | all green; 20 of 20 source badges clear at 1280, document width 1265 within 1280, empty card in tbody and absent from the top tablenav |
| B | 92ea358 | all eight slice contracts red | all green; safe preserve state off, 34 of 34 exposure names unique, one shared ceiling help referenced by 8 controls, no rendered Wizzard |
| C | 6a28df6 | 26 section matches, backoff marker false, abort marker false | 1 section match, both markers true, danger state cycles off to on to off |
| E | ebf4f2c | 3 of 9 nav anchors visible, 923 px scrollWidth, safe row painted red | 9 of 9 visible, 343 px width equal to scrollWidth, neutral safe border and red destructive border |
| H | f02cba9 | assertion 13 block editor removes duplicate Advanced panel red, and only that one | 1..17 green; installed source emits one PanelBody titled Builder profile, and Main’s transient-fixture check saw one core German Erweitert panel button and zero injected English ones |
| F | 8494823 | Wave 11 helper assertions red | green; 4 of 4 correct flags visible against a 1 of 4 baseline, 5 px helper gap with distinct styling, remove red against a grey edit action where the baseline painted both grey, Boolean switch shows only the Boolean helper and reduces to two choices |
| G | b3ee3df | Wave 11 theme assertion red | green; raw pre-hydration HTML for quiz 413 carried data-theme="love" |
Install and lint facts
Every file was staged under /tmp/qwfix/<slice>/ and installed with sudo -n install -o www-data -g www-data -m 0644; no live file was edited in place and no ownership or mode was loosened. All twenty-two installed plugin paths verify as www-data:www-data 644:
includes/Admin/AdminStatistics.php includes/Admin/views/settings-page.php
includes/Admin/DashboardPresenter.php assets/js/qwizz-admin-settings.js
includes/Admin/ListTables.php assets/css/qwizz-admin-responsive.css
includes/Subject/SubjectAdminUi.php assets/css/qwizz-admin-settings-core.css
includes/Subject/SubjectSupplyFilter.php assets/css/qwizz-admin-settings-layout.css
includes/Admin/views/question-choice-row.php assets/css/qwizz-admin-settings-workspace.css
includes/Admin/views/question-editor.php assets/js/qwizz-block-editor-enhance.js
includes/Admin/views/quiz-editor.php assets/css/qwizz-admin-editor.css
includes/Frontend/QuizEmbed.php assets/css/qwizz-admin-subjects.css
assets/css/qwizz-empty.css assets/css/qwizz-finetune.css
assets/js/qwizz-player.js assets/js/qwizz-admin-editor.jsThe five catalogs installed by the closing refresh verify the same way — languages/quizwizz.pot, languages/quizwizz-de_DE.po, languages/quizwizz-de_DE.mo and the two quizwizz-de_DE-*.json script catalogs, all www-data:www-data 644. Every changed PHP file was linted in the container with sudo docker compose exec wordpress php -l wp-content/plugins/quizwizz/<file>.php and every changed script was syntax-checked, clean in each slice’s token window. vendor/, build/, release ZIPs, provenance outputs, QUIZWIZZ_VERSION and db_data/ were untouched, and no schema or bootstrap wiring changed.
Mirror commits and push state
Nine commits on main, oldest first, on top of the pre-drive baseline cf07530. Seven slices produced eight commits because slice H was implemented wrong once and superseded inside the drive; the ninth is the closing catalog refresh:
| Sha | Subject | Slice |
|---|---|---|
92ea35894f69df414a96b99971f323fe93cf0f22 | Repair admin list and supply metrics | A |
6a28df691d3aaa64eea2c1983a3b2a42faa98e84 | Clarify settings controls and danger state | B |
ebf4f2c3253c81d18c01880b005bfe9f52e17ff6 | Bound settings polling and collapse search | C |
f02cba973792f65f243daf0990bb9f39bd084841 | Make settings navigation and danger state clear | E |
8494823bba27d2248a582c0f2dd4b6e0b2d352b5 | Expose block source identity in editor | H — wrong behaviour, superseded by 33989f9 |
b3ee3dfedb330a4d7fcfc9511e5140a9fab50ada | Clarify question editor controls | F |
2327946d7442157ba4aef1bd3b10e5d9843f804b | Preserve player theme before hydration | G |
33989f99a170fcac0913c0373e7591dfc4ddcec7 | Merge craft controls into existing inspector | H — the accepted slice-H commit |
f79feb6f4f31eb4d7c03ea6083bed181eeab1294 | Refresh German catalogs for repaired UI | catalogs |
The initial authoring snapshot had an empty ./scripts/qwgit.sh status --porcelain and -sb reported ## main...origin/main [ahead 9]. The final 2026-08-31 readback reports ## main...origin/main: all nine commits are pushed through f79feb6. 8494823 stays in the history because it existed, not because it was accepted; 33989f9 carries the accepted slice H. Post-push Gitea state: #1, #3, #4, #7 and #8 closed; #2 open with deferred — corpus replacement inbound; #5 open for its owner decision because OpenRouter is unconfigured. Issue #6 had already closed on the 2026-08-30 choice-card repair.
FL-001 was refuted, not shipped
The assigned premise was that a request path leaves the subjects icon picker focus-trapped, so aria-modal="true" at includes/Subject/SubjectAdminUi.php:124 was untruthful. Installed source contradicts it. assets/js/qwizz-admin-subjects.js contains no HTTP or Promise request path at all — no fetch, no XMLHttpRequest, no apiFetch — only two window.requestAnimationFrame focus deferrals at :42 and :128. The picker already saves the background’s inert and aria-hidden state and sets both when opening at :121-125, restores exactly what it saved at :108-113, and returns focus to the trigger at :114.
Measured baseline behaviour with open and close in a single frame retained focus on the trigger and hid the panel. The proposed guard would have changed only a source marker, not observable behaviour, so the marker assertion that would have defended it was tautological and was removed from the browser suite rather than kept as green decoration. Gitea loca/quizwizz#3 is closed as not reproduced with its source premise false. No FL-001 change is installed.
Closing gates
| Gate | Command or method | Result |
|---|---|---|
| Full shell plan | ./scripts/quizwizz-probe.sh --wave all | 1..93, # assertions=93 failures=0, observed after the slice-H replacement 33989f9 and the catalog commit f79feb6 |
| 3.2.7 contract regression | ./scripts/quizwizz-probe.sh --wave 6 | 1..14, failures=0 |
| Canonical subject-tree digest | ./scripts/quizwizz-probe.sh --wave 9 | 1..17, failures=0, digest byte-identical |
| Browser smoke | durable Chromium suite, authenticated administrator, cache disabled | 37/37, restoration green, 0 console errors, 0 page errors |
| Debug window | wc -c logs/debug.log against the W0 origin | 7042962 bytes, identical to the origin — zero bytes appended across the drive, so no QuizWizz fatal, warning or database error was logged |
The 37 browser assertions are 29 single-call checks plus the four-assertion public-Builder block at scripts/quizwizz-browser-smoke.js:148-151, which runs twice from :489-490. Wave 6 staying green matters because slice E edits the same stylesheet that carries the 3.2.7 choice-card contract from cf07530; that contract’s own closure record is the 2026-08-30 choice-card prepend fix.
Two harness observations belong here rather than in a summary. During the W1 truth round wave 8 failed 1 of 4 because its zero-question control quiz was missing; a probe-only draft 11622 with qw_question_count=0 was restored and wave 8 re-ran 1..4 with failures=0. Separately, a pre-existing mobile-nav smoke assertion at scripts/quizwizz-browser-smoke.js:288 required the anchor strip to scroll; after slice E it accepts either all tabs visible or an internal scroller, because the fix makes all nine visible at 390 px. Both are Main-owned harness changes, not product changes.
Residue and limits
Recorded rather than smoothed over.
- TOUR-07 did not reproduce live on 2026-08-31 at either viewport. The offset consolidation shipped anyway as source-debt removal, and no live-defect claim is made for it.
- TOUR-20 shipped as CSS only. No locked-quiz fixture exists on this bench, so the computed paint of the locked-embed CTA was never observed on the standalone route.
- TOUR-19 shipped as CSS only. There was no live fine-tune fixture, so resting opacity is source-grounded and not browser-observed.
- TOUR-23’s proof is narrower than the other rows’. The durable browser suite has no selected-block fixture, so what defends the duplicate-panel absence is the Wave 11
assert_not_matchagainst source plus the measured catalog delta; the rendered observation Main took was on a transient draft page that no longer exists. A future regression would be caught by those two, never by a repeatable rendered check. - Translation catalogs caught up in a closing commit rather than inside a slice, and their proof stops at the catalog. Executable source carries zero
Wizzardand, afterf79feb6f4f31eb4d7c03ea6083bed181eeab1294, so do the installed catalogs — a search acrosslanguages/returns no matches, and nosite ceilingmsgid survives either. The TOUR-06 helper sentence now has German atlanguages/quizwizz-de_DE.po:7347-7348, with the source reference atlanguages/quizwizz.pot:2585pointing back toincludes/Admin/views/question-editor.php:8, and its Boolean sibling still resolves. The commit touches five files: the POT, the PO, the MO and the two block-editor JSON catalogs. The installed MO measures 149895 bytes, mtime2026-08-31 05:45:47, and holds 1,656 records including its header: all 1,655 message entries are translated, with zero untranslated and zero fuzzy; 36 new German msgids landed, and placeholder and PO/MO consistency checks are green. Two honest limits: the MO size must be re-measured rather than trusted from a first reading, because an in-flight check caught a 33181-byte partially written file that would have supported a false broken-catalog claim; and the German helper is verified in the catalog, not observed as rendered paint, because no cache-disabled Chromium pass was run after the catalog install. - The designer pass returned SHIP with zero visually proven regressions, but only two of its four assets were decidable. The settings captures arrived at 291 by 1024 and 200 by 1024, roughly 0.18 and 0.51 linear, so no designer verdict covers TOUR-07, TOUR-08, TOUR-16 on desktop, 3.2.1-CEIL, 3.2.1-SCOPE or the 390 px nav. Five of those six concerns retain their own shell or browser assertion; TOUR-07 rests instead on its measured non-reproduction, with the competing source offsets consolidated separately. The designer also measured 486 empty CSS px of a 1000 px player viewport, which keeps TOUR-24a inside its previously recorded band and owner-decidable. The full report and the owner-decision rows are on the 2026-08-31 corpus triage.
- Slice screenshots and staged mutation files were bench-local
/tmpartifacts. They are not retained in this vault, so every paint claim above rests on the computed-style measurements and the mutation pairs rather than on a stored image.
Live-fetch receipts
The vault content root is a symlink: /home/loca/dev/wikis/wrdp/content resolves to /home/loca/dev/wrdp/q5vault, so this page is part of the wrdp vault and is served by the wiki. Two production builds ran on 2026-08-31. The first published dist-1788151241.661169809-3726447, failed its live no-leak assertion on one route, and was rolled back to the pre-drive dist dist-1788129513.061920758-1839651 — the same target read at W0. The second, separately approved after that rollback, published dist-1788153309.461633591-3913543, which is what current names now. Every live observation in the first-attempt table below therefore describes the first dist rather than the served one; what the served dist itself returned is recorded once, in the post-republish receipt at the end of this page.
The thirteen table-cell wikilinks were re-fetched under the drive’s own build, which is the durable receipt the plan asked for. The five pages holding them — 2026-07-30-release-readiness.md:50, 2026-08-17-launch-readiness.md:50, 2026-08-27-canonical-handoff.md:26-29, ux-atlas-audit.md:87 and design/masterplan.md:66-70 — each returned HTTP 200 with zero literal [[. They render correctly and must not be escaped, and the three slash aliases in the ledger serve working redirects. The pre-drive fetch recorded in the approved plan reached the same result, and so did the sweep of the final dist-1788153309.461633591-3913543, so all three observations agree across all three dists.
W7 publish receipts
The first approved build published, failed its live assertion, and was rolled back
Every cell below is an observation of the first attempt, not an inference, and it stays on the record as history — including its dist
dist-1788151241.661169809-3726447and its repair cause, one genuine unresolved table-cell wikilink emitted by the masterplan’s own W9-07 row. The production build the owner’s standing answer authorised was consumed: it ran, it published, its live no-leak assertion failed on that single route, andcurrentwas restored to the pre-drive dist. The vault source was then repaired. A second production build was separately approved, has since run and has succeeded, but nothing in this table describes it: the current-dist observations are in the post-republish receipt that follows this table.
| Step | Expected observation | Result |
|---|---|---|
| Pre-publish lint, end of W5 | umask 022 && ./build.sh wrdp --check-only exits 0 | passed: 79 files parsed, 840 emitted, exit 0 |
| Pre-publish lint, end of W6 | umask 022 && ./build.sh wrdp --check-only exits 0 | passed: 79 files parsed, 840 emitted, exit 0 |
| Production build | umask 022 && ./build.sh wrdp, one approved run only | ran once and succeeded: 79 inputs built to 840 emitted files. This consumed the single approved slot |
| Swap and permissions | readlink wrdp/current names a new dist; stat -c '%A' wrdp/current/index.html is -rw-r--r-- | current named dist-1788151241.661169809-3726447 and the mode read -rw-r--r--, so the swapped tree was nginx-readable |
| Route sweep | every route under audits/qwizz/ returns HTTP 200, enumerated from the final vault | 72 of 72 enumerated routes returned HTTP 200 — the 70 pre-drive pages plus the two new dated records |
| This page live | HTTP 200 with its own H1 and zero unresolved wikilink syntax | 200 with its own H1 while dist-1788151241.661169809-3726447 was current. That dist is no longer served; the post-republish receipt records this page under the dist that is |
| Gate figure live | the 1..93 figure served on the current-state pages | served on the current-state pages under that dist, which is no longer current |
| Named needles | every needle named in the plan present on its own route | all present: Fix-loop era plus the newest wave heading on the changelog, the gate figure on now, both new dated titles on the audit index, Completion classes on the open-work ledger, the rewritten wave-table header on the masterplan, Wave 11 on the probe harness, completion class on shared language, and the EgoVersusRelay default on /operations |
| Live no-leak assertion | zero unresolved wikilink syntax on every asserted route | failed on exactly one route. /audits/qwizz/masterplan served one genuine unresolved table-cell wikilink, emitted from its W9-07 row. Every other literal [[ in the built output was a deliberate code or regex example rather than broken syntax: 1 in the legacy WXR regex, 1 historical example on the tasklist, 3 historical examples in the changelog, and 3 in this page’s own expected-observation prose as it stood at build time |
| Table-cell wikilink re-fetch | the five pages named above return 200 with zero literal [[ | all five returned HTTP 200 with zero literal [[, matching the pre-drive fetch |
| Rollback | restore current to the recorded target on any live failure | executed immediately per the plan: current was pointed at dist-1788129513.061920758-1839651, the pre-drive dist, which the public wiki then served until the second approved build swapped it |
| Source repair | fix the failing construct in the vault rather than work around it live | the masterplan W9-07 row became a Markdown link in source. It was still unpublished when this table was written; the second approved build published it |
| Republication | a second production build | approved after this rollback and since run: it succeeded, and current now names dist-1788153309.461633591-3913543. Its own observations belong to the receipt below, not to this attempt-one table |
The approval sequence matters for reading this table: the first attempt failed and was rolled back before any second approval existed, and the fresh approval arrived afterwards. The rows above are therefore complete and final as the record of attempt one, and no cell in them may be read as describing the second dist, its current, or its live assertion. Those belong to the receipt below, which records them exactly once.
Post-republish receipt — the served dist
Appended after the successful swap; source-only, not republished
Every line of this section was written after
currenthad already been swapped todist-1788153309.461633591-3913543, so the section is source-only: no third production build ran, none is claimed, and none is requested. That ordering is deliberate rather than accidental — the receipt has to describe a completed swap, so it cannot exist in the artifact it describes. The behaviour and routes recorded below were observed live on that final current dist before this text existed, which makes each row an observation rather than a projection. A reader checking the served page will find this prose only once some later, separately approved build publishes it, and until then the served copy of this page ends at the attempt-one table above while the source copy carries the full truth.
| Step | Expected observation | Result |
|---|---|---|
| Approval | a fresh owner approval for exactly one second production build | recorded after the first attempt’s rollback, and spent by the build below. Nothing here asks for another |
| Pre-build lint | umask 022 && ./build.sh wrdp --check-only exits 0 | passed: 79 Markdown inputs parsed, 840 emitted, exit 0 |
| Second production build | umask 022 && ./build.sh wrdp, the one newly approved run | ran once and succeeded: the same 79 Markdown inputs built to 840 emitted files |
| Swap and permissions | readlink wrdp/current names a new dist; stat -c '%A' wrdp/current/index.html is -rw-r--r-- | current names dist-1788153309.461633591-3913543 and the index mode read -rw-r--r--, so the swapped tree is nginx-readable |
| Route sweep | every route under audits/qwizz/ returns HTTP 200, enumerated from the final vault | 72 unique Markdown routes were enumerated from the final audits/qwizz/ vault and 72 of 72 returned HTTP 200 — the 70 pre-drive pages plus the two new dated records |
| Named needles | every needle named in the plan present on its own route | all ten named needle routes passed: Fix-loop era plus the newest wave heading on the changelog, the gate figure on now, both new dated titles on the audit index, Completion classes on the open-work ledger, the rewritten wave-table header on the masterplan, Wave 11 on the probe harness, completion class on shared language, the EgoVersusRelay default on /operations, and each of the two new dated pages under its own H1 |
| Live no-leak assertion | zero unresolved wikilink syntax on every asserted route | passed: zero unresolved wikilink syntax outside code, pre, script and style across every enumerated route. The W9-07 construct that failed attempt one now serves as a rendered Markdown link. The changelog and this page still hold deliberate literal [[ examples, and every one of them sat inside a code element, which is precisely why the assertion is scoped to non-code content instead of to the raw byte |
| Table-cell wikilink re-fetch | the five named pages return HTTP 200 with a literal [[ count of 0 | all five returned HTTP 200 with a literal [[ count of 0: 2026-07-30-release-readiness, 2026-08-17-launch-readiness, 2026-08-27-canonical-handoff, ux-atlas-audit and design/masterplan. Their thirteen table-cell wikilinks render correctly on the served dist and must not be escaped |
| Debug window | wc -c logs/debug.log unchanged against the W0 origin | 7042962 bytes, byte-identical to the W0 origin pinned at the top of this page: publishing the vault touched no bench runtime |
| Third production build | none | not run, not requested, not claimed. This receipt is the drive’s last edit and stays source-only |
Read the two receipt tables together and the publication history is complete: one attempt consumed, one failure diagnosed to a single construct, one source repair, one fresh approval, one successful republish, and no unrecorded build in between. Nothing in either table changes the bench’s disposition — every fix this page describes is still bench-local and releaseEligible: false, the corpus, taxonomy and census rows are still deferred — corpus replacement inbound, the issue dispositions are unchanged, and publishing a wiki page has never been a canonical release.